假設一臺具有8個內核的機器。 在Haskell中,可以使用threaded
選項編譯,然後在運行時使用+RTS -Nx
指定要使用的核心數。例如如何進行F#測量以獲得加速
$ myprg args // sequential run
$ myprg args +RTS -N1 // parallel run on 1..8 cores
$ myprg args +RTS -N2
$ myprg args +RTS -N4
$ myprg args +RTS -N8
由此,您可以使用越來越多的內核獲得運行時,然後您可以使用它來獲得加速並繪製圖形。
你如何在F#中做到這一點,假設我有一個並行程序如在代碼中使用平行映射?
編輯: 我發現有ParallelOptions例如, MaxDegreeOfParallelism
這可以是我需要什麼,但不知道其確切的行爲,我將不得不以編程方式使用它這是很好的,只要它的行爲與預期即MaxDegreeOfParallelism
=核計劃的NUM應該使用,而不是平行的「任務'或線程。
編輯: ProcessorAffinity
確實限制了內核使用的數量,但它似乎沒有正確單執行。我檢查了Windows,它似乎工作。雖然使用它並不是一個好主意。運行時系統應該能夠更好地決定如何管理和調度任務。此外,MaxDegreeOfParallelism
是關於「並行度級別」,它基本上設置了生成的任務數量,因此可用於改變粒度。
如果你使用的是Windows,你可以設置在任務管理器的CPU數量:http://www.addictivetips.com/windows-tips/how-to-set-processor-affinity-to-an -application-in-windows/ – 2012-03-13 04:18:32
我正在使用Linux/mono。有沒有辦法在Linux下做同樣的事情? – vis 2012-03-13 04:21:23
F#構建一個本地.NET程序集。程序集遵循爲運行時指定的規則(CLR),默認情況下,該規則對所有CPU核心具有親和力。 通過設置System.Diagnostics.Process.GetCurrentProcess()。ProcessorAffinity',可以將CLR限制在_fewer_核心數量內。 – bytebuster 2012-03-13 04:28:50