1

为了大致了解 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或我的硬件有问题(驱动程序应该是最新的)。有人知道我应该在哪里看吗?

4

2 回答 2

1

我使用 AMD HD 7850 和 Intel Core i7-2600K测试了示例代码的 C 语言版本。对于 1024X1024 的情况,HD 7850 gpu 需要 42 毫秒,而单线程 cpu 功能需要近 7 秒。

对于 128X128,HD 7850 gpu 需要 4.9 ms,而单线程 cpu 功能只需 2.0 ms。

因此,对于 openCL 算法能够产生足够的并行性以完全加载 GPU 的情况,HD 7950 GPU 比单个 CPU 线程快得多。即使使用了所有 CPU 线程,GPU 对于大型矩阵仍然会更快。

于 2013-10-12T04:39:00.980 回答
1

您比较的部分问题在于您将低端移动 GPU 与良好的移动 CPU 进行比较。GPU 的单精度速度大约是 CPU 的 2 倍,并且它们的内存带宽相似。这些是您要仔细查看的两个规范。

上次我检查线性代数例程时,它们能够获得大约 60% 的 GPU 峰值浮点速度。当前所有 AMD 和 Nvidia GPU 的速度都列在 Wikipedia herehere上。您还需要使用较新的 GPU 而不是较旧的 GPU。

于 2013-10-11T20:18:11.223 回答