Jestem tylko ciekawy, dlaczego planista ciągle przenosi aplikację między procesorami, zamiast utrzymywać ją na jednym. Trochę głupio wygląda na 4 rdzenie na 25% zamiast jednego na 100%.
Czy ma to związek z ciepłem, czy też jest bardziej wydajne? Czy inne systemy operacyjne robią to inaczej?
Przydałoby się spostrzeżenie lub linki do szczegółowych informacji. (Nie mogłem wiele znaleźć.)
Aktualizacja:
Przez „rozkładanie” nie mam na myśli, że działa na kilku procesorach naraz, ale jest przenoszony z jednej na drugą kilka razy na sekundę, co powoduje, że wygląda na rozłożony.
windows
performance
cpu
Macke
źródło
źródło
Odpowiedzi:
Myślę, że
wierob
dość dobrze opisał tę kwestię.Oto starszy artykuł omawiający
processor affinity
ustawienia z czterordzeniowym QX6800 .(link wskazuje na drugą stronę tego artykułu).
Jeśli nie narzucasz powinowactwa procesu do rdzenia, tracisz wydajność ?
ma 8 MB
L3
pamięci podręcznej współdzielonej przez 4 rdzenie .Należy zauważyć, że chociaż być może zdecydowałeś się uruchomić tylko jeden proces jednowątkowy w systemie, sam system operacyjny miałby uruchomionych kilka innych zadań, które również należy zaplanować. Program planujący równoważy całą tę aktywność w dostępnej puli procesorów (lub rdzeniach).
Idąc dalej, dzięki architekturze Nehalem i NUMA ,
procesory w wielu gniazdach będą również w stanie lepiej rozwiązać problem z dostępem do przepustowości.
Oto krótkie zdjęcie ze strony ArsTechnica na NUMA .
Jeśli Nehalem
i7
cię interesuje, mam więcej linków do tej odpowiedzi .źródło
Program planujący po prostu wykonuje następny wątek, który jest gotowy do wykonania na „wolnym” rdzeniu / procesorze.
Możesz przypisać proces do konkretnego procesora za pomocą menedżera zadań Windows.
Posiadanie 4 rdzeni przy 25% oznacza, że 4 wątki są wykonywane jednocześnie. Natomiast jeden rdzeń przy x% oznacza, że wykonywany jest tylko jeden wątek. Ten pierwszy jest więc w niektórych przypadkach bardziej wydajny.
Ale podczas jego wykonywania pamięć podręczna procesora jest zapełniana danymi dostępnymi przez wątek. Jeśli wątek zostanie wykonany na innym procesorze, wystąpi więcej braków w pamięci podręcznej, które są kosztowne, ponieważ dane nie znajdują się w pamięci podręcznej tego procesora.
Co robi twój wątek? Jeśli wątek „śpi” przez bardzo krótki czas, rdzeń, na którym był wykonywany, może zostać zajęty przez inne zagrożenie, a tym samym twój wątek zostanie wykonany na następnym dostępnym rdzeniu. Co się stanie, jeśli określisz tylko jeden rdzeń, który ma być używany przez proces (np. Menedżer zadań)?
źródło
To nie jest. Jeden wątek może działać tylko na jednym procesorze. Jednak niektóre procesy mają wiele wątków, które można rozłożyć.
Rozumowanie, wierz lub nie, nigdy nie zastanawiało się, jak to wygląda. System próbuje rozdzielić wątki, ponieważ nie ma sposobu, aby wiedzieć, kiedy nastąpi skok.
źródło
System operacyjny migruje wątek między rdzeniami procesora (szybko, kilka razy na sekundę). Bardziej wydajne jest ciągłe uruchamianie tego samego rdzenia. Można to wymusić za pomocą pozycji menu kontekstowego „Ustaw koligację” w Menedżerze zadań.
Zauważ, że zwykle (typowe zastosowanie domowe) różnica mieści się w przedziale kilku procent.
„4 rdzenie każdy przy zużyciu 25%” oznaczają, jak Menedżer zadań pokazuje średnie użycie, że każdy rdzeń został w pełni wykorzystany przez jedną czwartą czasu i przez resztę czasu był wolny.
Opis dotyczy systemu Windows, ale jest podobny również w innych systemach operacyjnych.
źródło
Jeśli ktoś nadal to czyta, to też to zauważyłem i wykonałem sporo testów, aby sprawdzić, czy to nie tylko przypadek. Okazuje się, że nie! Uważam, że rozłożenie jednego wątku na wszystkie rdzenie jest bardziej wydajne z kilku powodów:
Ponadto, z powodu powyższych dwóch obserwacji, doszedłem do wniosku, że Turbo Boost i IDA są nieskuteczne. Mogą być przydatne na starszych systemach operacyjnych, ale Linux i Windows 7 dość skutecznie rozkładają wszystko na wszystkie rdzenie. Tak więc Core 2 Quad q9100 @ 2,26 GHz będzie prawie (zawsze są wyjątki :-) zawsze będzie szybszy niż Core 2 Duo X9100 @ 3.06GHz, i rzadko widziałem, że używa IDA (w zasadzie poprzednika Turbo Boost, zwiększa częstotliwość na jednym lub dwóch rdzeniach tylko dla aplikacji jednowątkowych).
źródło