2011-06-17 15 views
11

Jeśli korzystam z R na Linuksie lub na Macu, mogę wykryć liczbę dostępnych rdzeni za pomocą multicore:::detectCores(). Jednak nie ma wersji Windows funkcji wielordzeniowych, więc nie mogę używać tej techniki w oknach.Wykryj liczbę rdzeni w oknach

Jak programowo wykryć liczbę rdzeni na komputerze z systemem Windows, z poziomu R?

Odpowiedz

20

Pakiet równoległy ma teraz funkcję wykrywania liczby rdzeni: parallel:::detectCores().

+1

Wydaje się być najlepszym sposobem. 'detectCores()' jest niezależny od platformy i zwraca liczbę, podczas gdy 'Sys.getenv (" NUMBER_OF_PROCESSORS ")' zwraca ciąg znaków. – Megatron

+0

Tak, ale łatwo jest przekonwertować na liczbę całkowitą. I nie muszę instalować nowego pakietu. – bshor

12

Ten thread posiada szereg sugestii, w tym:

Sys.getenv('NUMBER_OF_PROCESSORS') 

Uwaga również delegowania w tym wątku prof Ripley który mówi do trudności w ten sposób.

0

GetSystemInfo da ci strukturę, która ma liczbę "procesorów", która odpowiada całkowitej liczbie rdzeni.

Teoretycznie będzie to ta sama wartość, co zmienna środowiskowa zalecana w innej odpowiedzi, ale użytkownik może modyfikować (lub usuwać) zmienną środowiskową. Może to być błąd lub funkcja w zależności od twojego zamiaru.

+0

GetSystemInfo zwróci tylko logiczną liczbę procesorów, a nie rdzeni. Jeśli masz hyperthreading na procesorze, prawdopodobnie otrzymasz 2x liczbę rzeczywistych rdzeni. – selbie

+0

@selbie: Jeśli masz dwa czterordzeniowe procesory, otrzymujesz 8, a nie 2, dlatego twierdziłem, że jest to liczba rdzeni. Nigdy wcześniej nie widziałem GetLocicalProcessInformation. To zdecydowanie lepsza droga. Uwaga: Nigdy nie widziałem przypadku, w którym zmienna środowiskowa NUMBER_OF_PROCESSORS domyślnie przyjmuje wartość inną niż domyślna wartość GetSystemInfo. Jednak widziałem ludzi grzebiących z NUMBER_OF_PROCESSORS, co skutkowało źle dostrojonymi aplikacjami. Dlatego zdecydowanie nie zaleca się używania zmiennej środowiskowej. –

3

Jeśli faktycznie trzeba odróżnić rzeczywistych rdzeni, chipsy i procesorów logicznych, API zadzwonić jest GetLogicalProcessInformation

GetSystemInfo jeśli po prostu chcesz wiedzieć, ile logicznych procesorów na maszynie (bez zróżnicowania na HyperThreading.).

To, jak nazywasz to z "R", jest poza mną. Ale zgaduję, że R ma możliwość wywoływania kodu z macierzystych bibliotek DLL systemu Windows.