一般情况下,Mathematica可以自动(即不专门为此编写代码)利用GPU硬件和/或跨多个内核并行化内置操作吗?
例如,为了绘制单个CPU密集型图或解决CPU密集型方程,升级图形硬件会导致加速吗?升级到具有更多内核的CPU会加快速度吗? (我意识到更多的核心意味着我可以并行解决更多的方程式,但我对单方程的情况感到好奇)
试图了解Mathematica如何利用硬件。
答案 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),则添加更多核心将有所帮助。
如果没有明确地并行化,我相信仍有一些数值计算可以利用多个核心。我不确定是哪一个,但我知道一些线性代数相关函数(LinearSolve
,Det
等)默认使用多个核心。