更好的显卡或更多内核会使Mathematica更快吗?

时间:2011-12-26 20:26:13

标签: performance wolfram-mathematica hardware

一般情况下,Mathematica可以自动(即不专门为此编写代码)利用GPU硬件和/或跨多个内核并行化内置操作吗?

例如,为了绘制单个CPU密集型图或解决CPU密集型方程,升级图形硬件会导致加速吗?升级到具有更多内核的CPU会加快速度吗? (我意识到更多的核心意味着我可以并行解决更多的方程式,但我对单方程的情况感到好奇)

试图了解Mathematica如何利用硬件。

3 个答案:

答案 0 :(得分:11)

我不会说Mathematica会自动执行GPU或Paralell-CPU计算,至少在一般情况下如此。由于您需要对并行内核执行某些操作,因此您应该初始化更多内核和/或上载CUDALink或OpenCLLink,并使用特定的Mathematica功能来利用CPU和/或GPU的潜力。

例如,我没有非常强大的显卡(NVIDIA GeForce 9400 GT),但我们可以测试CUDALink的工作原理。首先,我必须上传CUDALink

Needs["CUDALink`"] 

我将测试大型矩阵的乘法。我选择5000 x 5000范围内实数的随机矩阵(-1,1)

M = RandomReal[{-1,1}, {5000, 5000}];

现在我们可以检查没有GPU支持的计算时间

  In[4]:= AbsoluteTiming[ Dot[M,M]; ]

  Out[4]= {26.3780000, Null}

并支持GPU

In[5]:= AbsoluteTiming[ CUDADot[M, M]; ]

Out[5]= {6.6090000, Null}

在这种情况下,我们通过使用CUDADot代替Dot获得了大约4倍的性能提升。

修改

要添加并行CPU加速的示例(在双核机器上),我选择范围[2^300, 2^300 +10^6]中的所有素数。  首先没有并行化:

In[139]:= AbsoluteTiming[ Select[ Range[ 2^300, 2^300 + 10^6], PrimeQ ]; ]

Out[139]= {121.0860000, Null}

使用Parallelize[expr]时,使用自动并行化评估expr

In[141]:= AbsoluteTiming[ Parallelize[ Select[ Range[ 2^300, 2^300 + 10^6], PrimeQ ] ]; ]

Out[141]= {63.8650000, Null}

正如人们所料,我们的评价速度提高了近两倍。

答案 1 :(得分:8)

通常不会,更快的GPU不会加速正常的 Mathematica 计算。

您必须使用Cuda / OpenCL支持的功能才能使用GPU。您可以在此处获得选项的概述及其使用的一些示例:CUDA and OpenCL Support

答案 2 :(得分:4)

我无法评论Mathematica如何使用GPU(因为我从未有机会尝试过),但我不相信默认情况下这样做(i.e without you writing code specifically to exploit the GPU

如果明确并行化计算(see Parallelize and related functions),则添加更多核心将有所帮助。

如果没有明确地并行化,我相信仍有一些数值计算可以利用多个核心。我不确定是哪一个,但我知道一些线性代数相关函数(LinearSolveDet等)默认使用多个核心。