我想知道是否有方法来优化matlab函数gather
。我正在开发一个非常巨大的矩阵的Cuda代码,我注意到我必须使用的gather
函数来获取我的GPU数据非常缓慢。对于2^13x2^8矩阵,大约需要3秒!Cuda中的Gpuarray/Matlab
2
A
回答
3
gpuArray.gather
的性能受限于您的PCI总线。您只能通过收集较少的数据(例如使用索引)来优化这一点。请注意,在更新版本的并行计算工具箱中,许多操作是异步的,但gather
不是 - 因此您可能只是看到完成异步请求的时间。您可以使用wait(gpuDevice)
进行检查以同步设备。
+2
我认为没有基准测试'gpuArray.gather',但做一些粗略的数学运算,2^21浮点数或双精度数组应该大约为16或32MB。这应该不需要接近3秒的传输时间,所以我认为在进行任何时间测量之前进行同步的建议是一个非常好的调查 - 无论如何,这是非matlab GPU代码的常见时序错误。我确实在一段时间内做了一些gpuArray矩阵乘法的时机,它一定是在matlab将操作暴露为异步之前,因为我只是在乘法周围使用了tic和toc。 – 2013-03-27 14:35:20
相关问题
- 1. 在CUDA编程中使用基于窗体的Cuda的Cuda
- 2. cuda 8.0中'cuda-memcheck'的错误
- 3. CUDA 5.5中的assert()
- 4. Cuda中的算法
- 5. CUDA中的性能
- 6. CUDA中的thrust :: device_vector
- 7. CUDA中的C++ bitset
- 8. CUDA中的JPEG库
- 9. 和CUDA中
- 10. Nvidia Cuda计划 - 我的Cuda适合Cuda架构吗?
- 11. CUDA中的二维数组
- 12. 版面中的CUDA 7
- 13. CUDA中的printf __global__函数
- 14. CUDA中的指针阵列
- 15. 内核中的CUDA流ID
- 16. Windows XP Embedded中的CUDA
- 17. cuda中的共享内存
- 18. CUDA中的Triple For循环
- 19. Compute Visual Profiler中的CUDA memset
- 20. CUDA中的一维fftshift
- 21. Dijkstra在CUDA中的算法
- 22. CUDA中的原子操作
- 23. CUDA中的嵌套内核
- 24. CUDA中的内核调用
- 25. CUDA中的二分法
- 26. CUDA中的blockIdx(和threadIdx)
- 27. CUDA中的位阵列
- 28. cuda 8.0中的nvcc警告
- 29. cuda中的流过滤器
- 30. CUDA中的图像处理
@MariusBrendmoe,[collect](http://www.mathworks.com/help/distcomp/gather.html)是matlab中将gpuArray类型从设备内存移回主机内存的函数。在matlab GPU代码中不一定有用户定义的内核。 – 2013-03-27 14:38:26
你好,我正在使用GTX 680卡。而我的矩阵包含单个(在cuda中浮动)值。 – ALFRAM 2013-03-27 15:57:02