Solving Ax = b , CUDA vs Matlab



我已经在MATLAB上进行了以下测试:

n = 10000;
A = rand(n,n);
b = rand(n, 1);
tic
y = Ab;
toc

在我的英特尔i7 Gen 5机器上(12个内核),结果是〜5秒。

然后,我尝试使用CUDA 9.2示例SDK代码进行相同的操作(请参阅Cusolverdn_linearsolver.cpp)。出乎意料的是,在我的NVIDIA 970GTX上,我得到〜6.5秒以获取与上述相同问题大小的解决方案!

怎么了?我提到我的矩阵是对称的,正方形和B只有1列。是否有更好的方法可以使用CUDA解决此问题?如果我要使用较新的GPU,我应该期望更大的性能吗?

这是我用于测试此

的代码
n = 10000;
A = rand(n,n,'single');
b = rand(n, 1,'single');
tic
y = Ab;
toc
A = gpuArray(A);
b = gpuArray(b);
tic
y = Ab;
toc

这是结果

Elapsed time is 2.673490 seconds.
Elapsed time is 0.553348 seconds.

我正在使用具有GTX 1060 GPU的7700 4核心笔记本电脑运行,我认为与大约相同的计算能力。如您所见,在这种情况下,GPU运行速度更快。最有可能的因素是精度。GPU只有单个精度乘数,而CPU具有双精度乘数。如果您必须在GPU上进行双重精度乘法,则必须采用相同的乘法器才能进行相同的操作,从而大大降低了您的速度。如果我更改它,所以变量是双重精度,我们现在得到:

Elapsed time is 5.784525 seconds.
Elapsed time is 5.398702 seconds.

虽然我的计算机上的GPU仍然更快,但点仍然存在于CPU和GPU现在更近的地方。

最新更新