Технология Hyper-Threading от Intel. Hyper-Threading: "два-в-одном" от Intel, или Скрытые возможности Xeon

  • 03.05.2019


Владельцы патента RU 2609744:

Изобретение относится к вычислительной технике и может быть использовано для построения средств автоматики и функциональных узлов систем управления. Технический результат заключается в уменьшении аппаратных затрат и повышении быстродействия логического процессора. Технический результат достигается за счет логического процессора, который содержит n информационных входов 1 1 , …, 1 n , вход задания вида аргументов, n элементов НЕРАВНОЗНАЧНОСТЬ 3 1 …3 n , сумматор, дешифратор, n элементов ИЛИ 6 1 , …, 6 n , n элементов И 7 1 , …, 7 n , n настроечных входов 8 1 , …, 8 n и выход логического процессора. 1 ил.

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

Известны логические процессоры (например, патент РФ 2251142, кл. G06F 7/38, 2005 г.), которые содержат мажоритарные элементы и реализуют любую из n простых симметричных булевых функций, зависящих от n аргументов - входных двоичных сигналов .

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

Наиболее близким устройством того же назначения к заявленному изобретению по совокупности признаков является принятый за прототип логический процессор (патент РФ 2294008, кл. G06F 7/57, 2007 г.), который содержит мажоритарные элементы и реализует любую из n простых симметричных булевых функций, зависящих от n аргументов - входных двоичных сигналов.

К причинам, препятствующим достижению указанного ниже технического результата при использовании известных логических процессоров, относятся ограниченные функциональные возможности, обусловленные тем, что реализуются только простые симметричные булевые функции, зависящие от n аргументов - входных двоичных сигналов, низкое быстродействие, обусловленное большой задержкой сигнала в схеме, т.к. выход предыдущего мажоритарного элемента соединен со вторым входом последующего мажоритарного элемента, и высокая сложность, обусловленная большим количеством мажоритарных элементов. Это объясняется тем, что в прототипе «мажоритарные элементы, которые имеют по три входа и сгруппированы в V+1 групп так, что (V+1)-я группа содержит V-1 мажоритарных элементов, в каждой группе выход предыдущего мажоритарного элемента соединен со вторым входом последующего мажоритарного элемента, а выход (V-1)-го мажоритарного элемента (V+1)-й группы является выходом логического процессора, при этом

(n≠1 - любое натуральное число, m=0,5(n+1) либо m=0,5n при нечетном либо четном n соответственно), i-я (i=1, …, V) группа содержит m-1 мажоритарных элементов» .

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

Указанный технический результат изобретения достигается тем, что логический процессор, содержащий n информационных входов, n настроечных входов, выход логического процессора, имеет также вход задания вида аргументов, n элементов НЕРАВНОЗНАЧНОСТЬ, сумматор, дешифратор, n элементов ИЛИ, n элементов И, причем i-ый информационный вход соединен с первым входом i-го элемента НЕРАВНОЗНАЧНОСТЬ, вход задания вида аргумента соединен со вторыми входами элементов НЕРАВНОЗНАЧНОСТЬ, выход i-го элемента НЕРАВНОЗНАЧНОСТЬ соединен с i-м входом сумматора, (i=1, …, n), j-ый выход сумматора соединен с j-ым входом дешифратора, (j=1, …, k), s-ый выход дешифратора соединен с соответствующим входом элементов ИЛИ с первого по s-ый, (s=1, …, n-1), n-ый выход дешифратора соединен с соответствующим входом элементов ИЛИ с первого по (n-1)-ый и с первым входом n-го элемента И, выход i-го элемента ИЛИ соединен с первым входом i-го элемента И, (i=1, …, n-1), j-ый настроечный вход соединен со вторым входом j-го элемента И, (j=1, …, n), выходы элементов И соединены с соответствующими входами n-го элемента ИЛИ, выход которого соединен с выходом логического процессора.

На чертеже представлена схема заявляемого логического процессора.

Логический процессор содержит n информационных входов 1 1 , …, 1 n , вход задания вида аргументов 2, n элементов НЕРАВНОЗНАЧНОСТЬ 3 1 …3 n , сумматор 4, дешифратор 5, n элементов ИЛИ 6 1 , …, 6 n , n элементов И 7 1 , …, 7 n , n настроечных входов 8 1 , …, 8 n , выход логического процессора 9, причем i-ый информационный вход 1 i соединен с первым входом i-го элемента НЕРАВНОЗНАЧНОСТЬ 3 i , вход задания вида аргумента 2 соединен со вторыми входами элементов НЕРАВНОЗНАЧНОСТЬ 3 1 , …, 3 n , выход i-го элемента НЕРАВНОЗНАЧНОСТЬ 2 i соединен с i-м входом сумматора 4, i=1, …, n, j-ый выход сумматора 4 соединен с j-ым входом дешифратора 5, j=1, …, k, s-ый выход дешифратора 5 соединен с соответствующим входом элементов ИЛИ с первого 6 1 по s-ый 6 s , s=1, …, n-1, n-ый выход дешифратора соединен с соответствующим входом элементов ИЛИ 6 с первого 6 1 по (n-1)-ый 6 n-1 и с первым входом n-го элемента И 7 n , выход i-го элемента ИЛИ 6 i соединен с первым входом i-го элемента И 7 i , i=1, …, n-1, j-ый настроечный вход 8 j соединен со вторым входом j-го элемента И 7 j , j=1, …, n, выходы элементов И соединены с соответствующими входами n-го элемента ИЛИ 6 n , выход которого соединен с выходом логического процессора 9.

Работа предлагаемого логического процессора осуществляется следующим образом. Пусть необходимо реализовать простую симметрическую булевую функцию с рангом T (количеством аргументов, входящих в конъюнкции в дизъюнктивной нормальной форме). На вход 8 T подается сигнал «1», а на остальные настроечные входы - сигнал «0». Например, для реализации симметричной булевой функции для n=5

Z=X 1 X 2 X 3 v X 1 X 2 X 4 v X 1 X 2 X 5 v X 1 X 3 X 4 v X 1 X 3 X 5 v X 1 X 4 X 5 v X 2 X 3 X 4 v X 2 X 3 X 5 v X 2 X 4 X 5 v X 3 X 4 X 5

значение T=3.

Для реализации простой симметрической булевой функции на вход задания вида аргументов 2 подается сигнал «0», при этом на выходы элементов НЕРАВНОЗНАЧНОСТЬ 3 поступают значения входных аргументов в прямом виде. Для реализации симметрической булевой функции с инверсными аргументами на вход задания вида аргументов 2 подается сигнал «1», при этом на выходы элементов НЕРАВНОЗНАЧНОСТЬ 3 поступают значения входных аргументов в инверсном виде.

