我对GPU编程还比较陌生,但因为我有一个计算密集型的任务,所以我转向GPU以寻求可能的性能提升。
我尝试使用ArrayFire Free版本重写了我的程序。相比启用多线程的CPU例程,它确实更快,但并没有像我预期的那样(即& lt; 100%加速),而返回的结果也不太正确(与CPU例程相比误差& lt; 1%,假设CPU例程的结果是正确的)。
我的任务主要涉及大矩阵(300MB-500MB大小)上的逐元素float-32数学运算,很少有if-then/switch-case等操作。我猜测性能瓶颈可能是CPU和GPU内存之间的带宽,因为有很多数据读取等操作。我测试的GPU是一款带有3GB视频内存的GeForce 580GTX。
如果我为我的任务编写原始的CUDA代码(使用CUBLAS等和平均优化),相比于使用ArrayFire,仍有一定的优化空间吗?我读过一些NVIDIA优化指南;似乎有一些内存访问技巧可以加快数据访问速度并减少bank冲突。ArrayFire是否会自动使用这些通用技巧?