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

Performance 更好的显卡或更多的内核会使Mathematica更快吗?,performance,wolfram-mathematica,hardware,Performance,Wolfram Mathematica,Hardware,一般来说,Mathematica是否可以自动(即,无需专门为此编写代码)利用GPU硬件和/或跨多个内核并行化内置操作 例如,对于绘制单个CPU密集型绘图或求解CPU密集型方程,升级图形硬件会导致速度加快吗?升级到具有更多内核的CPU会加快速度吗?(我意识到更多的核意味着我可以并行求解更多的方程,但我对单一方程的情况很好奇) 只是想弄清楚Mathematica是如何利用硬件的。我不会说Mathematica自动进行GPU或并行CPU计算,至少在一般情况下是这样。由于您需要使用并行内核进行一些操作,

一般来说,Mathematica是否可以自动(即,无需专门为此编写代码)利用GPU硬件和/或跨多个内核并行化内置操作

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


只是想弄清楚Mathematica是如何利用硬件的。

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

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

Needs["CUDALink`"] 
我要测试大矩阵的乘法。我选择范围
(-1,1)
内实数的随机矩阵
5000 x 5000

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

现在我们可以在不支持GPU的情况下检查计算时间

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

  Out[4]= {26.3780000, Null}
In[5]:= AbsoluteTiming[ CUDADot[M, M]; ]

Out[5]= {6.6090000, Null}
并支持GPU

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

  Out[4]= {26.3780000, Null}
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}
在使用
并行化[expr]
时,它使用自动并行化来计算expr

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

Out[141]= {63.8650000, Null}

正如人们所预料的那样,我们的计算速度快了近两倍。

通常情况下,更快的GPU不会加速正常的Mathematica计算


您必须使用Cuda/OpenCL支持的函数才能使用GPU。你可以在这里看到这些选项的概述和它们的一些使用示例:。

我不能对Mathematica如何使用GPU发表太多评论(因为我从来没有机会尝试过),但我认为默认情况下它不会这么做()

如果显式地并行化计算(),添加更多内核将有所帮助


如果你没有明确的并行化,我相信仍然有一些数值计算利用了多核。我不确定是哪一个,但我确实知道一些与线性代数相关的函数(
LinearSolve
Det
,等等)默认情况下使用多核。

我想这取决于操作以及它是否使用GPU,以及以何种方式使用。我敢说,大多数复合操作都不使用GPU,因为GPU编程与CPU编程有很大不同。例如,FFT很适合GPU模型,但不能通过线性代数处理的一组方程可能是完全不同的情况。我想我是问内置Mathematica函数是否使用GPU…你说/暗示它使用。。漏掉一个字?:)Mathematica公式/手册将是找到答案的地方:绝对不是这里,除非问题是关于编写这样的操作。我在M中进行基本模拟的短暂经验是,M中的计算速度非常快,但在我看来,缓慢的是绘图和图形的渲染。因此,您可以采取任何措施来优化该部分(使用
PerformanceGoal->“Speed”等选项,以更智能的方式制作绘图/图形)
MaxPlotPoints
以及许多其他类似的东西都会有帮助。因此我想象一个更快的图形卡会有所帮助。至于其他方面,M可以利用CUDA的GPU。我不使用它的这一部分。@Nasser,对我来说也差不多。绘制直方图和DateListPlot通常是决定速度的步骤——即使是
性能RMnaceGoal->“Speed”
。DateListPlot很慢,因为Mma中的日期和时间函数非常慢。我希望看到速度提高50倍,使其与VBA等竞争。我知道一些图像处理操作默认情况下也会使用多核。解算特征系统(密集或稀疏)也使用许多内核automatically@acl我在双核CPU上尝试了特征值,但它只使用了一个内核。也许特征系统会,但特征值不会(这很不寻常)?我现在无法测试。所以,我只是尝试了[{upN=10000,sites=2000},sp=SparseArray[Thread[RandomInteger[{1,sites},{upN,2}]->RandomReal[{0,1},upN]],{sites,sites}]];{evals,evecs}=Eigensystem[sp,-500];
(它创建一个稀疏数组,然后获得特征值和特征向量),它使用我的macbook的两个核心。我还通过ssh在我的一台办公机器上运行它,它使用了那里的所有4个核心(linux)@Searke许可证限制了您可以启动的并行内核的数量;但是,我描述的是单个mathkernel占用200%(或400%)。我不确定这是否受到许可证的限制,也没有办法检查。嗨,阿尔特斯,我有一个相关的问题。我正在买一台主要用于Mathematica的新笔记本电脑。你是说我应该只关注CPU,而不太重视GPU吗?@Y2H这是一个有点太普遍的问题,基本上你可以从你的GPU n获得很多尽管如此,我还是要说它是次要的,首先要注意CPU和RAM,更重要的是
Mathematica
中的编程风格。