2011-08-03 64 views
5

我有很多數百個單元格長的Mathematica文件,我想使用並行評估。我有一個2處理器×4核心每臺機器16 Gb內存。我的Mathematica許可證允許我最多運行2個主內核,其中1個主內核可以有4個從內核(這是我用它玩了一段時間後的解釋)。在Mathematica中並行評估單元格

我曾經在兩個不同的筆記本中的兩個主內核中運行我的代碼。爲了進一步加快速度,我試圖用ParallelEvaluate[]封裝幾個單元,它似乎工作。然後我還有4個副本,通過其中一個主內核運行,彼此不知道,這很好。 (我基本上試圖儘可能多地並行運行我的代碼/ mathkernel的副本,但我沒有拍攝任何真正平行的東西)。

由於我的代碼太長和複雜,我不想再次編輯每個單元格以使它們並行評估。在我的筆記本的開頭有什麼神奇的東西可以放入,所以每個單元格之後的評估將默認爲ParallelEvaluate[ ... cell contents.... ]

+1

您真的確定要'ParallelEvaluate []'你所有的細胞?你已經在你的代碼上做過實驗了嗎?提示:你可能會得到列表,你現在得到一個單一的結果... –

+0

是的,我得到表的列表,這是確定的。我將在主內核中手動合併這些表並分析結果。我只是想找出最簡單的方法來使用所有的mathkernel來加速計算。 – Hsn

+0

我試圖用$ Pre = ParallelEvaluate進行實驗,但是現在我不能使用Mma(HW問題),或許您想試試它 –

回答

2

正如belisarius所建議的,$ Pre = ParallelEvaluate完全符合我的要求。一個問題是當我做$ Pre = Identity來關閉它以便我可以回到我的主內核時,mathematica仍然試圖在從內核而不是主內核中進行評估並且失敗。我最終解決它如下:SetSharedVariable [parallelcontrol]; parallelcontrol = ParallelEvaluate; $ Pre:= parallelcontrol; ......一切都是在這裏的奴隸中被評估的......; parallelcontrol =身份; ....一切回到上主進行評估只......這裏是一個有2個內核上我的筆記本電腦運行示例:

LaunchKernels[] 

{KernelObject [1,「本地」],KernelObject [2, 「本地」]}

$KernelID 
ParallelEvaluate[$KernelID] 

{1,2}

SetSharedVariable[parcontrol]; $Pre := parcontrol; parcontrol = ParallelEvaluate 

空[ParallelEvaluate]

$KernelID 

{1,2}

parcontrol = Identity 

{身份,身份}

$KernelID 
parcontrol = ParallelEvaluate 

ParallelEvaluate

$KernelID 

{1,2}