nic*_*ten 11 hardware performance wolfram-mathematica
一般来说,Mathematica可以自动(即不专门为此编写代码)利用GPU硬件和/或跨多个内核并行化内置操作吗?
例如,为了绘制单个CPU密集型图或解决CPU密集型方程,升级图形硬件会导致加速吗?升级到具有更多内核的CPU会加快速度吗?(我意识到更多核心意味着我可以并行解决更多方程式,但我对单方程式情况感到好奇)
试着了解Mathematica如何利用硬件.
Art*_*tes 11
我不会说Mathematica会自动执行GPU或Paralell-CPU计算,至少在一般情况下如此.由于您需要对并行内核执行某些操作,因此您应该初始化更多内核和/或上载CUDALink或OpenCLLink,并使用特定的Mathematica功能来利用CPU和/或GPU的潜力.
例如,我没有非常强大的显卡(NVIDIA GeForce 9400 GT),但我们可以测试CUDALink的工作原理.首先我必须上传CUDALink:
Needs["CUDALink`"]
Run Code Online (Sandbox Code Playgroud)
我将测试大型矩阵的乘法.我5000 x 5000在范围内选择实数的随机矩阵(-1,1):
M = RandomReal[{-1,1}, {5000, 5000}];
现在我们可以检查计算时间而无需GPU支持
In[4]:= AbsoluteTiming[ Dot[M,M]; ]
Out[4]= {26.3780000, Null}
Run Code Online (Sandbox Code Playgroud)
并支持GPU
In[5]:= AbsoluteTiming[ CUDADot[M, M]; ]
Out[5]= {6.6090000, Null}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,通过使用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}
Run Code Online (Sandbox Code Playgroud)
while using Parallelize[expr],使用自动并行化评估expr
In[141]:= AbsoluteTiming[ Parallelize[ Select[ Range[ 2^300, 2^300 + 10^6], PrimeQ ] ]; ]
Out[141]= {63.8650000, Null}
Run Code Online (Sandbox Code Playgroud)
正如人们所料,我们的评估速度快了近两倍.
通常不会,更快的GPU不会加速正常的Mathematica计算.
您必须使用Cuda/OpenCL支持的功能才能使用GPU.您可以在此处获得选项的概述及其使用的一些示例: CUDA和OpenCL支持.