可分离滤波器设计高斯滤波 CUDA程序优化, 实验记录
环境:RTX2060 ,1920X1080p ,循环10次, kernal_size=8
一 、测试前128个线程拷贝到dst数据的性能 ,只测试行卷积, block=(128+2r)X1
1. 使用中间128个线程拷贝 : (36.37+37.11+36.32)/3 = 36.6 GB
2. 改为前128个线程拷贝出数据: (38.89+39.53+39.74)/3 = 39.39GB
实验结果:使用前128个线程拷贝会快10.7%
二 、 测试const 变量对性能的影响 ,只测试行卷积 block =(128+2r)X1
1. radius 为局部变量(函数传入) 40.1 GB
2. radius 为__constant__ 变量 , 40.2GB
实验结果 __constant__ 和 局部变量 的性能实际上差不多
三、 测试block 线程数对性能的影响, 只测试行卷积
1. block = (64+2r)X1 37.10GB
2. block = (128+2r)X1 40.33GB
3. block = (256+2r)X1 37.75GB
4. block = (512+2r)X1 28.31GB
5. block = (128)X1 37.3GB
6. block=(320+2r)X1 34.26GB
7. block=320X1 39GB
8.block=160X1 38.57GB
9.block=(160+2r)X1 39.04GB
10 block=(640+2r)X1 30.34GB
11 block=640X1 27.96GB
实验结果 : block并不是越大越好, 选择 block = (128+2r)X1 可能好一点吧~
四、列卷积时候, 测试连续copy 和 跳步copy性能,只测试列卷积,行卷积注释掉
1. 跳步copy :45.11GB
2. 行连续copy:36.98GB
3 列连续copy:47.31GB
下图分别是1,2,3的拷贝过程示意图
实验结果: 使用第三种拷贝方式会加速4.9%



五、 使用单列拷贝 ,只测试列卷积
1. block=(128+2r)X1 18.89GB
实验结果: 使用单列进行计算会很慢
六 、 测试IMUL对性能的影响
1. 无IMUL 28.30GB
2. IMUL 28.38GB
实验结果 IMUL对实验结果无影响
七 、测试float4 对性能的影响,只测试行卷积
1. 无float4
2. float4
八 、列卷积时候, 测试连续计算 和 跳步计算性能,行卷积没有注释
连续计算 23.7GB
跳步计算 28.7 GB
实验结果: 跳步计算要快一些
可分离滤波器设计高斯滤波 CUDA程序优化, 实验记录的更多相关文章
- opencv 源码分析 CUDA可分离滤波器设计 ( 发现OpenCV的cuda真TM慢 )
1. 主函数 void SeparableLinearFilter::apply(InputArray _src, OutputArray _dst, Stream& _stream) { G ...
- 学习 opencv---(7) 线性邻域滤波专场:方框滤波,均值滤波,高斯滤波
本篇文章中,我们一起仔细探讨了OpenCV图像处理技术中比较热门的图像滤波操作.图像滤波系列文章浅墨准备花两次更新的时间来讲,此为上篇,为大家剖析了"方框滤波","均值滤 ...
- 滤波器——BoxBlur均值滤波及其快速实现
个人博客地址:滤波器--BoxBlur均值滤波及其快速实现 动机:卷积核.滤波器.卷积.相关 在数字图像处理的语境里,图像一般是二维或三维的矩阵,卷积核(kernel)和滤波器(filter)通常指代 ...
- matlab做gaussian高斯滤波
原文链接:https://blog.csdn.net/humanking7/article/details/46826105 核心提示 在Matlab中高斯滤波非常方便,主要涉及到下面两个函数: 函数 ...
- CUDA性能优化----warp深度解析
本文转自:http://blog.163.com/wujiaxing009@126/blog/static/71988399201701224540201/ 1.引言 CUDA性能优化----sp, ...
- SIFT四部曲之——高斯滤波
本文为原创作品,未经本人同意,禁止转载 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 或 ...
- 一步步做程序优化-讲一个用于OpenACC优化的程序(转载)
一步步做程序优化[1]讲一个用于OpenACC优化的程序 分析下A,B,C为三个矩阵,A为m*n维,B为n*k维,C为m*k维,用A和B来计算C,计算方法是:C = alpha*A*B + beta* ...
- Java 程序优化 (读书笔记)
--From : JAVA程序性能优化 (葛一鸣,清华大学出版社,2012/10第一版) 1. java性能调优概述 1.1 性能概述 程序性能: 执行速度,内存分配,启动时间, 负载承受能力. 性能 ...
- Atitit 图像处理 平滑 也称 模糊, 归一化块滤波、高斯滤波、中值滤波、双边滤波)
Atitit 图像处理 平滑 也称 模糊, 归一化块滤波.高斯滤波.中值滤波.双边滤波) 是一项简单且使用频率很高的图像处理方法 用途 去噪 去雾 各种线性滤波器对图像进行平滑处理,相关OpenC ...
随机推荐
- Linux系统(ubuntu)部署Asp.Net Core网站
一.前言 亲自动手尝试部署.Net Core在Linux,看了不少文章,感觉是很简单,但是做下去也会有很多问题,今天就写个文章记录下来. 二.环境安装 虚拟机(VMware),在网上找就行. 地址:h ...
- Swarm容器集群管理(超详细)
一.Swarm介绍 Swarm是Docker公司自研发的容器集群管理系统, Swarm在早期是作为一个独立服务存在, 在Docker Engine v1.12中集成了Swarm的集群管理和编排功能.可 ...
- Monkey框架(基础知识篇) - monkey启动与参数介绍
一.monkey启动 直接PC启动:> adb shell monkey [options] <count> shell 端启动:> adb shell >monkey ...
- NFV实验平台
NFV架构如下图所示. NFVI对应于数据平面,数据平面转发数据并提供用于运行网络服务的资源. MANO对应于控制平面,该控制平面负责构建各种VNF之间的连接以及编排NFVI中的资源. VNF层对应于 ...
- maven工程中MENIFEST.MF中属性作用
Manifest-Version: 版本号 Bundle-ManifestVersion: bundle的版本号 Bundle-Name: bundle的名称,主要是对bundle的作用的说明 Bun ...
- Predicting effects of noncoding variants with deep learning–based sequence model | 基于深度学习的序列模型预测非编码区变异的影响
Predicting effects of noncoding variants with deep learning–based sequence model PDF Interpreting no ...
- redis-查看日志
转: redis-查看日志 redis在默认情况下,是不会生成日志文件的,所以需要配置 配置方法: 1.首先找到redis的配置文件 2.打开配置文件,找到logfile(可能有多个logfile,认 ...
- java生成订单编号
随着项目用户数量的扩大,高并发随之而来.那么如何在当前系统生成唯一编号呢? 一台数据库可以用自增,集群呢?当然也有随之的解决方案,但是最好的还是在项目生成了唯一的编号再插入到数据库.而不是数据库插入了 ...
- 位运算在 PHP 实际项目当中的高级运用
我们首先来看一个系统中常见的需求: 有一个广告表,我们要对广告做显示控制: 手动上下线. 只允许 VIP 查看. 可能的表结构如下: CREATE TABLE `finger_ad` ( `ad_id ...
- [简短问答]LODOP打印不清晰
用什么语句输出的:使用的的是什么语句输出的,是ADD_PRINT_TEXT纯文本,还是html的超文本. 超文本不清晰:如果用的是ADD_PRINT_HTML ,换成 ADD_PRINT_HTM试试, ...