Производительность логического и физического процессора

10836
vhl

Компьютер имеет 2 физических ядра и 4 логических ядра (например, компьютер с процессором i5-3210M).

Когда программа A запускается, htop показывает, что она использует 100% 1 ядра, а остальные 3 ядра почти бездействуют. Пропускная способность в этом случае X.

Мой вопрос: если я запускаю 4 экземпляра A на 4 логических ядрах, то общая пропускная способность будет 4X или 2X? Что делать, если я запускаю только два экземпляра?

2

3 ответа на вопрос

2
Daniel B

Даже с гораздо большим количеством ядер, чем с задачами, они не будут идеально масштабироваться. Это потому, что некоторые государства почти всегда разделяются. Не обязательно в задаче, но ядро, например. Или они могут получить доступ к одному и тому же ресурсу, например, к сети, к диску или к чему-либо еще.

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

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

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

1
Animesh Patra

Концепция ядер не так проста. Логические ядра - это количество физических ядер, умноженное на количество потоков, которые могут работать на каждом ядре. Это известно как HyperThreading . Если у меня есть компьютер с 4-ядерным процессором, на котором запущено два потока на ядро, то у меня 8 логических процессоров. Вы можете увидеть основные возможности вашего компьютера, запустив команду lscpu .

Если процессор имеет 4 ядра, но он может выполнять 8 потоков параллельно, это означает, что он имеет только 4 ядра (процессорные единицы). Но он может обеспечить аппаратную поддержку 8 потоков параллельно . Ясно, что в ядрах может работать максимум 4 задания. Одна работа выполняется в ядре, если каким-либо образом останавливается память или операция ввода / вывода, тогда другой поток может использовать это свободное ядро.

Теперь вы понимаете, что если ваш компьютер имеет 2 физических ядра и может выполнять 2 потока на ядро, то у вас есть 4 логических процессора . Таким образом, вы можете запустить только 2 экземпляра, так как у вас есть 2 физических ядра, это означает, что вы используете все возможности отдельных физических ядер (2 потока одновременно). Так что пропускная способность составит 50%. Но если в любое время один поток простаивает, то ядро ​​может загрузить один поток на этом ядре.

Вы можете отключить HyperThreading в BIOS (что-то вроде « Intel ht technology ») и увидеть разницу между обычными и HyperThreading возможностями, так как теперь пропускная способность будет равна 100%.

0
Gerrit Tipping

Если у программы нет способа координировать отдельные экземпляры, вы почти наверняка не получите никаких улучшений.

пример:

Если у меня есть однопотоковая программа, которая вычисляет простые числа от 2 до 10, один запущенный экземпляр будет рассчитывать, если каждое число из 2-10 будет простым, и обнаружит, что 2,3,5,7 являются простыми.

Если я добавлю второй экземпляр без каких-либо изменений в код, то первый экземпляр будет рассчитывать, если каждое число из 2-10 является простым, и обнаружит, что 2,3,5,7 являются простыми, а второй экземпляр будет рассчитывать, если каждое число 2-10 простые и найти, что 2,3,5,7 простые.

выполнение этого приведет к тому, что одна и та же работа будет выполнена дважды, что не приведет к улучшению.

Похожие вопросы