Сумматор 4 имеет n двоичных входов и k двоичных выходов, где k=]log 2 n[, ]…[ означает ближайшее целое, не меньшее, чем выражение в скобках. Например, для n=4 значение k=2, а для n=5 значение k=3. На выходе сумматора 4 формируется двоичный код, десятичный эквивалент которого равен количеству единиц. Вес i-го двоичного разряда на выходах сумматора 4 (и соответственно на входах дешифратора 5) 2 i-1 , где i - номер выхода. Дешифратор 5 является неполным. Вывод дешифратора 5, соответствующий входному набору «00…0», не используется. Не используются выходы дешифратора с номером, большим n. На выходах дешифратора 5 формируется унитарный код, в котором только одно значение «1» на выходе с номером, соответствующим количеству единиц в значениях аргументов. На выходе элемента ИЛИ 6 i формируется сигнал «1», если количество значений «1» среди значений аргументов не менее значения i, i=1, …, n. Как указывалось выше, для реализации симметрической булевой функции ранга T на настроечный вход 8 T подается сигнал «1» и в результате на выходе элемента ИЛИ 6 n и, соответственно, на выходе логического процессора 9 формируется сигнал «1» для тех значений входных аргументов, в которых не менее T значений аргументов равны «1». Аналогично для реализации симметрических булевых функций с инверсными значениями аргументов.

Сравним характеристики прототипа и заявляемого устройства.

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

2. Задержка сигнала в заявленном устройстве постоянная, а в прототипе за счет использования мажоритарных элементов, которые «имеют по три входа и сгруппированы в V+1 групп так, что (V+1)-я группа содержит V-1 мажоритарных элементов, в каждой группе выход предыдущего мажоритарного элемента соединен с вторым входом последующего мажоритарного элемента» , с ростом значения количества аргументов n будет увеличиваться время задержки сигнала. Таким образом, быстродействие схемы будет падать.

3. С ростом количества аргументов n в заявленном устройстве сложность растет пропорционально этому значению, а в прототипе определяется функцией

и, например, при n=5, m=3 V=10, при n=7, m=4 V=35, при n=10, m=5 V=252 и т.д.

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

Использованные источники

1. Логический процессор (RU №2251142 C1, МПК G06F 7/38, заявлено 16.06.2003, опубликовано 27.04.2005).

2. Логический процессор (RU №2294008 C1, МПК G06F 7/57, заявлено 03.11.2005, опубликовано 20.02.2007).

Логический процессор для реализации симметричных булевых функций, зависящих от n аргументов, содержащий n информационных входов, n настроечных входов, выход логического процессора, отличающийся тем, что содержит вход задания вида аргументов, n элементов НЕРАВНОЗНАЧНОСТЬ, сумматор, дешифратор, n элементов ИЛИ, n элементов И, причем i-ый информационный вход соединен с первым входом i-го элемента НЕРАВНОЗНАЧНОСТЬ, вход задания вида аргумента соединен со вторыми входами элементов НЕРАВНОЗНАЧНОСТЬ, выход i-го элемента НЕРАВНОЗНАЧНОСТЬ соединен с i-м входом сумматора, (i=1, …, n), j-ый выход сумматора соединен с j-ым входом дешифратора, (j=1, …, k), s-ый выход дешифратора соединен с соответствующим входом элементов ИЛИ с первого по s-ый, (s=1, …, n-1), n-ый выход дешифратора соединен с соответствующим входом элементов ИЛИ с первого по (n-1)-ый и с первым входом n-го элемента И, выход i-го элемента ИЛИ соединен с первым входом i-го элемента И, (i=1, …, n-1), j-ый настроечный вход соединен с вторым входом j-го элемента И (j=1, …, n), выходы элементов И соединены с соответствующими входами n-го элемента ИЛИ, выход которого соединен с выходом логического процессора.

Похожие патенты:

Изобретение относится к вычислительной технике. Технический результат заключается в гарантировании выполнения транзакции, используя аппаратную глобальную блокировку.

Изобретение относится к области вычислительной техники и может быть использовано в высокопроизводительных микропроцессорных системах. Техническим результатом является расширение технологических возможностей путем трансляции инструкций RISC архитектуры в команды управления потокового вычислителя и повышение производительности микропроцессора путем независимого выполнения команд в потоковом вычислителе без блокировки основного конвейера микропроцессора.

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

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

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

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

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

Изобретение относится к вычислительной технике и может быть использовано для построения средств автоматики и функциональных узлов систем управления. Технический результат заключается в уменьшении аппаратных затрат и повышении быстродействия логического процессора. Технический результат достигается за счет логического процессора, который содержит n информационных входов 11, …, 1n, вход задания вида аргументов, n элементов НЕРАВНОЗНАЧНОСТЬ 31…3n, сумматор, дешифратор, n элементов ИЛИ 61, …, 6n, n элементов И 71, …, 7n, n настроечных входов 81, …, 8n и выход логического процессора. 1 ил.

ов в машине, и я нашел несколько сообщений, но я смущен, поскольку некоторые упомянули, что вы получаете логические ядра и физические ядра и т. Д.
Так в чем же разница между логическими и физическими ядрами и есть ли способ получить физические ядра? Или имеет смысл включать логические ядра в наш счет?

4 Solutions collect form web for “Итак, каковы логические ядра процессора (в отличие от физических ядер процессора)?”

Физические ядра – это просто физические ядра в процессоре. Логические ядра – это способности одного ядра, чтобы одновременно выполнять две или более вещи. Это выросло из ранних процессоров Pentium 4, способных делать то, что называлось Hyper Threading (HTT) .

Это была игра, в которой играли, когда вспомогательные компоненты ядра не использовались для определенных типов инструкций, в то время как другая длинная работа могла выполняться. Таким образом, центральный процессор мог бы работать одновременно над двумя вещами.

Новые ядра – это более полнофункциональные процессоры, поэтому они работают над несколькими вещами одновременно, но они не являются истинными процессорами в качестве физических ядер. Вы можете больше узнать об ограничениях функции hyperthreading и физических возможностях ядра здесь в tomshardware в этой статье под названием: Intel Core i5 и Core i7: Intel Mainstream Magnum Opus .

Вы можете увидеть разбивку своего окна с помощью команды lscpu:

$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit CPU(s): 4 Thread(s) per core: 2 Core(s) per socket: 2 CPU socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 37 Stepping: 5 CPU MHz: 2667.000 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 3072K NUMA node0 CPU(s): 0-3

В приведенном выше моем ноутбуке Intel i5 есть 4 "процессора" в целом

Процессор (ы): 4

из которых имеется 2 физических ядра

Ядро (ы) на сокет: 2

из которых каждый может работать до 2 потоков

Тема (ы) на ядро: 2

в то же время. Эти потоки являются логическими возможностями ядра.

Физические ядра – это число физических ядер, реальных аппаратных компонентов.

Логические ядра – это число физических ядер, умноженное на количество потоков, которые могут выполняться на каждом ядре с помощью гиперпотока.

например, мой 4-ядерный процессор работает по двум потокам на ядро, поэтому у меня есть 8 логических процессоров.

$ sudo dmidecode |egrep "Socket Designation: Proc|((Thread|Core) Count)" Socket Designation: Proc 1 Core Count: 14 Thread Count: 28 Socket Designation: Proc 2 Core Count: 14 Thread Count: 28

Два гнезда. Каждый разъем имеет 14 физических ядер. Каждое ядро ​​имеет два потока (28/14). Общее количество логических блоков «cpus» или логической обработки – 56 (это то, что «верх», а некоторые другие команды показывают вам как число «cpus»).

Технология Hyperthreading позволяет одному физическому ядру процессора вести себя как два логических процессора.

Таким образом, одно процессорное ядро ​​может одновременно выполнять два независимых потока.

Intel относится к физическому процессору как к сокету.

Hyperthreading позволяет физическому процессору вести себя так, как будто он имеет два физических процессора, которые называются логическими процессорами. Зачем?

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

Резюме

Физический процессор – это то, что мы можем видеть и падать.

Логический процессор похож на: Phsical Core, действующий как два физических ядра

Мы писали, что использование однопроцессорных Xeon-систем лишено всякого смысла, поскольку при более высокой цене их производительность будет такой же, как и у Pentium 4 той же частоты. Теперь же, после более тщательного изучения, в это утверждение наверняка придется внести небольшую поправку. Технология Hyper-Threading, реализованная в Intel Xeon с ядром Prestonia, действительно работает и дает вполне ощутимый эффект. Хотя и вопросов при ее использовании тоже возникает немало…

Даешь производительность

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

Постоянный рост быстродействия, безусловно, нужен. По крайней мере, это прибыльный бизнес, и всегда найдется красивый способ подвигнуть пользователей на очередной апгрейд вчерашнего "суперпроизводительного CPU" на завтрашний "еще более супер…". Например, синхронное распознавание речи и синхронный же перевод на другой язык - это ли не мечта всех и каждого? Или необычайно реалистичные игры почти "киношного" качества (целиком поглощающие внимание и порой приводящие к серьезным изменениям в психике) - это ли не стремление множества геймеров от мала до велика?

Но давайте в данном случае вынесем за скобки маркетинговые аспекты, сосредоточившись на технических. Тем более что не все так уж мрачно: есть насущные задачи (серверные приложения, научные расчеты, моделирование и пр.), где все более высокая производительность, в частности центральных процессоров, действительно необходима.

Итак, какими же способами добиться увеличения их быстродействия?

Повышение тактовой частоты . Можно и дальше "утоньшать" технологический процесс и наращивать частоту. Но, как известно, это непросто и чревато всевозможными побочными эффектами вроде проблем с тепловыделением.

Наращивание ресурсов процессора - например, наращивание объема кэша, добавление новых блоков (Execution Units). Все это влечет за собой рост числа транзисторов, усложнение процессора, увеличение площади кристалла, а следовательно, стоимости.

Кроме того, предыдущие два способа дают, как правило, отнюдь не линейное повышение производительности. Это хорошо известно на примере Pentium 4: ошибки в предсказании ветвлений и прерывания вызывают сброс длинного конвейера, что сильно сказывается на общем быстродействии.

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

Кроме "чистой" многопроцессорности, существует несколько "промежуточных" вариантов, позволяющих ускорить выполнение приложений:

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

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

Switch-on-Event Multithreading . Переключение задач при возникновении длительных пауз, например "непопаданий в кэш" (cache misses), большое число которых характерно для серверных приложений. В этом случае процесс, ожидающий загрузки данных из сравнительно медленной памяти в кэш, приостанавливается, высвобождая ресурсы CPU для других процессов. Однако Switch-on-Event Multithreading, как и Time-Slice Multithreading, не всегда позволяет достичь оптимального использования ресурсов процессора, - в частности из-за ошибок в предсказании ветвлений, зависимости инструкций и т. д.

Simultaneous Multithreading . В этом случае программные потоки выполняются на одном процессоре "одновременно", т. е. без переключения между ними. Ресурсы CPU распределяются динамически, по принципу "не используешь - отдай другому". Именно такой подход положен в основу технологии Intel Hyper-Threading, к рассмотрению которой мы и переходим.

Как работает Hyper-Threading

Как известно, нынешняя "парадигма компьютинга" предполагает многопоточные вычисления. Это касается не только серверов, где такое понятие существует изначально, но и рабочих станций и настольных систем. Потоки (threads) могут относиться как к одному, так и к разным приложениям, но почти всегда активных потоков больше, чем один (чтобы убедиться в этом, достаточно в Windows 2000/XP открыть Task Manager и включить отображение числа потоков). Вместе с тем обычный процессор может в один момент времени выполнять только один из потоков и вынужден постоянно переключаться между ними.

Впервые технология Hyper-Threading была реализована в процессоре Intel Xeon MP (Foster MP), на котором и шла ее "обкатка". Напомним, что Xeon MP, официально представленный на IDF Spring 2002, использует родственное Pentium 4 Willamette ядро, содержит 256 KB L2-кэша и 512 KB/1 MB L3-кэша и поддерживает работу в 4-процессорных конфигурациях. Также поддержка Hyper-Threading наличествует в процессоре для рабочих станций - Intel Xeon (ядро Prestonia, 512 KB L2-кэша), вышедшем на рынок несколько раньше, чем Xeon MP. С двухпроцессорными конфигурациями на Intel Xeon наши читатели уже знакомы , поэтому мы рассмотрим возможности Hyper-Threading именно на примере этих CPU - как теоретически, так и практически. Как бы там ни было, а "простой" Xeon - вещь более приземленная и удобоваримая, чем Xeon MP в 4-процессорных системах…

Принцип действия Hyper-Threading основывается на том, что в каждый момент времени только часть ресурсов процессора используется при выполнении программного кода. Неиспользуемые ресурсы также можно загрузить работой - например, задействовать для параллельного выполнения еще одного приложения (либо другого потока этого же приложения). В одном физическом процессоре Intel Xeon формируются два логических процессора (LP - Logical Processor), которые разделяют между собой вычислительные ресурсы CPU. Операционная система и приложения "видят" именно два CPU и могут распределять работу между ними, как и в случае полноценной двухпроцессорной системы.

Одна из целей реализации Hyper-Threading - при наличии только одного активного потока позволить ему выполняться с тем же быстродействием, как и на обычном CPU. Для этого у процессора предусмотрены два основных режима работы: Single-Task (ST) и Multi-Task (MT). В режиме ST активным является только один логический процессор, который безраздельно пользуется доступными ресурсами (режимы ST0 и ST1); другой LP остановлен командой HALT. При появлении второго программного потока бездействовавший логический процессор активируется (посредством прерывания), и физический CPU переводится в режим MT. Останов неиспользуемых LP командой HALT возложен на операционную систему, которая в итоге и отвечает за такое же быстрое выполнение одного потока, как и в случае без Hyper-Threading.

Для каждого из двух LP хранится так называемый Architecture State (AS), что включает в себя состояние регистров различного типа - общего назначения, управляющих, APIC и служебных. У каждого LP есть свои APIC (контроллер прерываний) и набор регистров, для корректной работы с которыми вводится понятие Register Alias Table (RAT), отслеживающей соответствие между восемью регистрами общего назначения IA-32 и 128 регистрами физического CPU (по одной RAT на каждый LP).

При работе двух потоков поддерживаются два соответствующих набора Next Instruction Pointers. Большая часть инструкций берется из Trace Cache (TC), где они хранятся в декодированном виде, и доступ к TC два активных LP получают поочередно, через такт. В то же время, когда активен только один LP, он получает монопольный доступ к TC без чередования по тактам. Аналогичным же образом происходит и доступ к Microcode ROM. Блоки ITLB (Instruction Translation Look-aside Buffer), задействующиеся при отсутствии необходимых инструкций в кэше команд, дублируются и доставляют команды каждый для своего потока. Блок декодирования инструкций IA-32 Instruction Decode является разделяемым и в случае, когда требуется декодирование инструкций для обоих потоков, обслуживает их поочередно (опять-таки через такт). Блоки Uop Queue и Allocator разделяются надвое, отводя по половине элементов для каждого LP. Schedulers числом 5 штук обрабатывают очереди декодированных команд (Uops) несмотря на принадлежность к LP0/LP1 и направляют команды на выполнение нужным Execution Units - в зависимости от готовности к выполнению первых и доступности вторых. Кэши всех уровней (L1/L2 для Xeon, а также L3 для Xeon MP) являются полностью разделяемыми между двумя LP, однако для обеспечения целостности данных записи в DTLB (Data Translation Look-aside Buffer) снабжаются дескрипторами в виде ID логических процессоров.

Таким образом, инструкции обоих логических CPU могут выполняться одновременно на ресурсах одного физического процессора, которые подразделяются на четыре класса:

  • дублируемые (Duplicated);
  • полностью разделяемые (Fully Shared);
  • с дескрипторами элементов (Entry Tagged);
  • динамически разделяемые (Partitioned) в зависимости от режима работы ST0/ST1 или MT.

При этом большинство приложений, получающих ускорение в многопроцессорных системах, могут также ускоряться и на CPU со включенным Hyper-Threading без каких-либо модификаций. Но существуют и проблемы: например, если один процесс находится в цикле ожидания, он может занять все ресурсы физического CPU, препятствуя работе второго LP. Таким образом, производительность при использовании Hyper-Threading может иногда и падать (до 20%). Для предотвращения этого Intel рекомендует вместо пустых циклов ожидания использовать инструкцию PAUSE (появилась в IA-32 начиная с Pentium 4). Также ведется достаточно серьезная работа по автоматической и полуавтоматической оптимизации кода при компиляции - например, в этом отношении ощутимо продвинулись компиляторы серии Intel OpenMP C++/Fortran Compilers ().

Еще одной целью первой реализации Hyper-Threading, по словам Intel, было сведение к минимуму роста числа транзисторов, площади кристалла и энергопотребления при заметном приросте быстродействия. Первая часть этого обязательства уже выполнена: добавление в Xeon/Xeon MP поддержки Hyper-Threading увеличило площадь кристалла и энергопотребление менее чем на 5%. Что же получилось со второй частью (производительностью), нам еще предстоит проверить.

Практическая часть

По вполне понятным причинам мы не проводили тестов 4-процессорных серверных систем на Xeon MP со включенным Hyper-Threading. Во-первых, это достаточно трудоемко. А во-вторых, решись мы на такой подвиг - все равно сейчас, менее чем через месяц после официального объявления, абсолютно нереально заполучить это дорогостоящее оборудование. Поэтому решено было ограничиться той же системой с двумя Intel Xeon 2.2 GHz, на которой проводилось первое тестирование этих процессоров (см. ссылку в начале статьи). Система основывалась на материнской плате Supermicro P4DC6+ (чипсет Intel i860), содержала 512 MB RDRAM-памяти, видеокарту на чипе GeForce3 (64 MB DDR, драйверы Detonator 21.85), жесткий диск Western Digital WD300BB и 6X DVD-ROM; в качестве ОС использовалась Windows 2000 Professional SP2.

Для начала несколько общих впечатлений. При установке одного Xeon с ядром Prestonia на старте системы BIOS выводит сообщение о наличии двух CPU; если же установлены два процессора, пользователь видит сообщение о четырех CPU. Операционная система нормально распознает "оба процессора", но только если выполнены два условия.

Во-первых, в CMOS Setup у последних версий BIOS плат Supermicro P4DCxx появился пункт Enable Hyper-Threading, без разрешения которого ОС распознает только физический процессор(-ы). Во-вторых, для сообщения ОС о наличии дополнительных логических процессоров используются возможности ACPI. Поэтому для задействования Hyper-Threading в CMOS Setup должна быть включена опция ACPI, и для самой ОС также должен быть установлен HAL (Hardware Abstraction Layer) с поддержкой ACPI. Благо, в Windows 2000 смена HAL со Standard PC (или MPS Uni-/Multiprocessor PC) на ACPI Uni-/Multiprocessor PC производится легко - заменой "драйвера компьютера" в менеджере устройств. В то же время для Windows XP единственным законным способом перехода на ACPI HAL является переустановка системы поверх существующей инсталляции.

Но вот все приготовления сделаны, и наша Windows 2000 Pro уже свято верит в то, что работает на двухпроцессорной системе (хотя на самом деле процессор установлен только один). Теперь по традиции пора определиться с целями тестирования. Итак, мы хотим:

  • Оценить влияние Hyper-Threading на производительность приложений различного класса.
  • Сравнить этот эффект с эффектом от установки второго процессора.
  • Проверить, насколько "честно" ресурсы отдаются активному логическому процессору, когда второй LP бездействует.

Для оценки производительности мы взяли уже знакомый читателям набор приложений, использовавшийся в тестированиях workstation-систем. Начнем, пожалуй, с конца и проверим "равноправность" логических CPU. Все предельно просто: сначала мы проводим тесты на одном процессоре с отключенным Hyper-Threading, а затем повторяем процесс, включив Hyper-Threading и используя только один из двух логических CPU (с помощью Task Manager). Поскольку в данном случае нас интересуют лишь относительные значения, результаты всех тестов приведены к виду "больше - лучше" и нормализованы (за единицу взяты показатели однопроцессорной системы без Hyper-Threading).

Что ж, как можно видеть, обещания Intel здесь выполнены: при наличии только одного активного потока производительность каждого из двух LP в точности равна быстродействию физического CPU без Hyper-Threading. Бездействующий LP (причем как LP0, так и LP1) действительно приостанавливается, а разделяемые ресурсы, насколько об этом можно судить по полученным результатам, полностью передаются в пользование активному LP.

Поэтому делаем первый вывод: два логических процессора на самом деле являются равноправными, а включение Hyper-Threading "не мешает" работе одного потока (что само по себе уже неплохо). Посмотрим теперь, "помогает" ли это включение, и если да, то где и как?

Рендеринг . Результаты четырех тестов в пакетах 3D-моделирования 3D Studio MAX 4.26, Lightwave 7b и A|W Maya 4.0.1 объединены в одну диаграмму ввиду их похожести.

Во всех четырех случаях (для Lightwave - две различные сцены) загрузка CPU при наличии одного процессора с выключенным Hyper-Threading практически постоянно держится на уровне 100%. Тем не менее при включении Hyper-Threading расчет сцен ускоряется (в результате чего у нас даже родилась шутка о загрузке CPU более 100%). В трех тестах виден прирост производительности от Hyper-Threading 14--18% - с одной стороны, негусто по сравнению со вторым CPU, но с другой - весьма неплохо, учитывая "бесплатность" этого эффекта. В одном из двух тестов с Lightwave прирост быстродействия практически нулевой (видимо, сказывается специфика этого полного странностей приложения). Но отрицательного результата нет нигде, а заметный прирост в трех других случаях обнадеживает. И это при том, что параллельные процессы рендеринга делают сходную работу и наверняка не лучшим образом могут одновременно задействовать ресурсы физического CPU.

Photoshop и MP3-кодирование . Кодек GOGO-no-coda 2.39c один из немногих поддерживает SMP, и на нем заметен 34%-ный прирост быстродействия от двухпроцессорности. Вместе с тем эффект от Hyper-Threading в данном случае нулевой (разницу в 3% мы существенной не считаем). А вот в тесте с Photoshop 6.0.1 (скрипт, состоящий из большого набора команд и фильтров) видно замедление при включении Hyper-Threading, хотя второй физический CPU добавляет в этом случае 12% производительности. Вот, собственно, первый случай, когда Hyper-Threading вызывает падение быстродействия…

Профессиональный OpenGL . То, что SPEC ViewPerf и многие другие OpenGL-приложения часто замедляются в SMP-системах, известно давно.

OpenGL и двухпроцессорность: почему они не дружат

Много раз в статьях мы обращали внимание читателей на то, что двухпроцессорные платформы при выполнении профессиональных OpenGL-тестов очень редко показывают хоть сколько-нибудь существенное преимущество по сравнению с однопроцессорными. И мало того, нередки случаи, когда установка второго процессора наоборот, ухудшает быстродействие системы при отрисовке динамичных трехмерных сцен.

Естественно, замечали эту странность не только мы. Некоторые тестеры просто молча обходили этот факт - например, приводя результаты сравнения по тестам SPEC ViewPerf только для двухпроцессорных конфигураций, избегая таким образом объяснений "почему двухпроцессорная система медленнее?". Другие же строили все возможные фантастические предположения о когерентности кэшей, необходимости ее поддерживать, возникающих из-за этого накладных расходах и т.п. И почему-то никого не удивляло, что, например, следить за когерентностью процессорам почему-то приспичило именно при оконном OpenGL-рендеринге (по своей "вычислительной" сути мало чем отличающемся от любой другой расчетной задачи).

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

  • есть более два или больше одновременно выполняющихся программных потока (threads);
  • эти потоки не мешают выполнению один другого - например, не конкурируют за общий ресурс вроде внешнего накопителя или сетевого интерфейса.

Теперь же упрощенно рассмотрим как выглядит OpenGL-рендеринг, выполняемый двумя потоками. Если приложение, "видя" два процессора, создает два потока OpenGL-рендеринга, то для каждого из них, согласно правилам OpenGL, создается свой gl-контекст. Соответственно каждый поток выполняет рендеринг в свой gl-контекст. Но проблема в том, что для окна, в которое происходит вывод изображения, только один gl-контекст может быть текущим в каждый момент. Соответственно потоки в этом случае просто "по очереди" выводят сгенерированное изображение в окно, делая попеременно свой контекст текущим. Нужно ли говорить, что такое "чередование контекстов" может очень дорого обходиться в смысле накладных расходов?

Также для примера приведем графики использования двух CPU в нескольких приложениях, отображающих OpenGL-сцены. Все измерения проведены на платформе следующей конфигурации:

  • один или два Intel Xeon 2.2 GHz (Hyper-Threading отключен);
  • 512 MB RDRAM-памяти;
  • материнская плата Supermicro P4DC6+;
  • видеокарта ASUS V8200 Deluxe (NVidia GeForce3, 64 MB DDR SDRAM, драйверы Detonator 21.85);
  • Windows 2000 Professional SP2;
  • видеорежим 1280x1024x32 bpp, 85 Hz, Vsync отключен.

Синим и красным изображены графики загруженности CPU 0 и CPU 1 соответственно. Линия посередине - итоговый график CPU Usage. Три графика соответствуют двум сценам из 3D Studio MAX 4.26 и части теста SPEC ViewPerf (AWadvs-04).


CPU Usage: анимация 3D Studio MAX 4.26 - Anibal (with manipulators).max


CPU Usage: анимация 3D Studio MAX 4.26 - Rabbit.max


CPU Usage: SPEC ViewPerf 6.1.2 - AWadvs-04

Такая же картина повторяется еще в массе других приложений, задействующих OpenGL. Два процессора совершенно не утруждаются работой, и общий CPU Usage оказывается на уровне 50-60%. В то же время для однопроцессорной системы во всех этих случаях CPU Usage уверенно держится на уровне 100%.

Поэтому неудивительно то, что очень многие OpenGL-приложения не слишком ускоряются в дуальных системах. Ну а то, что они порой даже замедляются, имеет, на наш взгляд, вполне логичное объяснение.

Мы можем констатировать, что при двух логических CPU падение быстродействия еще более значительно, что вполне объяснимо: два логических процессора мешают друг другу точно так же, как и два физических. Но их общая производительность, естественно, оказывается при этом ниже, поэтому при включении Hyper-Threading она снижается еще больше, чем просто при работе двух физических CPU. Результат предсказуемый и вывод простой: Hyper-Threading, как и "настоящий" SMP, для OpenGL бывает противопоказан.

CAD-приложения . Предыдущий вывод подтверждается и результатами двух CAD-тестов - SPECapc for SolidEdge V10 и SPECapc for SolidWorks. Показатели графических составляющих этих тестов для Hyper-Threading похожи (хотя в случае SMP-системы для SolidEdge V10 результат немного выше). А вот результаты нагружающих процессор тестов CPU_Score заставляют задуматься: 5--10%-ный прирост от SMP и 14--19%-ное замедление от Hyper-Threading.

Но в конце концов, Intel честно признает в некоторых случаях возможность падения производительности при Hyper-Threading - например, при использовании пустых циклов ожидания. Мы можем лишь предположить, что это и является причиной (детальное исследование кода SolidEdge и SolidWorks выходит за рамки статьи). Ведь всем известен консерватизм разработчиков CAD-приложений, предпочитающих проверенную надежность и не особо спешащих переписывать код с учетом новых веяний в программировании.

Подведение итогов, или "Внимание, правильный вопрос"

Hyper-Threading работает, в этом никаких сомнений не остается. Безусловно, технология не универсальна: есть приложения, которым "плохеет" от Hyper-Threading, и в случае распространения этой технологии их желательно будет модифицировать. Но разве не то же самое произошло в свое время с MMX и SSE и продолжает происходить с SSE2?..

Однако здесь встает вопрос о применимости этой технологии к нашим реалиям. Вариант однопроцессорной системы на Xeon с Hyper-Threading мы отбросим сразу (или допустим только как временный, в ожидании покупки второго процессора): даже 30%-ный прирост производительности никак не оправдывает цену - тогда уж лучше приобрести обычный Pentium 4. Остается число CPU от двух и выше.

А теперь давайте вообразим, что мы покупаем двухпроцессорную систему на Xeon (скажем, с Windows 2000/XP Professional). Два CPU установлены, Hyper-Threading включен, BIOS находит целых четыре логических процессора, сейчас ух как взлетим… Стоп. А вот сколько процессоров увидит наша операционная система? Правильно, два. Всего два, поскольку на большее число она просто не рассчитана. Это будут два физических процессора, т. е. работать все будет точно так же, как и при отключенном Hyper-Threading, - не медленнее (два "дополнительных" логических CPU просто остановятся), но и не быстрее (проверено дополнительными тестами, результаты не приводим по причине их полной очевидности). М-да, приятного мало…

Что же остается? Ну не ставить же Advanced Server или.NET Server на нашу workstation в самом деле? Нет, система-то установится, опознает все четыре логических процессора и будет функционировать. Вот только серверная ОС смотрится на рабочей станции, мягко говоря, немного странно (не говоря уже о финансовых аспектах). Единственный разумный случай - это когда наша двухпроцессорная Xeon-система и будет выполнять роль сервера (по крайней мере, некоторые сборщики ничтоже сумняшеся уже наладили выпуск серверов на workstation-процессорах Xeon). Но вот для дуальных workstation с соответствующими ОС применимость Hyper-Threading остается под вопросом. Intel сейчас активно выступает за лицензирование ОС по числу не логических, а физических CPU. Дискуссии пока еще идут, и, в общем-то, многое зависит от того, увидим ли мы ОС для рабочих станций с поддержкой четырех процессоров.

Ну а с серверами все выходит достаточно просто. Например, Windows 2000 Advanced Server, установленный на двухпроцессорную Xeon-систему со включенным Hyper-Threading, "увидит" четыре логических процессора и будет преспокойно на ней работать. Для оценки того, что дает Hyper-Threading в серверных системах, мы приводим результаты Intel Microprocessor Software Labs для двухпроцессорных систем на Xeon MP и нескольких серверных приложений Microsoft.

Прибавка производительности 20--30% для двухпроцессорного сервера "задаром" - вещь более чем заманчивая (особенно по сравнению с покупкой "настоящей" 4-процессорной системы).

Вот и выходит, что на текущий момент практическая применимость Hyper-Threading возможна только в серверах. Вопрос же с рабочими станциями зависит от решения с лицензированием ОС. Хотя и еще одно применение Hyper-Threading вполне реально - если и настольные процессоры получат поддержку этой технологии. К примеру (пофантазируем), чем плоха система с Pentium 4 с поддержкой Hyper-Threading, на которую установлена Windows 2000/XP Professional с поддержкой SMP?.. Впрочем, ничего невероятного в этом нет: полные энтузиазма разработчики Intel обещают повсеместное внедрение Hyper-Threading - от серверов до настольных и мобильных систем.

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

Видео-формат статьи «Вся правда о многоядерных процессорах»

Простое объяснение вопроса «что такое процессор»

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

Многие называют процессором системный блок — «ящик», внутри которого находятся все компоненты ПК, но это в корне неверно. Системный блок — это корпус компьютера вместе со всеми составляющими частями — жёстким диском, оперативной памятью и многими другими деталями.

Функция процессора — вычисления . Не столь важно, какие именно. Дело в том, что вся работа компьютера завязана исключительно на арифметических вычислениях. Сложение, умножение, вычитание и прочая алгебра — этим всем занимается микросхема под названием «процессор». А результаты таких вычислений выводятся на экран в виде игры, вордовского файла или просто рабочего стола.

Главная часть компьютера, которая занимается вычислениями — вот, что такое процессор .

Что такое процессорное ядро и многоядерность

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

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

Многоядерность — это разделение одного процессора на несколько одинаковых функциональных блоков. Количество блоков — это число ядер внутри одного процессора.

Разновидности многоядерных процессоров

Бытует заблуждение: «чем больше ядер у процессора — тем лучше». Именно так стараются представить дело маркетологи, которым платят за создание такого рода заблуждений. Их задача — продавать дешёвые процессоры, притом — подороже и в огромных количествах. Но на самом деле количество ядер — далеко не главная характеристика процессоров.

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

Сколько бывает ядер внутри процессора?

Для персональных компьютеров и ноутбуков одноядерные процессоры толком не выпускаются уже несколько лет, а встретить их в продаже — большая редкость. Число ядер начинается с двух. Четыре ядра — как правило, это более дорогие процессоры, но отдача от них присутствует. Существуют также 6-ядерные процессоры, невероятно дорогие и гораздо менее полезные в практическом плане. Мало какие задачи способны получить прирост производительности на этих монструозных кристаллах.

Был эксперимент компании AMD создавать и 3-ядерные процессоры, но это уже в прошлом. Получилось весьма неплохо, однако их время прошло.

Кстати, компания AMD также производит многоядерные процессоры, но, как правило, они ощутимо слабее конкурентов от Intel. Правда, и цена у них значительно ниже. Просто следует знать, что 4 ядра от AMD почти всегда окажутся заметно слабее, чем те же 4 ядра производства Intel.

Теперь вы знаете, что у процессоров бывает 1, 2, 3, 4, 6 и 12 ядер. Одноядерные и 12-ядерные процессоры — большая редкость. Трёхядерные процессоры — дело прошлого. Шестиядерные процессоры либо очень дороги (Intel), либо не такие уж сильные (AMD), чтобы переплачивать за число. 2 и 4 ядра — самые распространённые и практичные устройства, от самых слабых до весьма мощных.

Частота многоядерных процессоров

Одна из характеристик компьютерных процессоров — их частота. Те самые мегагерцы (а чаще — гигагерцы). Частота — важная характеристика, но далеко не единственная . Да, пожалуй, ещё и не самая главная. К примеру, двухядерный процессор с частотой 2 гигагерца — более мощное предложение, чем его одноядерный собрат с частотой 3 гигагерца.

Совсем неверно считать, что частота процессора равна частоте его ядер, умноженной на количество ядер. Если проще, то у 2-ядерного процессора с частотой ядра 2 ГГц общая частота ни в коем случае не равна 4 гигагерцам! Даже понятия «общая частота» не существует. В данном случае, частота процессора равна именно 2 ГГц. Никаких умножений, сложений или других операций.

И вновь «превратим» процессоры в квартиры. Если высота потолков в каждой комнате — 3 метра, то общая высота квартиры останется такой же — всё те же три метра, и ни сантиметром выше. Сколько бы комнат не было в такой квартире, высота этих комнат не изменяется. Так же и тактовая частота процессорных ядер . Она не складывается и не умножается.

Виртуальная многоядерность, или Hyper-Threading

Существуют ещё и виртуальные процессорные ядра . Технология Hyper-Threading в процессорах производства Intel заставляет компьютер «думать», что внутри двухядерного процессора на самом деле 4 ядра. Очень похоже на то, как один-единственный жёсткий диск делится на несколько логических — локальные диски C, D, E и так далее.

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

Имеет ли практический смысл такая уловка с виртуальными ядрами ? Чаще всего — да, хотя всё зависит от конкретных задач. Вроде, и комнат стало больше (а главное — они используются рациональнее), но площадь помещения не изменилась. В офисах такие перегородки невероятно полезны, в некоторых жилых квартирах — тоже. В других случаях в перегораживании помещения (разделении ядра процессора на два виртуальных) смысла нет вообще.

Отметим, что наиболее дорогие и производительные процессоры класса Core i7 в обязательном порядке оснащены Hyper- Threading . В них 4 физических ядра и 8 виртуальных. Получается, что одновременно на одном процессоре работают 8 вычислительных потоков. Менее дорогие, но также мощные процессоры Intel класса Core i5 состоят из четырёх ядер, но Hyper Threading там не работает. Получается, что Core i5 работают с 4 потоками вычислений.

Процессоры Core i3 — типичные «середнячки», как по цене, так и по производительности. У них два ядра и никакого намёка на Hyper-Threading. Итого получается, что у Core i3 всего два вычислительных потока. Это же относится и к откровенно бюджетным кристаллам Pentium и Celeron . Два ядра, «гипе-трединг» отсутствует = два потока.

Нужно ли компьютеру много ядер? Сколько ядер нужно в процессоре?

Все современные процессоры достаточно производительны для обычных задач . Просмотр интернета, переписка в соцсетях и по электронной почте, офисные задачи Word-PowerPoint-Excel: для этой работы подойдут и слабенькие Atom, бюджетные Celeron и Pentium, не говоря уже о более мощных Core i3. Двух ядер для обычной работы более чем достаточно. Процессор с большим количеством ядер не принесёт значительного прироста в скорости.

Для игр следует обратить внимание на процессоры Core i3 или i5 . Скорее, производительность в играх будет зависеть не от процессора, а от видеокарты. Редко в какой игре потребуется вся мощь Core i7. Поэтому считается, что игры требуют не более четырёх процессорных ядер, а чаще подойдут и два ядра.

Для серьёзной работы вроде специальных инженерных программ, кодирования видео и прочих ресурсоёмких задач требуется действительно производительная техника . Часто здесь задействуются не только физические, но и виртуальные процессорные ядра. Чем больше вычислительных потоков, тем лучше. И не важно, сколько стоит такой процессор: профессионалам цена не столь важна.

Есть ли польза от многоядерных процессоров?

Безусловно, да. Одновременно компьютер занимается несколькими задачами — хотя бы работа Windows (кстати, это сотни разных задач) и, в тот же момент, проигрывание фильма. Проигрывание музыки и просмотр интернета. Работа текстового редактора и включённая музыка. Два процессорных ядра — а это, по сути, два процессора, справятся с разными задачами быстрее одного. Два ядра сделают это несколько быстрее. Четыре — ещё быстрее, чем два.

В первые годы существования технологии многоядерности далеко не все программы умели работать даже с двумя ядрами процессора. К 2014 году подавляющее большинство приложений отлично понимают и умеют пользоваться преимуществами нескольких ядер. Скорость обработки задач на двухядерном процессоре редко увеличивается в два раза, но прирост производительности есть почти всегда.

Поэтому укоренившийся миф о том, что, якобы, программы не могут использовать несколько ядер — устаревшая информация. Когда-то действительно было так, сегодня ситуация улучшилась кардинально. Преимущества от нескольких ядер неоспоримы, это факт.

Когда меньше ядер у процессора — лучше

Не следует покупать процессор по неверной формуле «чем больше ядер — тем лучше». Это не так. Во-первых, 4, 6 и 8-ядерные процессоры ощутимо дороже своих двухядерных собратьев. Значительная прибавка в цене далеко не всегда оправдана с точки зрения в производительности. К примеру, если 8-ядерник окажется лишь на 10% быстрее CPU с меньшим количеством ядер, но будет в 2 раза дороже, то такую покупку сложно оправдать.

Во-вторых, чем больше ядер у процессора, тем он «прожорливее» с точки зрения энергопотребления. Нет никакого смысла покупать гораздо более дорогой ноутбук с 4-ядерным (8-поточным) Core i7, если на этом ноутбуке будут обрабатываться лишь текстовые файлы, просматриваться интернет и так далее. Никакой разницы с двухядерником (4 потока) Core i5 не будет, да и классический Core i3 лишь с двумя вычислительными потоками не уступит более именитому «коллеге». А от батарейки такой мощный ноутбук проработает гораздо меньше, чем экономичный и нетребовательный Core i3.

Многоядерные процессоры в мобильных телефонах и планшетах

Мода на несколько вычислительных ядер внутри одного процессора касается и мобильных аппаратов. Смартфоны вместе с планшетами с большим количеством ядер почти никогда не используют все возможности своих микропроцессоров. Двухядерные мобильные компьютеры иногда действительно работают чуть быстрее, но 4, а тем более 8 ядер — откровеннейший перебор. Аккумулятор расходуется совершенно безбожно, а мощные вычислительные устройства попросту простаивают без дела. Вывод — многоядерные процессоры в телефонах, смартфонах и планшетах — лишь дань маркетингу, а не насущная необходимость. Компьютеры — более требовательные устройства, чем телефоны. Два процессорных ядра им действительно нужны. Четыре — не помешают. 6 и 8 — излишество в обычных задачах и даже в играх.

Как выбрать многоядерный процессор и не ошибиться?

Практическая часть сегодняшней статьи актуальна на 2014 год. Вряд ли в ближайшие годы что-то серьёзно поменяется. Речь пойдёт только о процессорах производства Intel. Да, AMD предлагает неплохие решения, но они менее популярны, да и разобраться в них сложнее.

Заметим, что таблица основана на процессорах образца 2012-2014 годов. Более старые образцы имеют другие характеристики. Также мы не стали упоминать редкие варианты CPU, например — одноядерный Celeron (бывают и такие даже сегодня, но это нетипичный вариант, который почти не представлен на рынке). Не следует выбирать процессоры исключительно по количеству ядер внутри них — есть и другие, более важные характеристики. Таблица лишь облегчит выбор многоядерного процессора, но конкретную модель (а их десятки в каждом классе) следует покупать только после тщательного ознакомления с их параметрами: частотой, тепловыделением, поколением, размером кэша и другими характеристиками.

Процессор Количество ядер Вычислительные потоки Типичная область применения
Atom 1-2 1-4 Маломощные компьютеры и нетбуки. Задача процессоров Atom — минимальное энергопотребление. Производительность у них минимальна.
Celeron 2 2 Самые дешёвые процессоры для настольных ПК и ноутбуков. Производительности достаточно для офисных задач, но это совсем не игровые CPU.
Pentium 2 2 Столь же недорогие и малопроизводительные процессоры Intel, как и Celeron. Отличный выбор для офисных компьютеров. Pentium оснащаются чуть более ёмким кэшем, и, иногда, слегка повышенными характеристиками по сравнению с Celeron
Core i3 2 4 Два достаточно мощных ядра, каждое из которых разделено на два виртуальных «процессора» (Hyper-Threading). Это уже довольно мощные CPU при не слишком высоких ценах. Хороший выбор для домашнего или мощного офисного компьютера без особой требовательности к производительности.
Core i5 4 4 Полноценные 4-ядерники Core i5 — довольно дорогие процессоры. Их производительности не хватает лишь в самых требовательных задачах.
Core i7 4-6 8-12 Самые мощные, но особенно дорогие процессоры Intel. Как правило, редко оказываются быстрее Core i5, и лишь в некоторых программах. Альтернатив им просто нет.

Краткий итог статьи «Вся правда о многоядерных процессорах». Вместо конспекта

  • Ядро процессора — его составная часть. Фактически, самостоятельный процессор внутри корпуса. Двухядерный процессор — два процессора внутри одного.
  • Многоядерность сравнима с количеством комнат внутри квартиры. Двухкомнатные лучше однокомнатных, но лишь при прочих равных характеристиках (расположение квартиры, состояние, площадь, высота потолков).
  • Утверждение о том, что чем больше ядер у процессора, тем он лучше — маркетинговая уловка, совершенно неверное правило. Квартиру ведь выбирают далеко не только по количеству комнат, но и по её расположению, ремонту и другим параметрам. Это же касается и нескольких ядер внутри процессора.
  • Существует «виртуальная» многоядерность — технология Hyper-Threading. Благодаря этой технологии, каждое «физическое» ядро разделяется на два «виртуальных». Получается, что у 2-ядерного процессора с Hyper-Threading лишь два настоящих ядра, но эти процессоры одновременно обрабатывают 4 вычислительных потока. Это действительно полезная «фишка», но 4-поточный процессор нельзя считать четырёхядерным.
  • Для настольных процессоров Intel: Celeron — 2 ядра и 2 потока. Pentium — 2 ядра, 2 потока. Core i3 — 2 ядра, 4 потока. Core i5 — 4 ядра, 4 потока. Core i7 — 4 ядра, 8 потоков. Ноутбучные (мобильные) CPU Intel имеют иное количество ядер/потоков.
  • Для мобильных компьютеров часто важнее экономичность в энергопотреблении (на практике — время работы от батареи), чем количество ядер.
  • Tutorial

Сколько я себя помню, всегда мечтала сделать процессор. Наконец, вчера я его сделала. Не бог весть что: 8 бит, RISC, текущая рабочая частота - 4 кГц, но он работает. Пока что в программе моделирования логических цепей, но все мы знаем: «сегодня - на модели, завтра - на деле!».

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

Двоичная логика

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

Представьте, что вы сидите в своей комнате, а ваш друг - на кухне. Вы кричите ему: «Друг, скажи, в коридоре горит свет?». Друг отвечает: «Да, горит!» или «Нет, не горит». Ваш друг - буфер между источником сигнала (лампочкой в коридоре) и приемником (вами). Более того, ваш друг - не какой-нибудь там обычный буфер, а буфер управляемый. Он был бы обычным буфером, если бы постоянно кричал: «Лампочка светится» или «Лампочка не светится».

Элемент «Не» - NOT

А теперь представьте, что ваш друг - шутник, который всегда говорит неправду. И если лампочка в коридоре светится, то он скажет вам «Нет, в коридоре совсем-совсем темно», а если не светится - то «Да, в коридоре свет горит». Если у вас есть такой друг на самом деле, значит, он воплощение элемента «Не».
Элемент «Или» - OR

Для объяснения сути элемента «Или» одной лампочки и одного друга, к сожалению, не хватит. Нужно две лампочки. Итак, у вас в коридоре две лампочки - торшер, к примеру, и люстра. Вы кричите: «Друг, скажи, хотя бы одна лампочка в коридоре светит?», и ваш друг отвечает «Да» или «Нет». Очевидно, что для ответа «Нет» все лампочки обязательно должны быть выключены.
Элемент «И» - AND

Та же самая квартира, вы, друг на кухне, торшер и люстра в коридоре. На ваш вопрос «В коридоре обе лампочки горят?» вы получаете ответ «Да» или «Нет». Поздравляю, теперь ваш друг - это элемент «И».
Элемент «Исключающее Или» - XOR

Повторим еще раз эксперимент для элемента «Или», но переформулируем свой вопрос к другу: «Друг, скажи, в коридоре только одна лампочка светит?». Честный друг ответит на такой вопрос «Да» только в том случае, если в коридоре действительно горит только одна лампочка.

Сумматоры

Четвертьсумматор

Четвертьсумматором называют элемент «Исключающее Или». Почему? Давайте разберемся.
Составим таблицу сложения для двух чисел в двоичной системе счисления:
0+0= 0
0+1= 1
1+0= 1
1+1= 10

Теперь запишем таблицу истинности элемента «Исключающее Или». Для этого обозначим светящуюся лампочку за 1, потухшую - за 0, и ответы друга «Да»/«Нет» как 1 и 0 соответственно.
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0

Очень похоже, не так ли? Таблица сложения и таблица истинности «Исключающего Или» совпадают полностью, кроме одного-единственного случая. И этот случай называется «Переполнение».

Полусумматор
При переполнении результат сложения уже не помещается в столько же разрядов, во сколько помещались слагаемые. Слагаемые - два однозначных числа (одна значащая цифра, понимаете?), а сумма - уже двузначное (две значащих цифры). Две цифры одной лампочкой («Светится»/«Не светится») уже не передать. Нужно две лампочки. Нужно - сделаем!

Кроме XOR, для сумматора нам потребуется элемент «И» (AND).
0 XOR 0 = 0 0 AND 0 = 0
0 XOR 1 = 1 0 AND 1 = 0
1 XOR 0 = 1 1 AND 0 = 0
1 XOR 1 = 0 1 AND 1 = 1

Тадам!
0+0= 00
0+1= 01
1+0= 01
1+1= 10

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

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

Более сложные элементы

Мультиплексор

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

Мультплексоры состоят обычно только из сочетаний элементов «И», «Или» и «Не». У одноразрядного мультиплексора один вход называется «выбор адреса», два входа с общим названием «входной сигнал» и один выход, который так и называется: «выходной сигнал».
Когда на «выбор адреса» подается 0, то «выходной сигнал» становится таким же, как первый «входной сигнал». Соответственно, когда на «выбор» подается 1, то «выходной сигнал» становится равным второму «входному сигналу».

Демультиплексор

А вот эта штучка работает с точностью до наоборот. На «выбор адреса» даем адрес, на «вход данных» даем данные, на выходе с номером «адрес» имеем данные со входа.
Счетчик

Для понимания работы счетчика вам опять понадобится ваш друг. Позовите его из кухни (надеюсь, он не сильно там скучал, и, главное, не съел всю вашу еду), и попросите делать вот что: пусть он запомнит число 0. Каждый раз, когда вы будете прикасаться к нему, он должен прибавить единицу к тому числу, которое помнит, сказать результат и запомнить его. Когда результат будет равен (допустим) 3, он должен выкрикнуть «Абракадабра!» и отвечать при следующем прикосновении, что сейчас он помнит число 0. Немного сложно? Смотрите:

Вы прикасаетесь к другу. Друг говорит «Один».
Вы прикасаетесь к другу. Друг говорит «Два».
Вы прикасаетесь к другу. Друг говорит «Три». Друг выкрикивает «Хабрахабр! ». Критическая атака! Вы временно парализованы и не можете двигаться.
Вы прикасаетесь к другу. Друг говорит «Ноль».

Ну, и так далее. Очень просто, верно?
Вы, конечно, поняли, что ваш друг сейчас - это счетчик. Прикосновение к другу можно считать «тактирующим сигналом» или, попросту говоря, сигналом продолжения счета. Крик «Абракадабра» показывает, что запомненное значение в счетчике - максимальное, и что при следующем тактирующем сигнале счетчик будет установлен в ноль. Есть два отличия двоичного счетчика от вашего друга. Первое: настоящий двоичный счетчик выдает запомненное значение в двоичном виде. Второе: он всегда делает только то, что вы ему говорите, и никогда не опускается до дурацких шуточек, способных нарушить работу всей процессорной системы.

Память

Триггер

Давайте продолжим издеваться над вашим несчастным (возможно, даже воображаемым) другом. Пусть теперь он запомнит число ноль. Когда вы касаетесь его левой руки, он должен запоминать число ноль, а когда правой - число один. При вопросе «Какое число ты помнишь?» друг должен всегда отвечать то число, которое запоминал - ноль или один.
Простейшей запоминающей ячейкой является RS-триггер («триггер» значит «переключатель»). RS-триггер может хранить в себе один бит данных («ноль»/«один»), и имеет два входа. Вход Set/Установка (совсем как левая рука вашего друга) записывает в триггер «один», а вход Reset/Сброс (соответственно, правая рука) - «ноль».
Регистр

Немного сложнее устроен регистр. Ваш друг превращается в регистр тогда, когда вы просите его что-нибудь запомнить, а потом говорите «Эй, напомни мне, что я говорил тебе запомнить?», и друг правильно отвечает.

Регистр обычно может хранить в себе чуть больше, чем один бит. У него обязательно есть вход данных, выход данных и вход разрешения записи. С выхода данных вы в любой момент можете прочитать то, что в этом регистре записано. На вход данных вы можете подавать те данные, которые хотите в этот регистр записать. Можете подавать данные до тех пор, пока не надоест. В регистр все равно ничего не запишется до тех пор, пока на вход разрешения записи не подать один, то есть «логическую единицу».

Сдвиговый регистр


Вы когда-нибудь стояли в очередях? Наверняка стояли. Значит, вы представляете, каково быть данными в сдвиговом регистре. Люди приходят и становятся в конец очереди. Первый человек в очереди заходит в кабинет к большой шишке. Тот, кто был вторым в очереди, становится первым, а тот, кто был третьим - теперь второй, и так далее. Очередь - это такой хитрый сдвиговый регистр, из которого «данные» (ну, то есть люди) могут убегать по делам, предварительно предупредив соседей по очереди. В настоящем сдвиговом регистре, разумеется, «данные» из очереди сбегать не могут.

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

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

Оперативная память
Если много-много триггеров объединить в регистры, а много-много регистров объединить в одной микросхеме, то получится микросхема оперативной памяти. У микросхемы памяти обычно есть вход адреса, двунаправленный вход данных (то есть в этот вход можно записывать, и с него же можно считывать) и вход разрешения записи. На вход адреса подаем какое-нибудь число, и это число выберет определенную ячейку памяти. После этого на входе/выходе данных мы можем прочитать то, что записано в эту самую ячейку.
Теперь мы одновременно подадим на вход/выход данных то, что хотим в эту ячейку записать, а на вход разрешения записи - «логическую единицу». Результат немного предсказуем, не так ли?

Процессор

BitBitJump
Процессоры иногда делят на CISC - те, которые умеют выполнять много разных команд, и RISC - те, которые умеют выполнять мало команд, но выполняют их хорошо. Одним прекрасным вечером мне подумалось: а было бы здорово, если бы можно было сделать полноценный процессор, который умеет выполнять всего одну команду. Вскоре я узнала, что существует целый класс однокомандных процессоров - OISC, чаще всего они используют команду Subleq (вычесть, и если меньше или равно нулю, то перейти) или Subeq (вычесть, и если равно нулю, то перейти). Изучая различные варианты OISC-процессоров, я нашла в сети сайт Олега Мазонки, который разработал простейший однокомандный язык BitBitJump. Единственная команда этого языка так и называется - BitBitJump (скопировать бит и перейти по адресу). Этот, безусловно эзотерический, язык является полным по Тьюрингу - то есть на нем можно реализовать любой компьютерный алгоритм.

Подробное описание BitBitJump и ассемблер для этого языка можно найти на сайте разработчика . Для описания алгоритма работы процессора достаточно знать следующее:
1. При включении процессора в регистрах PC, A и B записаны 0
2. Считываем ячейку памяти с адресом PC и сохраняем прочитанное в регистр A
3. Увеличиваем PC
4. Считываем ячейку памяти с адресом PC и сохраняем прочитанное в регистр B
5. Увеличиваем PC
6. Записываем в ячейку с адресом, записанным в регистре B, содержимое бита с адресом А.
7. Считываем ячейку памяти с адресом PC и сохраняем прочитанное в регистр B
8. Записываем в регистр PC содержимое регистра B
9. Переходим к пункту 2 нашего плана
10. PROFIT!!!

К сожалению, алгоритм бесконечный, и потому PROFIT достигнут не будет.

Собственно, схема
Схема строилась стихийно, поэтому правят бал в ней страх, ужас и кавардак. Тем не менее, она работает, и работает прилично. Чтобы включить процессор, нужно:
1. Ввести программу в ОЗУ
2. Нажать на включатель
3. Установить счетчик в положение 4 (это можно делать и аппаратно, но схема стала бы еще более громоздкой)
4. Включить тактовый генератор

Как видите, использованы один регистр, один сдвиговый регистр, одна микросхема ОЗУ, два двоичных счетчика, один демультиплексор (представленный компараторами), два мультиплексора и немного чистой логики.

Можете скачать схему в формате circ для программы Logisim , и поиграться.

Что дальше?
Во-первых, можно увеличить разрядность процессора - заменив 8-битные элементы на 16-битные.
Во-вторых, можно вынести ОЗУ из процессора, и добавить несложную схему, которая будет приостанавливать процессор, изменять ОЗУ и снова включать процессор. Такая схема будет выполнять функции простого контроллера ввода-вывода. Тогда можно будет сделать на базе этого процессора калькулятор, контроллер или еще какую-нибудь забавную бесполезную штуку.
В-третьих, можно воплотить всю эту схему в железе. Что я собираюсь сделать. Как только сделаю - обязательно расскажу и покажу. Добавить метки