为了大致了解openCl对我有多大帮助,我对矩阵-矩阵乘法进行了测试,因为这种基本的线性代数将是我的主要用途。我使用的代码可以在这里找到:http://vasanthexperiments.wordpress.com/2011/11/20/aparapi-java-matrix-multiplication-example/。(1024*1024 x 1024*1024矩阵-矩阵乘积)
基本上,我对结果相当失望,因为与CPU上的串行计算相比,加速比只是微不足道的(小于x2),如果我让Aparapi使用CPU (它确实是并行化的),CPU甚至更快。
在执行过程中,显卡处于满负荷状态,因此我认为应该不会出现通信问题。
我的硬件配置:
i7 2670QM
AMD 7610M
16 RAM
因为我对GPGPU完全陌生,所以我不知道会发生什么。
编辑:
好的,我刚刚用10x10矩阵重新运行了程序。
不出所料,CPU只需要不到1ms。
然而,图形处理器需要超过1600个,所以肯定是Aparapi或openCL或者我的硬件有问题(驱动程序应该是最新的)。有谁知道我应该去哪里看吗?
发布于 2013-10-12 04:18:11
您比较的部分问题是,您将低端移动GPU与良好的移动CPU进行比较。GPU的单精度速度大约是CPU的2倍,而它们的内存带宽是相似的。这是您要仔细查看的两个规范。
上一次我检查线性代数例程时,它们能够获得GPU峰值浮点速度的60%。所有当前AMD和Nvidia GPU的速度都列在维基百科here和here上。您还会希望使用较新的GPU而不是较旧的GPU。
发布于 2013-10-12 12:39:01
我使用AMD HD7850和Intel Corei7-2600K测试了C语言版本的example code。对于1024X1024的情况,高清7850 gpu需要42ms,而单线程cpu功能需要近7秒。
对于128X128,高清7850 gpu需要4.9ms,而单线程cpu功能只需要2.0ms。
因此,对于openCL算法可以产生足够的并行性来完全加载图形处理器的情况,HD7950GPU比单个CPU线程快得多。即使所有的CPU线程都被使用了,GPU对于大的矩阵仍然会更快。
https://stackoverflow.com/questions/19279344
复制相似问题