【问题标题】:Would a better graphics card or more cores make Mathematica faster?更好的显卡或更多的内核会使 Mathematica 更快吗?
【发布时间】:2012-01-28 03:53:43
【问题描述】:

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

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

只是想了解 Mathematica 如何利用硬件。

【问题讨论】:

  • 我想这取决于操作以及它是否使用 GPU 以及以何种方式。我敢说大多数复合操作不使用 GPU,因为 GPU 编程与 CPU 编程有很大不同。例如,FFT 非常适合 GPU 模型,但无法通过线性代数处理的一组方程可能完全不同。
  • 我想我是在问内置的 Mathematica 函数是否使用 GPU...
  • 您声明/暗示确实如此.. 漏掉一个字? :) Mathematica formums/brochure 将是发现这一点的地方:绝对不在这里,除非问题是关于编写这样的操作。
  • 我在 M 中进行基本模拟的短暂经验是,M 中的计算非常快,但在我看来,使事情变慢的是绘图和图形的渲染。因此,您可以做任何事情来优化这部分(更智能的绘图/图形制作方法,使用诸如PerformanceGoal->"Speed"MaxPlotPoints 之类的选项以及许多其他类似的东西都会有所帮助。所以我想更快的显卡会有所帮助。至于其他方面,M可以使用GPU和CUDA,我不使用这部分。
  • @Nasser,对我来说也差不多。渲染直方图和 DateListPlots 通常是速率确定步骤——即使是PerformanceGoal->"Speed"。 DateListPlot 很慢,因为 Mma 中的日期和时间函数非常慢。我希望看到 50 倍的速度提升,以使它们具有竞争力,例如VBA。

标签: performance wolfram-mathematica hardware


【解决方案1】:

至少在一般情况下,我不会说 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}

并具有 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}

正如人们所料,我们的评估速度几乎快了两倍。

【讨论】:

  • 嗨,Artes,我有一个相关的问题。我正在购买一台新笔记本电脑,主要用于 Mathematica。你是说我应该只关注 CPU 而不是太强调 GPU 吗?
  • @Y2H 这有点太笼统了,基本上你可以从你的 GPU 中得到很多,不过我想说它是次要的,首先要注意 CPU 和 RAM,更重要的是风格在Mathematica编程。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我不能对 Mathematica 如何使用 GPU 发表太多评论(因为我从来没有机会尝试过),但我不相信它默认会这样做 (i.e without you writing code specifically to exploit the GPU)

    如果您明确地并行计算,添加更多内核会有所帮助 (see Parallelize and related functions)。

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

    【讨论】:

    • 我知道有些图像处理操作也会默认使用多核。
    • 求解特征系统(密集或稀疏)也会自动使用许多核
    • @acl 我在双核 CPU 上尝试了Eigenvalues,但它只使用了一个核。也许Eigensystem 有但Eigenvalues 没有(这很不寻常)?我现在无法测试。
    • 所以,我刚刚尝试了With[{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 许可证限制了您可以启动的并行内核数量;但是,我所描述的是单个数学内核占用 200%(或 400%)。我不确定这是否受许可限制,也无法检查。
    猜你喜欢
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多