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

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)

正如人们所料,我们的评估速度快了近两倍.


Mr.*_*ard 8

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

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