Багатопотокове процесорове інтенсивне завдання вимикає процесор до граничних температур


21

Я написав дуже інтенсивне CPU-завдання, яке працює, як очікувалося, на моєму чотирьохядерному MacBook Pro 2012 року. Я вимикаю його з 20 ниток, а температура піднімається приблизно до 100 ° C, як це вимірюється за допомогою Intel Power Gadget з мінімальним дроселюванням.

Візьміть ту саму програму та файли даних додому до мого MacBook Pro 2016 року 13 "з двоядерною машиною та запускайте її, я би сподівався, що вона також буде тримати 3,3-3,4 ГГц, поки температура не наблизиться до позначки 100 ° C. Команда Top показує завдання на 350% (по 2 ядра в кожній подвійній різьбі), але частота процесора стає скороченою до 1,6-1-8 ГГц з температурою лише 60 ° С або близько того, коли вентилятори вмирають тихо. Якщо я запускаю 4 окремо Завдання з одним різьбовим процесором, машина поводиться так, як очікувалося, підтримуючи 3,3-3,4 ГГц, поки не вдасться до 100 ° C і вентилятори не спрацьовують. Питання полягає в тому, чому мій процесор заглушений?

Обидві машини оновлюються та мають однакові версії gcc. Якщо я навіть дістаю двійковий файл з робочої машини і ставлю його на Mac 2016 року, у нього така ж проблема.

Якщо я запускаю 3 або 4 одиночних процесора CPU, щоб машина працювала на повній швидкості, тоді запускайте програму з потоком, вона також сповільнює частоту.

Обидві машини мають 16 ГБ оперативної пам’яті.

Редагувати

Погравши з кодом, я підозрюю, що він стихає, коли завдання створює занадто багато ниток. У цій програмі я беру кожен прочитаний запис і створюю для нього потік. Я дозволяю запускати лише 20 або більше потоків за один раз, так що ніколи немає більше 21 потоку, але є 14 400 000 записів, які підлягають обробці протягом 30 хвилин або приблизно кожен з цих записів буде оброблятися окремим потоком.

Я створив тривіальну програму pthread, яка висмоктувала час процесора і встановлювала 10 з них запуск. Проблемний ноутбук запустив це і нагрівся до 95С без проблем.

Я думаю, що я перепишу свій код, щоб повторно використовувати ту саму нитку, а не знищувати їх і запускати їх знову.

Оновлення 13.05.17

Після декількох годин роботи він лише створює n ниток і просто повторно використовує їх, що не допомогло. За винятком температури процесора, що призведе до того, що ця машина згортається?


1
Я люблю це питання! Як щодо виконання конкретного багатопотокового завдання? Я б запропонував виконати щось на кшталт завдання ffmpeg (на відео 1080p або 4K, щоб переконатися, що воно використовує всі доступні ресурси процесора) і побачити, чи не знижується. Це може звузити проблему до будь-якого: вашої програми на цій машині або всіх багатопотокових програм на цій машині
NoahL

1
Якщо я запускаю орієнтир Cinebench R15, він використовує різьбові завдання і працює, як очікувалося, температура досягає приблизно 100 ° C і вентилятори з'являються. Intel Power Gadget показує, що частота процесора все ще близько 3,3 ГГц. Тож це не виглядає як апаратне питання. Весь код - це лише C-код, що не має фантазії за допомогою p_threads та мінімальних замків Mutex. Програма - це в основному обробка послідовності ДНК за допомогою однієї нитки, яка втягує щось на зразок 16 гіг даних і передає їх до n окремих потоків для суттєвого стискання числа.
markatlnk

1
Схоже, інші програми можуть вдарити до стелі, на яку ви прагнете? Якщо проблема полягає лише в вашому спеціальному коді, нам може знадобитися додаткова інформація про цей код. Хоча, де ваші дані підлягають обробці? Зовнішні? Скільки роботи повідомляє kernel_task? Інші датчики температури?
LаngLangС

1
Ваш процесор має 8 логічних ядер, а не 4, тому 4 потоки відображатимуться як 50% загального використання процесора. Цікаво, чи впливає це на оцінку навантаження вашої системи.
судо

Я не знаю, чи хотіли б ви вирішити проблему, але ви можете спробувати налагодження на рівні ядра замість ядра налагодження. Ви можете отримати його, якщо натиснути більше на завантаження на сайті яблучних розробників.
користувач3052786

Відповіді:


1

Це може бути довгим оглядом, але, можливо, різниця в одноядерній продуктивності та / або кеш-продуктивності між пакетами процесорів 2012 та 2016 років є достатньо великою, що ядра зголодніли даними та зменшуються до тих пір, поки вони не зможуть знову працювати?

Я гадаю це, тому що ви вказуєте достатньо однопотокових процесів, які можуть працювати на повній швидкості на всіх ядрах, а проста багатопотокова програма може запускати повну швидкість на всіх ядрах.

Це змушує мене думати, що в дизайні програми вашого реального навантаження є щось проти тестового багатопотокового навантаження, що не дає процесорам працювати весь час


0

Розширення ядра /System/Library/Extensions/AppleACPIPlatform.kext контролює багато гарантій температури та процесора. Він, очевидно, вже складений у вашій системі, але він може бути доступний на https://opensource.apple.com (я не можу його знайти, але я лише швидко його ознайомився). Мене би не здивувало, якби Apple мала дуже консервативні настройки щодо можливості процесора.


3
AFAIK Apple Kexts не є відкритим кодом. (Дивно?) Найкращим ресурсом для інформації про це є спільнота Hackintoshing через необхідність вводити драйвери.
JMY1000

Зовсім не дивно! Найкращі поради дають тілярям, оскільки вони знають набагато більше, ніж повинні спочатку. Що стосується консервативних налаштувань процесора, пам’ятайте, що MBP має чудовий радіатор для швидких показників, але не настільки великий для стійких циклів. Цілком ймовірно, що ця проблема зводиться до того, що Apple бажає попередньо запобігти приготуванню ніг. Я чув про декілька судових позовів з приводу цієї програми з 2012 року.
користувач1901982

0

Кожного разу, коли os визнає потоки непередбачуваними, і поза контролем вона знизиться, щоб залишатися апаратними та системними стабільними, модель 2012 року поводиться по-різному і може зафіксуватися в гіршому випадку. Зі мною трапилося погано реалізований контроль над потоками, моя вина. Просто не запускайте стільки потоків на подвійному ядрі.


-2

Зі мною трапилося погано реалізований контроль над потоками, моя вина. Просто не запускайте занадто багато потоків на двоядерному процесорі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.