Многопоточный процесс на многоядерном или одноядерном в два раза быстрее?

Предположим, у меня есть процесс, состоящий из двух идеально независимых задач (в идеале, чтобы устранить накладные расходы на связь). Было бы быстрее сделать это на одноядерном процессоре с частотой 3 ГГц или на двухъядерном процессоре с частотой 1,5 ГГц?

Конечно, в случае двухъядерного процессора работа идеально подходит для распараллеливания. А для одного ядра две задачи будут разделены по времени.

Обновление: вопрос другими словами

Одноядерный процессор с удвоенной скоростью всегда лучше, чем двухъядерный процессор?


person KhaledWas    schedule 07.03.2016    source источник


Ответы (2)


Идеально независимые 2 задачи, работающие в неидеальной ОС, такой как Windows 2012, будут работать быстрее на 2 ядрах с частотой 1,5 ГГц, чем на 1 ядре с частотой 3 ГГц, благодаря устранению накладных расходов на переключение контекста потока.

К сожалению, идеально независимых задач очень и очень мало.

person Riad Baghbanli    schedule 07.03.2016
comment
Спасибо за ответ. Могу ли я сказать, что одноядерный процессор с удвоенной скоростью всегда лучше, чем двухъядерный? - person KhaledWas; 07.03.2016
comment
Нет, Халед. Это действительно зависит от задач и ОС, задач ОС. В общем, более или менее нормально сказать, что 4 ядра 3 ГГц будут быстрее, чем 8 ядер 1,5 ГГц для большинства задач. Но с Windows одноядерный процессор всегда находится в невыгодном положении из-за множества запущенных процессов ОС. - person Riad Baghbanli; 07.03.2016
comment
Вы имеете в виду, что эти многочисленные запущенные процессы ОС потребуют больше затрат на разделение времени, чем на связь между параллельными задачами? - person KhaledWas; 07.03.2016
comment
Да Халед. По сути, это сводится к тому, где больше ненужных вычислительных циклов, переключение контекста между многочисленными потоками служб ОС и потоками задач по сравнению с накладными расходами на синхронизацию потоков, если таковые имеются. Обобщенные утверждения редко работают в этих случаях. - person Riad Baghbanli; 07.03.2016
comment
Не согласен. Будет такое же количество переключений контекста, равное общему времени выполнения, деленному на размер временного среза. - person SergeyA; 07.03.2016
comment
@SergeyA, но в двухъядерных переключателях контекста выполняется параллельно, поэтому на 2 переключения контекста тратится меньше времени по сравнению с одним ядром. - person shay__; 08.03.2016
comment
@shay__, не важно. Каждый раз на каждом ядре будет происходить переключение контекста. Предположим, квант времени составляет 100 мс, переключение контекста занимает 2 мс, а процесс занимает 10 секунд для завершения на медленном ядре (5 на быстром). На одно быстрое ядро ​​вы потратите в сумме 5*2+5*2*10*0,002 = 10,2 секунды. На двух медленных ядрах вы потратите на каждое ядро ​​одинаковое количество секунд при одинаковом тактовом времени 10,2 секунды. - person SergeyA; 08.03.2016
comment
@SergeyA - я (и я думаю, что rbaghbanli тоже) говорил о переключениях контекста между задачами ОС, а не о задачах процесса. - person shay__; 08.03.2016

Вопрос в том виде, в котором он опубликован, сильно недоопределен. Во-первых, он путает производительность с частотой процессора. Даже с идентичными микроархитектурами ядра задержки памяти не фиксируются в количестве циклов. Обход связанного списка из миллиарда элементов — это (надуманная) рабочая нагрузка, которая зависит от задержки памяти, где два параллельных потока «половинной скорости» будут быстрее, чем разделение времени.

Если более низкие частоты не являются результатом бинирования продукта, конфигурации энергосбережения или чего-то подобного, а являются результатом более мелкого конвейера (при той же ширине), то «более медленный» процессор будет иметь меньший штраф за неправильное предсказание переходов и меньшую задержку в циклов к той же емкости кэша, что приводит к увеличению количества инструкций за цикл для большинства рабочих нагрузок.

Даже с идентичными микроархитектурами два ядра также избегают накладных расходов на переключение контекста при прогреве кэша. Стоимость переключения контекста — это не только время, затрачиваемое на вызов ОС, запуск планировщика ОС (только с двумя активными потоками на двух ядрах накладные расходы планировщика ОС будут немного ниже, поскольку нет других готовых потоков, но будут в два раза больше прерываний от таймера) и содержимое регистра подкачки. (При запуске в пакетном режиме таких накладных расходов на переключение контекста можно избежать.)

Еще один фактор, который следует учитывать, заключается в том, встречаются ли две задачи с независимыми узкими местами. Например, если одна задача чрезвычайно требовательна к вычислительным ресурсам, а другая ограничена пропускной способностью основной памяти, то их параллельное выполнение может обеспечить более высокую производительность, чем разделение по времени; с разделением по времени потенциал пропускной способности памяти не используется во время интенсивных вычислений.

Еще одним фактором является вмешательство в ограниченные ресурсы. Например, DRAM может страдать от конфликтов банков, которые могут существенно снизить эффективную пропускную способность. Если адресация памяти и синхронизация вызовут максимальные конфликты во время параллельной работы, то эффективная пропускная способность будет уменьшена. Аналогичный эффект может быть получен из-за ограниченной ассоциативности в общем кэше последнего уровня.

Более поздние процессоры также, как правило, имеют термические ограничения, поэтому двухчастотный процессор может быть не в состоянии поддерживать эту частоту при максимальном использовании, если эта частота не гарантируется в условиях вируса питания, тогда как альтернативная двухъядерная система, скорее всего, не сможет поддерживать эту частоту при максимальном использовании. сталкиваются с этим ограничением плотности мощности.

person Paul A. Clayton    schedule 07.03.2016