卷积操作的GPU粗粒度并行实现及测试(优化)
来源:互联网 发布:淘宝产品拍照 编辑:程序博客网 时间:2024/06/05 19:40
卷积操作的GPU粗粒度并行实现及测试(优化)
A.边界扩展;
B.字块对齐。
Matrix Size
Number
Kernel
CPU(s)
CPU2GPU
GPU-Kernel
GPU2CPU
5x4
1
5x4
<1ms
<1ms
<1ms
<1ms
12x9
1
5x4
<1ms
<1ms
<1ms
<1ms
18x19
1
5x4
<1ms
<1ms
<1ms
<1ms
118x29
1
5x4
<1ms
<1ms
<1ms
<1ms
138x59
1
5x4
<1ms
<1ms
<1ms
<1ms
158x159
1
5x4
0.005
<1ms
<1ms
<1ms
558x559
1
5x4
0.041
<1ms
0.001
<1ms
1128x1159
1
5x4
0.156
0.002
0.003
0.002
2128x2159
1
5x4
0.514
0.007
0.011
0.007
5128x5159
1
5x4
2.341
0.038
0.062
0.037
18128x4159
1
5x4
6.574
0.111
0.177
0.114
10128x11159
1
5x4
10.007
0.170
0.266
0.156
17.04Gflps
1.44GBps
5x4
1
14x15
~
~
~
~
12x9
1
14x15
~
~
~
~
18x19
1
14x15
<1ms
<1ms
<1ms
<1ms
118x29
1
14x15
0.003
<1ms
<1ms
<1ms
138x59
1
14x15
0.011
0.001
<1ms
<1ms
158x159
1
14x15
0.028
<1ms
<1ms
<1ms
558x559
1
14x15
0.343
<1ms
0.006
<1ms
1128x1159
1
14x15
1.289
0.002
0.023
0.003
2128x2159
1
14x15
3.929
0.007
0.081
0.007
5128x5159
1
14x15
21.869
0.041
0.467
0.041
11128x4159
1
14x15
39.2
0.072
0.819
0.066
10128x11159
1
14x15
93.912
0.161
1.999
0.195
23.71Gflps
372.86MBps
5x4
15
14x15
~
~
~
~
12x9
15
14x15
~
~
~
~
18x19
15
14x15
0.001
<1ms
<1ms
<1ms
118x29
15
14x15
0.003
<1ms
0.001
<1ms
138x59
15
14x15
0.099
0.001
0.002
<1ms
158x159
15
14x15
0.367
0.001
0.006
0.001
558x559
15
14x15
3.856
0.006
0.084
0.008
1128x1159
15
14x15
15.98
0.030
0.348
0.031
2128x2159
15
14x15
57.527
0.096
1.231
0.107
3058x2659
15
14x15
100.355
0.171
2.169
0.202
5128x5159
15
14x15
指针溢出
11128x4159
15
14x15
10128x11159
15
14x15
23.39Gflops
366.07MBps
分析:
从上表可知,最高吞吐率为1.44GBps,PCIE总线的带宽为5GBps,还有一定的空间。单精度浮点数乘法的最高有效计算性能为23.71Gflops,比之前的23.23Gflops有一点点提高,距设备的单精度浮点最高性能仍然差别较大,分析原因如下:
A. CPU传输给GPU的数据是一维数组,而在GPU内部是按二维进行运算的,在存取数据是需要做很多的地址计算操作。
B. 线程内部计算单个卷积结果时,使用了一个二维循环,当卷积核较大时,运算时间呈二阶指数型增长(最主要原因)。
C. CPU和GPU中数据都是连续存放的,当用malloc()函数申请的内存较大时,使用指针访问数据时出现内存溢出现象,导致无法测试更大规模的数据量,所以也就无法发挥GPU的运算性能。
D. 进行批处理卷积时,为了简化操作,做法是将多幅图像合成为一幅较大的图像,作为二维图像,然后一块儿卷积,在卷积进行中,做了很做的多余的卷积,在进行结果会写时,需要排除掉,因此增加了一些分支操作。
总结:
1. 这是卷积的粗粒度并行实现,本周也实现了一个细粒度并行的版本,每个Block有16x16个线程,每个Block对应一个卷积操作,一个线程对应一个乘法运算,每个Block归约出一个卷积结果。然而,在进行测试时发现,该版本速度较慢。原因可能是,每个Block一个卷积,矩阵和卷积核必须放在全局内存中,访问全局内存比访问共享内存慢很多,而且数据的复用性较低,导致效率不高。
2. 批处理卷积,使用三维Block处理时,可以避免多余的卷积运算和回写时的条件分支,但是在CPU和GPU中,数据是连续存放的,同时扩充多幅图像的边界比较困难,目前尚未找到理想的解决方案。
3. 粗粒度和细粒度都是操作级的并行,算法级的并行尚未实现。所谓算法级的并行,是指优化卷积算法本身,将二维卷积转化为其他空间的点乘操作,效率应该更高。
- 卷积操作的GPU粗粒度并行实现及测试
- 卷积操作的GPU粗粒度并行实现及测试(优化)
- CUDA优化之Unrolling Loop/ 并行粒度
- TensorFlow多GPU并行的实现
- TensorFlow多GPU并行的实现
- 深度学习网络卷积在GPU上的优化
- 基于GPU并行的矩阵转置优化
- 深度卷积神经网络CNNs的多GPU并行框架 及其在图像识别的应用
- 深度卷积神经网络CNNs的多GPU并行框架及其应用
- 深度卷积神经网络CNNs的多GPU并行框架及其应用
- 深度卷积神经网络CNNs的多GPU并行框架及其应用
- 深度学习卷积算法的GPU加速实现方法
- 基于GPU实现的高效的并行数据结构
- 串行与并行调度总结(细粒度串行粗粒度并行)
- 测试用例的粒度是粗还是细?
- 深度学习框架--深度卷积神经网络CNNs的多GPU并行框架 及其在图像识别的应用
- CUDA: GPU的并行计算
- 并行计算中的粒度
- eclipse设置工作空间默认编码格式
- 【jqgrid】简单封装
- android -- 蓝牙 bluetooth (五)接电话与听音乐
- 气体检测的本案电路相关
- 【POJ 1456】Supermarket
- 卷积操作的GPU粗粒度并行实现及测试(优化)
- 用karma测试angularjs应用
- WindowsApps删除注意事项,和删除Packages导致程序闪退解决办法
- Synergy 一套键鼠同时控制多台电脑的神器!超级方便!
- 数据结构:avl树
- 正则表达式(实例大全)
- 与Docker Hub一起工作
- Linux下Android Studio的安装步骤及关键点【整理】
- Rest API 学习笔记