为了深入了解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
16GB RAM
由于我对GPGPU完全不熟悉,我不知道会发生什么。
1.我的设置是否可能以某种方式搞砸了?如果是这样,我应该在哪里看?
2.或者我只是期待入门级显卡过多?如果是这样,不同型号的图形卡如何适应这种问题呢?如果我想让硬件更快,我必须寻找什么规格?
编辑:
好的,我只是用10x10矩阵重新编程。
不出所料,CPU需要不到1毫秒。
但是,GPU需要超过1600,所以Aparapi或openCL或我的硬件(驱动程序应该是最新的)肯定有问题。任何人都应该知道我应该在哪看?
答案 0 :(得分:0)
您的比较问题的一部分是您将低端移动GPU与良好的移动CPU进行比较。 GPU的单精度速度大约是CPU的2倍,并且它们的内存带宽相似。这些是你想仔细观察的两个规范。
上次我检查线性代数例程时,它们能够获得GPU的峰值浮点速度的大约60%。所有当前AMD和Nvidia GPU的速度都列在维基百科here和here上。您还希望使用较新的GPU而不是较旧的GPU。
答案 1 :(得分:0)
我使用AMD HD 7850和Intel Core i7-2600K测试了example code的C语言版本。对于1024X1024的情况,HD 7850 gpu需要42 ms,而单线程cpu功能需要将近7秒。
对于128X128,HD 7850 gpu需要4.9 ms,而单线程cpu功能只需2.0 ms。
因此,对于openCL算法足以产生完全加载GPU的并行性的情况,HD 7950 GPU比单CPU线程快得多。甚至id都使用了所有CPU线程,对于大型矩阵,GPU仍然会更快。