Chciałbym eksperymentować z wątkami na procesorze wielordzeniowym, np. Aby stworzyć program, który wykorzystuje dwa różne wątki, które są wykonywane przez dwa różne rdzenie procesora.
Jednak nie jest dla mnie jasne, na jakim poziomie wątki są przydzielane do różnych rdzeni. Mogę sobie wyobrazić następujące scenariusze (w zależności od systemu operacyjnego i implementacji języka programowania):
- Przydziałem wątków zarządza system operacyjny. Wątki są tworzone przy użyciu wywołań systemowych systemu operacyjnego, a jeśli proces zostanie uruchomiony na procesorze wielordzeniowym, system operacyjny automatycznie spróbuje przydzielić / zaplanować różne wątki na różnych rdzeniach.
- Przydziałem wątków zarządza implementacja języka programowania. Przydzielanie wątków do różnych rdzeni wymaga specjalnych wywołań systemowych, ale biblioteki wątków standardowych języków programowania automatycznie obsługują to, gdy używam standardowej implementacji wątków dla tego języka.
- Przydział wątków musi być wyraźnie zaprogramowany. W moim programie muszę napisać wyraźny kod, aby wykryć, ile rdzeni jest dostępnych, i przydzielić różne wątki do różnych rdzeni za pomocą np. Funkcji bibliotecznych.
Aby sprecyzować pytanie, wyobraź sobie, że napisałem moją wielowątkową aplikację w Javie lub C ++ na Windows lub Linux. Czy moja aplikacja w magiczny sposób zobaczy i użyje wielu rdzeni po uruchomieniu na procesorze wielordzeniowym (ponieważ wszystko jest zarządzane albo przez system operacyjny, albo przez standardową bibliotekę wątków), czy też muszę zmodyfikować kod, aby był świadomy wielu rdzeni ?
źródło
Kiedyś miałem ogromne środowisko SGI IRIX. Na wszelki wypadek napisałem mały wielowątkowy program Java (który po prostu zużywał tylko cykle procesora) i utworzyłem w nim 12 wątków. Zadanie obejmowało 12 procesorów w architekturze NUMA. Być może sprawdzę program i uruchomię go na Dell R910s i sprawdzę ...
źródło