Pull to refresh

Comments 43

На практике HT увеличивает производительность примерно в 1.5 раза, а не в два (при условии хорошего параллелизма выполняемой задачи).
UFO just landed and posted this here
Ну, я смотрел на чистую математику, то есть рассчёт чистой вычислительной задаче с идеальным (по алгоритму) параллелизмом. Там получалось 75% снижение скорости каждого ядра, итого — 150% рост по сравнению с не-HT ядрами.

Алсо, а java на увеличение числа ядер «ведётся» в принципе? Некоторые вещи вообще плохо масштабируются.
UFO just landed and posted this here
iXBT — это такая мурзилка, которая пытается тестировать под Windows современные процессоры кодом, который был собран главным образом под i686 generic без всяких оптимизаций. Смешно.

This series of tests was again carried out on the Intel Core i7 970 «Gulftown» system with its six physical cores plus Hyper Threading to provide a total count of 12 threads.
image
image
image
UFO just landed and posted this here
UFO just landed and posted this here
Давайте обобщим: «чертовски здорово не думать, пусть оно само работает».
А не надо подобных обощений. Абстракции позволяют программисту сконцетрироваться на задаче, которую ему надо выполнить. И если это — задача, например, обработки данных, то ему определенно (по крайней мере, на первом этапе) незачем задумываться о том, что делает железо (понятно, что это очень важно для оптимизации в дальнейшем).
Художник же не задумывается, как работают белки в мышцах его рук, когда пишет картину. Тут то же самое.
Почему не надо? Если что-то работает само без усилий со стороны человека — что в этом плохого-то?
Я просто «услышал» в вашем комментарии саркастические интонации. :)
Плохое может быть в том, что медленно работает. Но тут уже что именно делать с этим — от задачи зависит.
Спасибо за статью. Очень интересно и доходчиво, жду продолжения.
Хорошая статья. Интересовался этим когда учился в институте.
Было приятно освежить свою память.
В документации которую я читал в прошлом, сброс конвеера был очень большой проблемой, и резко снижал производительность. Насколько вижу сейчас, вопрос решили довольно эффективно.
Кеш данных в i386? Я чего-то не знаю в этой жизни?
Кеш там был только в поздних вариантах от сторонних производителей, и не в 85-м…
Спасибо! Интересно было почитать.
офигенно! сразу всплыла в памяти ностальгия по оптимизации U V pipeline у первого пентиума.
«Сегодняшние процессоры (2008-2013) могут декодировать до четырёх инструкций за такт. » — правильный ответ 5.
А если учесть, что в L1I кеше хранятся уже декодированные инструкции, этот параметр становится уже не так актуален :-)
Так было в NetBurst (P4). В Core это убрали, и L1I хранит обычный x86 код.
И затем добавили в виде L0-кеша в Sandy Bridge, в который влезает 1536 декодированный инструкций.
Он не называется L0. :)
И с одной стороны часто весьма неплохо работает, снимает затык с декодера и поднимает настоящий IPC до 3-х. С другой стороны также много примеров когда его не хватает.
<зануда-mode>
Ещё один перевод, не оформленный как перевод.
</зануда-mode>
<капитан-mode>
Статья ведь из песочницы, первый пост.
При написании там нельзя выбрать что-либо
</капитан-mode>
Я бы вообще обязал в начале всех переводных статей писать хотя бы одно предложение наподобие:
«Перед вами перевод статьи из блога великого математика, программиста и инженера-микроархитектора интел Джона Джоновича об архитектуре x86-совместимых процессоров».
Это сразу бы снимало все комментарии и вопросы об авторстве, переводстве и проч. А то — то значок ищи, то ссылку, то еще что. А так — сразу, всё, и ясно.
Вовсе нет: значка в заголовке вполне достаточно, он уже вверху статьи и его не надо искать.
Точно не помню, но вроде бы в RSS его нет.
В RSS к заголовку добавляют "[Перевод]" в начале. Не заметить сложно.
Значит я просто невнимательный )
Нет, недостаточно. Потому что если материал добротный и хочется еще чего-нибудь почитать от автора(не переводчика). Сейчас я это решаю только вопросом в личку, но не всегда отвечают быстро как хотелось бы
Ссылки на оригинал внизу текста недостаточно? Непосредственно рядом со ссылкой на переводчика.
Дамсссс… Слона-то я и не заметил. Достаточно! ;)
Картинка «OOO ядро с Hyper-Threading.» не внушает доверия. По данным Agner Fog How good is hyperthreading? 2009-09-29 ( Intel Core i7 ):

The following resources are shared between two threads running in the same core:

Cache
Branch prediction resources
Instruction fetch and decoding
Execution units


Т.е. дублирование «Instruction Cache, Fetch buffer, Decode» — не физическое, как нарисовано на картинке, а логическое (временное разделение, в каждом такте декодируется инструкция либо из одного треда, либо из другого).

Intel: Intel® Hyper-Threading Technology: Your Questions Answered, 2012

How is it implemented, under the covers?
The entire pipeline of the Nehalem-based processor core is set up to recognize 2 separate streams of instructions (one for each hardware thread). Various events cause the pipeline to switch from decoding and dispatching one stream to decoding/dispatching the other stream. All the resources in the pipeline are either shared or duplicated amongst the 2 hardware threads.


Подробное описание 1го поколения HT (Pentium 4), DT Marr, Hyper-Threading Technology Architecture and Microarchitecture, Intel Technology Journal Q1, 2002:
IA-32 Instruction Decode

The decode logic takes instruction bytes from the
streaming buffers and decodes them into uops. When
both threads are decoding instructions simultaneously,
the streaming buffers alternate between threads so that
both threads share the same decoder logic. The decode
logic has to keep two copies of all the state needed to
decode IA-32 instructions for the two logical processors
even though it only decodes instructions for one logical
processor at a time.
In general, several instructions are
decoded for one logical processor before switching to
the other logical processor. The decision to do a coarser
level of granularity in switching between logical
processors was made in the interest of die size and to
reduce complexity.
Ссылаться на NetBurst (P4) скользкий путь. Это тупиковая ветвь микроархитектуры, с появлением Core (который потомок Pentium M) ушла в утиль. У того же Fog прекрасно написано как работает HT в новых микроархитектурах — что продублировано, что шарится поровну, а что шарится «competitively»
И вообще, перевод ужасен. Читайте оригиналы.
Буду рад конструктивной критике в лс.
Оригинальные регистры внутри процессора (AX, BX, CX, DX итд.) транслируются (или создаются псевдонимы) во внутренние, скрытые от программиста регистры.

Правильно ли я понимаю, что трансляция требуется из-за смены ядра CISC на RISC в Pentium Pro?
Нет, она нужна, чтобы явно «развязать» инструкции, использующие одни и те же регистры для хранения разных величин.
Ну, например,
MOV EAX,1
PUSH EAX
MOV EAX,2
ADD EBX,EAX

Последние две инструкции можно выполнять параллельно с первыми двумя (как раз OOO, беспорядочное исполнение), хотя обе пары инструкций формально используют один и тот же регистр EAX.
Конвейер в 486-ом вовсе не суперскалярный. Первый суперскаляр от Интел (не считая i960, который был несовместим с х86) — Pentium.
Большое спасибо за статью, — очень познавательно
Sign up to leave a comment.

Articles