Interesuje mnie równoważenie obciążenia dla wielordzeniowych systemów CPU. Jeśli używasz 1 procesora z wieloma rdzeniami, bardziej efektywne energetycznie jest zrównoważenie obciążenia na kilku rdzeniach lub próba wypełnienia pojedynczych rdzeni i pozostawienia innych bezczynności.
Podstawowym założeniem jest to, że ilość pracy wykonanej w obu przypadkach jest dokładnie taka sama, w tym samym czasie. Czy bardziej efektywne jest użycie 4 rdzeni w tym samym procesorze z 25% obciążeniem na każdy lub 1 rdzeń ze 100% obciążeniem.
Zakładam, że 1 rdzeń ze 100% obciążeniem powinien być bardziej wydajny, ale ponieważ mogę się mylić, szukałem poważnych odpowiedzi na temat tego problemu (bez zgadywania).
cpu-usage
power-consumption
private_meta
źródło
źródło
Odpowiedzi:
IMO to pytanie jest po prostu niemożliwe do odpowiedzi w ogólnym przypadku.
Na moim biurku mam jeden z tych nowiutkich procesorów Core i7-980x z sześciordzeniowymi procesorami TurboBoost. Jeśli załadujesz pojedynczy rdzeń na tym komputerze, zwiększy on częstotliwość taktowania tego rdzenia, zwiększając w ten sposób zużycie energii przez procesor, co spowoduje ogromną różnicę. Ten procesor, a także inne, bardziej nowoczesne procesory, mogą częściowo wyłączyć nieaktywne rdzenie, zwiększając oszczędności energii. To nie jest tak prawdziwe w starszych modelach procesorów.
Pamiętaj, że praca, którą musisz wykonać przy użyciu jednego rdzenia, będzie koniecznie inna niż praca, którą wykonujesz przy użyciu wielu rdzeni. Jeśli tak jest, że możesz rozłożyć obciążenie na wiele rdzeni, przekonasz się, że dużo więcej czasu poświęcisz na pojedynczy rdzeń wykonując drogie przełączniki kontekstu, a twoja wydajność spadnie.
W każdym razie problem ma zbyt wiele zmiennych, aby naprawdę odpowiedzieć. Można by mówić o różnych rodzajach ładunków, a każdy, kto spróbuje przeprowadzić test porównawczy, aby uzyskać odpowiedź, skończy (prawdopodobnie przypadkowo) na porównaniach jabłek z pomarańczami, które nie mają zastosowania w innych przypadkach użycia.
Aha i jeszcze jedno. Większość ludzi prawdopodobnie poda wydajność w kategoriach mocy . Nie chcesz wpaść w tę pułapkę. Ponieważ czas przetwarzania obciążeń będzie koniecznie różny w zależności od sposobu zrównoważenia obciążeń, należy zintegrować wynik w czasie, aby znaleźć ilość energii netto zużytej do wykonania zadań, aby uzyskać wiarygodny wynik.
źródło
Zrobiłem dzisiaj kilka testów na tym komputerze (Intel C2D T8100) i przy użyciu zoptymalizowanych aplikacji SETI @ Home z instalatora lunatics 0.36. Użyłem M $ Joulmeter do obliczenia zużycia energii. Zmierzyłem czasy zużycia drzewa. Po pierwsze, pozwalam BOINC pobierać 100% rdzeni i 100% czasu procesora i pozwalam mu działać przez godzinę. Procesor zużywał 20 W, a wykresy czasu procesora od menedżera zadań były płaskie na poziomie 100%. Średni pobór mocy mojego komputera wynosił 45,05 W i rośnie, a w tej chwili przestałem testować pobór mocy 46,18 W.
W drugim teście ustawiłem BOINC, aby pobierał 50% dostępnych rdzeni i 100% czasu procesora i pozwalał mu działać przez godzinę. Pobór mocy procesora wahał się między 12 W a 13 W. Średnie zużycie wyniosło 42,72 W i rośnie. W chwili, gdy zakończyłem test, zużycie wyniosło 44 W. Aby wykres czasu procesora dla docelowego rdzenia był płaski, ustawiłem powinowactwo programu na jeden rdzeń, a priorytet na wysoki. Wykres dla drugiego rdzenia pokazał nieco wyższe niż normalne wykorzystanie czasu procesora.
W trzecim teście ustawiłem BOINC na użycie 100% dostępnych rdzeni i 50% czasu procesora. Pobór mocy zmieniał się przy dużych skokach od 5 W do 17 W. Średnie zużycie energii po godzinie testowania wyniosło 39,96 W i spada. Wykresy czasu procesora wyglądały jak złudzenia
/\/\/\/\/\/\/\/\/\/\/\/\/\
. Szczytów oczekiwano ze względu na rozmiar jednostek czasu używanych przez BOINC.Uważam więc, że bardziej wydajne jest użycie dwóch rdzeni działających przy połowie obciążenia niż jednego rdzenia przy pełnym obciążeniu.
I tak, wiem, że do prawidłowego badania potrzebnych jest znacznie więcej próbek, ale w tym momencie nie mam wystarczającej ilości komputerów lub czasu na wykonanie odpowiednich statystyk.
źródło
Odpowiedź na twoje pytanie jest dwojaka: jeśli korzystasz z wysoce równoległego kodu wektorowego, to równoważenie obciążenia na wielu rdzeniach jest zawsze bardziej wydajne. Rdzenie będą pracowały przy niższych obciążeniach, uwalniając mniej ciepła niż pojedynczy rdzeń, który zostanie przesunięty do granic możliwości. Z drugiej strony, jeśli kodu nie można zrównoleglać, to uruchomienie go na wielu rdzeniach jest mniej wydajne z powodu liczby braków pamięci podręcznej, które wystąpią z powodu zależności w całym kodzie. Może to nadal generować mniej ciepła, ale na pewno wykonanie zadania potrwa dłużej niż w przypadku pojedynczego rdzenia.
źródło
Twoje pytanie zawiera zbyt wiele niewiadomych. Czy pytasz o efektywność czasową lub efektywność energetyczną? Kod nierównoległy czy kod równoległy? Pojedyncza praca czy przeciętny wielozadaniowość komputera? Jeśli masz rachunki za energię przekraczającą 1000 USD miesięcznie na komputery, MOGĄ być warte zmartwienia lub dwa. W przeciwnym razie nie możesz zaoszczędzić wystarczająco dużo, aby problem był wart rozwiązania. Przyjemnie jest rozmawiać - ale jeśli masz poważny problem, najlepszą odpowiedzią jest: spróbuj różnych rzeczy i zobacz, co działa.
źródło