Wielowątkowe zadanie intensywnie wykorzystujące procesor dławi procesor znacznie przed ograniczeniem temperatur


21

Napisałem bardzo wątkowe zadanie wielowątkowe, które działa zgodnie z oczekiwaniami na moim czterordzeniowym MacBooku Pro 2012. Obracam go luźno za pomocą 20 nici, a temperatury dochodzą do około 100 ° C, mierzone za pomocą gadżetu Intel Power Gadget przy minimalnym dławieniu.

Zabierz ten sam program i pliki do domu na mojego 13-calowego MacBooka Pro 2016 z dwurdzeniową maszyną i uruchom go. Spodziewam się, że będzie on również utrzymywał 3,3-3,4 GHz, dopóki temperatura nie osiągnie poziomu 100 ° C. Górne polecenie pokazuje zadanie na poziomie 350% (2 rdzenie każdy z podwójnym wątkiem), ale częstotliwość procesora zostaje obcięta do 1,6-1-8 GHz przy temperaturze wynoszącej tylko około 60 ° C, a wentylatory są zupełnie ciche. Jeśli zacznę 4 osobne jedno-wątkowe zadania procesora, maszyna zachowuje się zgodnie z oczekiwaniami, utrzymując 3,3-3,4 GHz, aż osiągnie 100 ° C i wentylatory się rozkręcą. Pytanie brzmi: dlaczego mój procesor jest dławiony?

Oba komputery są aktualne i obsługują te same wersje gcc. Jeśli nawet wezmę plik binarny z działającej maszyny i umieści go na komputerze Mac 2016, będzie miał ten sam problem.

Jeśli uruchomię 3 lub 4 pojedyncze wątki procesora, aby maszyna pracowała na pełnych obrotach, to uruchom program wątkowy, a także spowolni częstotliwość.

Oba komputery mają 16 GB pamięci RAM.

Edytować

Po zabawie z kodem podejrzewam, że dławi się, gdy zadanie tworzy zbyt wiele wątków. W tym programie biorę każdy czytany rekord i tworzę dla niego wątek. Zezwalam tylko na opuszczenie około 20 wątków naraz, więc w żadnym momencie nie ma więcej niż 21 wątków, ale istnieje 14 400 000 rekordów do przetworzenia, więc w ciągu około 30 minut każdy z tych rekordów zostanie przetworzony przez osobny wątek.

Stworzyłem trywialny program pthread, który zassał czas procesora i uruchomiłem 10 z nich. Problem z laptopem działał i rozgrzał się do 95 ° C bez problemów.

Myślę, że przepiszę kod, aby ponownie użyć tego samego wątku zamiast go zniszczyć i uruchomić ponownie.

Zaktualizuj 5/13/17

Po kilku godzinach pracy tworzy teraz tylko n wątków i ponownie je wykorzystuje, co nie pomogło. Poza temperaturą procesora, co spowoduje, że urządzenie zacznie dławić się?


1
Uwielbiam to pytanie! Co powiesz na uruchomienie innego konkretnego zadania wielowątkowego? Sugerowałbym uruchomienie czegoś takiego jak zadanie ffmpeg (na wideo 1080p lub 4K, aby upewnić się, że wykorzystuje on wszystkie dostępne zasoby procesora) i sprawdzić, czy dławi się. Może to zawęzić problem do: twojego programu na tym komputerze lub wszystkich programów wielowątkowych na tym komputerze
NoahL

1
Jeśli uruchomię test porównawczy Cinebench R15, użyje on wątków i będzie działał zgodnie z oczekiwaniami, temperatura wzrośnie do około 100 ° C i pojawią się wentylatory. Gadżet Intel Power pokazuje, że częstotliwość procesora wciąż jest bliska 3,3 Ghz. Więc to nie wygląda na problem sprzętowy. Cały kod jest tylko kodem C i nic, co wymyślisz, używając p_threads i minimalnych blokad Mutex. Program ten polega głównie na przetwarzaniu sekwencji DNA, w którym jeden wątek pobiera około 16 gigabajtów danych i przekazuje go do n pojedynczych wątków w celu przełamania dużej liczby.
markatlnk

1
Wygląda na to, że inne programy mogą trafić w sufit, którego szukasz? Jeśli problem dotyczy wyłącznie Twojego kodu specjalnego, możemy potrzebować więcej informacji na temat tego kodu. Gdzie są przetwarzane Twoje dane? Zewnętrzny? Ile pracy zgłasza kernel_task? Inne czujniki temperatury?
LаngLаngС

1
Twój procesor ma 8 rdzeni logicznych, a nie 4, więc 4 wątki pokazują 50% całkowitego wykorzystania procesora. Zastanawiam się, czy to wpływa na oszacowanie obciążenia twojego systemu.
sudo

Nie wiem, czy chcesz rozwiązać problem, ale zamiast tego możesz spróbować debugować na poziomie jądra za pomocą jądra debugowania. Możesz go zdobyć, jeśli klikniesz więcej w pobranych plikach na stronie Apple Dev.
user3052786,

Odpowiedzi:


1

Może to być długi cel, ale być może różnica w wydajności pojedynczego rdzenia i / lub wydajności pamięci podręcznej między pakietami procesorów z 2012 i 2016 r. Jest wystarczająco duża, aby rdzenie pozbawione były danych i dławiły się, dopóki nie będą w stanie ponownie pracować?

Zgaduję, ponieważ wskazujesz, że wystarczająca liczba procesów jednowątkowych może działać z pełną prędkością na wszystkich rdzeniach, a prosty program wielowątkowy może działać z pełną prędkością na wszystkich rdzeniach.

To sprawia, że ​​myślę, że jest coś w projekcie programu twojego rzeczywistego obciążenia pracą w porównaniu z testowym obciążeniem wielowątkowym, które nie pozwala procesorom cały czas pracować


0

Rozszerzenie jądra /System/Library/Extensions/AppleACPIPlatform.kext kontroluje wiele zabezpieczeń temperatury i procesora. Oczywiście jest już skompilowany w twoim systemie, ale może być dostępny na https://opensource.apple.com (nie mogę go znaleźć, ale rzuciłem mu tylko okiem). Nie zaskoczyłoby mnie, gdyby Apple miał bardzo konserwatywne ustawienia zdolności procesora.


3
AFAIK: Apple kexts nie są open source. (Dziwnie?) Najlepszym źródłem informacji na ten temat jest społeczność Hackintoshing ze względu na potrzebę wstrzykiwania sterowników.
JMY1000,

Wcale nie dziwne! Druciarze udzielają najlepszych rad, ponieważ wiedzą znacznie więcej, niż powinni z pierwszej ręki. Jeśli chodzi o konserwatywne ustawienia procesora, pamiętaj, że MBP ma świetny radiator dla wydajności serii, ale nie tak świetny dla długich cykli. Jest całkiem prawdopodobne, że ten problem leży po stronie Apple, która chce zapobiegać gotowaniu nóg. Słyszałem o kilku procesach dotyczących tego z 2012 MBP.
user1901982

0

Ilekroć system operacyjny rozpozna wątki jako nieprzewidywalne i wymknie się spod kontroli, dławi się, aby zachować stabilność sprzętu i systemu, model 2012 zachowuje się inaczej i może zostać zablokowany w najgorszym przypadku. Stało się to ze źle zaimplementowaną kontrolą wątków, moja wina. Po prostu nie uruchamiaj tylu wątków na podwójnym rdzeniu.


-2

Stało się to ze źle zaimplementowaną kontrolą wątków, moja wina. Po prostu nie uruchamiaj zbyt wielu wątków na dwurdzeniowym procesorze.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.