一般來說,Mathematica可以自動(即不用專門爲此編寫代碼)利用GPU硬件和/或跨多個內核並行操作內置操作?更好的圖形卡或更多內核會使Mathematica更快嗎?
例如,繪製一個非常CPU密集型的情節或解決一個非常CPU密集型的公式,將升級在加速的圖形硬件結果?升級到具有更多內核的CPU會加快速度嗎? (我知道更多的內核意味着我可以解決並聯多個方程式,但我很好奇的單方程的情況下)
只是試圖讓Mathematica的是如何利用硬件的手柄。
一般來說,Mathematica可以自動(即不用專門爲此編寫代碼)利用GPU硬件和/或跨多個內核並行操作內置操作?更好的圖形卡或更多內核會使Mathematica更快嗎?
例如,繪製一個非常CPU密集型的情節或解決一個非常CPU密集型的公式,將升級在加速的圖形硬件結果?升級到具有更多內核的CPU會加快速度嗎? (我知道更多的內核意味着我可以解決並聯多個方程式,但我很好奇的單方程的情況下)
只是試圖讓Mathematica的是如何利用硬件的手柄。
我不會說的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}
正如人們可以預期,我們已經得到了幾乎兩倍快的評價。
一般無,更快的GPU不會加速正常數學計算。
您必須使用CUDA/OpenCL的支持的功能使用GPU。您可以在這裏獲得選項的概述和其使用的一些示例:CUDA and OpenCL Support。
我不能評論太多的數學如何使用GPU(因爲我從來沒有嘗試的機會),但我不認爲它在默認情況下(i.e without you writing code specifically to exploit the GPU)
增加更多的內核將有助於做它如果明確並行計算(see Parallelize
and related functions)。
如果你不明確並行化,我相信仍然有某些利用多核的數值計算。我不確定哪一個,但我確實知道一些線性代數相關函數(LinearSolve
,Det
等)默認使用多個核心。
我會想象它取決於操作以及它是否利用GPU以及以何種方式。我敢說大多數複合操作都不使用GPU,因爲GPU編程與CPU編程有很大不同。例如,FFT適合GPU模型,但是一組無法通過線性代數處理的方程可能是完全不同的故事。 – 2011-12-26 20:31:20
我想我問是否內置Mathematica函數使用GPU ... – nicolaskruchten 2011-12-26 20:32:49
你說/暗示它..缺少一個詞? :) Mathematica formums /小冊子將是找到的地方:絕對不在這裏,除非問題是關於編寫這樣的操作。 – 2011-12-26 20:33:37