Wielordzeniowe zapotrzebowanie na energię procesora i równoważenie obciążenia

10

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).

private_meta
źródło
+1 Naprawdę ciekawe pytanie! Oto kilka linków tomshardware.com/reviews/truth-pc-power-consumption,1707.html tomshardware.com/reviews/intel-cpu-power-consumption,1750.html, ale tak naprawdę nie dotyczą twojego pytania. Mam C2D T8100 i któregoś dnia przeprowadzę kilka testów, aby sprawdzić, który rodzaj obciążenia wytwarza więcej ciepła.
AndrejaKo,
4 rdzenie przy 25% zdecydowanie lepiej rozprowadzą ciepło niż 1 rdzeń przy 100%.
Brian Knoblauch,
Jeśli ilość pracy jest stała we wszystkich przypadkach użycia, nagromadzenie całego obciążenia na tym samym rdzeniu spowoduje obniżenie wydajności - efektywnie zabierając więcej czasu i pochłaniając. Możesz stracić chwilowe oszczędności energii, gdy ta sama praca wymaga więcej czasu. (+1, prowokujące pytanie)
Nik
@Brian zgodził się, że użycie większej liczby rdzeni rozprasza ciepło, ale czy generuje ono w sumie taką samą ilość ciepła?
Kevin Panko
AMD ogłosiło procesory, które będą w stanie wyłączyć nieużywane rdzenie, pozwalając na działanie aktywnych rdzeni z wyższą częstotliwością zegara
b0fh

Odpowiedzi:

6

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.

David Markle
źródło
LOL Jak mogłeś powiedzieć? Hokie Engineering, kochanie!
David Markle,
Trzeba kogoś poznać. Idź
Mizzou
Zaczekaj. Myliłem się. Jest jeden człowiek, który mógłby przeprowadzić testy porównawcze i dać nam odpowiedź w ogólnej sprawie: gizmodo.com/5598885/…
David Markle,
4

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.

AndrejaKo
źródło
1
Teraz fajnie byłoby znaleźć odpowiednik Joulemetera dla innych systemów operacyjnych, a potem mogłem przetestować sprzęt, który dostałem ...
private_meta
Oto coś dla laptopów GNU / Linux thinkwiki.org/wiki/How_to_measure_power_consumption
AndrejaKo
Oto kolejny interesujący link: www.lesswatts.org/ i jeszcze jeden susegeek.com/general/… i jeszcze jeden publib.boulder.ibm.com/infocenter/lnxinfo/v3r0m0/… Najwyraźniej ludzie nie wierzą w odczyty ACPI i są przekonani że zewnętrzne liczniki są konieczne, więc niewiele linków omawia sposób korzystania z zewnętrznych liczników. Nie mam wystarczającej liczby 1337 innych systemów operacyjnych, aby móc udzielić jakiejkolwiek pomocy.
AndrejaKo,
Dzięki. Problem z zewnętrznymi licznikami polega na tym, że mierzą one cały pobór mocy, a nie tylko moc obliczeniową. Ważny byłby również cały pobór mocy (np. Algorytmy intensywnie wykorzystują dyski twarde). Jeśli odczyty ACPI nie wydają się wiarygodne, musisz również użyć odczytów zewnętrznych dla komputerów z systemem Windows, aby móc je porównać: - /
private_meta
Ale nadal odczyty ACPI są lepsze niż brak odczytów, prawda? Ponadto, korzystając z testów, które najbardziej wpływają na procesor, możemy ustalić podstawowe zużycie energii i zobaczyć, jak bardzo wzrośnie ono wraz z obciążeniem. W ten sposób możemy wiedzieć, że większość zmian zużycia wynikała z obciążenia procesora. Mógłbym później zrobić więcej testów z woltomierzem i amperomierzem. Byłoby naprawdę interesujące zobaczyć, jak porównywane są pomiary ACPI i pomiary rzeczywistych instrumentów. Szkoda, że ​​takiego porównania nie można uogólnić.
AndrejaKo,
0

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.

emish
źródło
1
Ale jeśli masz kod niepoliczalny, jak zamierzasz uruchomić więcej niż jeden rdzeń?
AndrejaKo,
Twoim zdaniem 4 rdzenie połączone z 25% razem generują mniej ciepła (i powodują więcej strat energii) niż 1 rdzeń przesunięty do 100%.
private_meta
@AndrejaKo Jeśli istnieje wiele procesów lub wątków, łatwo jest je rozłożyć na rdzenie.
emish
0

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.

hotei
źródło