2011-06-17 38 views
11

如果我在Linux或Mac上運行R,我可以使用multicore:::detectCores()來檢測可用內核的數量。但是,沒有windows版本的多核功能,所以我不能在Windows上使用這種技術。檢測窗口上的內核數量

如何以編程方式檢測R計算機上的核心數?

回答

20

並行程序包現在具有檢測核心數量的功能:parallel:::detectCores()

+1

似乎是最好的方法。 'detectCores()'是平臺無關的並且返回一個數字,而'Sys.getenv(「NUMBER_OF_PROCESSORS」)'返回一個字符串。 – Megatron

+0

是的,但很容易轉換爲整數。我不需要安裝新的軟件包。 – bshor

12

thread有一些建議,其中包括:

Sys.getenv('NUMBER_OF_PROCESSORS') 

還要注意通過裏普利教授進行對話的這樣的困難在該線程張貼。

0

GetSystemInfo會給你一個「處理器」數量的結構,它對應於核心的總數。

從理論上講,它與在另一個答案中推薦的環境變量的值相同,但用戶可以篡改(或刪除)環境變量。這可能是一個錯誤或功能取決於你的意圖。

+0

GetSystemInfo將只返回處理器的邏輯數量,不返回內核。所以如果你在你的CPU上有超線程,你可能會得到實際內核數量的兩倍。 – selbie

+0

@selbie:如果你有兩個四核處理器,你會得到8個,而不是2個,這就是爲什麼我聲稱它是核心數。我以前從未見過GetLocicalProcessInformation。這顯然是更好的方式。請注意,我從來沒有見過NUMBER_OF_PROCESSORS環境變量缺省值與GetSystemInfo缺省值不同的情況。但是,我看到有人用NUMBER_OF_PROCESSORS搞砸了,導致應用程序調整得很差。所以我強烈建議不要使用環境變量。 –

3

如果你真的需要實際的核心,芯片和邏輯處理器之間進行區分,調用API是GetLogicalProcessInformation

GetSystemInfo如果只是想知道有多少個邏輯處理器的機器上(沒有區別超線程。 )。

如何從「R」中調用此函數超出了我的意思。但我猜R有一個從本地Windows DLL調用代碼的工具。