Я написал очень трудоемкую многопоточную задачу, которая работает, как и ожидалось, на моем четырехъядерном MacBook Pro 2012 года. Я отключаю его с помощью 20 потоков, и температура достигает примерно 100 ° C, что измеряется с помощью Intel Power Gadget с минимальным дросселированием.
Возьмите ту же самую программу и файлы данных на свой 13-дюймовый MacBook Pro 2016 года с двухъядерным процессором и запустите его. Я ожидаю, что он также будет поддерживать 3,3-3,4 ГГц, пока температура не достигнет отметки 100 ° C. Команда top показывает задачу на уровне 350% (2 ядра на каждой из двухпоточных), но частота процессора снижается до 1,6-1-8 ГГц при температуре только около 60 ° C или около того, когда вентиляторы работают практически бесшумно. Если запустить 4 отдельных Задачи однопоточного процессора, машина ведет себя, как и ожидалось, поддерживая частоту 3,3-3,4 ГГц, пока не достигнет 100 ° C, и вентиляторы не начнут вращаться. Вопрос в том, почему дросселируется мой процессор?
Обе машины обновлены и работают с одинаковыми версиями gcc. Если я даже возьму бинарный файл с рабочей машины и поставлю его на Mac 2016 года, у него будет та же проблема.
Если я запускаю 3 или 4 отдельных потока процессора, чтобы машина работала на полной скорости, затем запускаю многопоточную программу, она также замедляет частоту.
Обе машины имеют 16 ГБ оперативной памяти.
редактировать
Поиграв с кодом, я подозреваю, что он удушается, когда задача создает слишком много потоков. В этой программе я беру каждую прочитанную запись и создаю для нее ветку. Я позволяю только 20 или около того потокам работать одновременно, поэтому ни в коем случае не бывает более 21 потока, но необходимо обработать 14 400 000 записей, поэтому в течение примерно 30 минут каждая из этих записей будет обрабатываться отдельным потоком.
Я создал тривиальную программу pthread, которая высасывала процессорное время и запускала 10 из них. Проблемный ноутбук запустил его и нагрелся до 95С без проблем.
Я предполагаю, что я перепишу свой код, чтобы использовать тот же поток вместо того, чтобы уничтожать их и запускать их снова.
Обновление 13.05.17
После нескольких часов работы он только создает n потоков и просто использует их повторно, что не помогло. Помимо температуры процессора, что приведет к снижению скорости работы этой машины?