- •9.5. Суперскалярная обработка команд
- •9.5.1. Внеочередное завершение команд
- •9.5.2. Завершение выполнения
- •9.5.3. Операция диспетчеризации
- •9.6 Семейство процессоров Intel ia-32
- •9.6.1. Сегментация памяти для семейства процессоров ia-32
- •9.6.2. 16-Разрядный режим
- •9.6.3. Процессоры 80386 и 80486
- •9.6.4. Процессор Pentium
- •9.6.5. Процессор Pentium Pro
- •9.6.6. Процессоры Pentium II и Pentium III
- •9.6.7. Процессор Pentium 4
- •9.6.8. Технология Hyper-Threading от Intel Производительности всегда мало
- •Hyper-Threading
- •Углубляемся в технологию
- •Максимум эффективности от Hyper-Threading
- •9.6.9. Архитектура ia-64
- •Описание ia-64
- •Архитектура е2к
9.6.7. Процессор Pentium 4
Процессор Pentium 4 выпущен в 2000 году и имеет тактовую частоту от 1,3 до 1,5 ГГц. Он поддерживает весь набор команд IA-32, включая команды ММХ и SSE. Расширенный набор команд SSE (SSE2) позволяет обрабатывать по два упакованных 64-разрядных числа с плавающей запятой или по два упакованных 64-разрядных целых числа, хранящихся в 12-разрядных регистрах ХММ. Такие длинные целые числа удобны для шифрования и дешифрирования — операций, выполняемых в приложениях с функциями защиты данных. Повышение тактовой частоты достигается в значительной мере за счет использования длинных конвейеров с короткими ступенями (теперь их количество увеличено вдвое по сравнению с Pentium III, где их было всего 10), а также за счет усовершенствованных структуры и технологий производства схем.
Процессор содержит раздельные кэши первого уровня для команд и данных. Кэш данных имеет объем 8 Кбайт, 4-канальную множественно-ассоциативную структуру и состоит из блоков по 64 байта. Кэш команд предназначен для хранения декодированных сегментов потока команд, которые могут включать одну или несколько ветвей исходной программы. В случае повторения сегментов выполнение программы протекает быстрее, но требуется проверка, действительно ли каждый раз осуществляется переход к одной и той же ветви программы. Эта стратегия называется кэшированием с отслеживанием (trace cache). Декодированные команды представлены как микрооперации. Каждая команда IA-32 способна определять до восьми микроопераций. В кэше с отслеживанием может находиться множество сегментов потока команд, содержащих до 12 тысяч микроопераций.
Интегрированный в микросхему кэш второго уровня объемом 256 Кбайт состоит из 128-байтовых блоков и обладает 8-канальной множественно-ассоциативной структурой. Соединение между кэшами L1 и L2 обеспечивает пересылку данных со скоростью 48 Гбайт/с, тогда как в процессоре Pentium III этот параметр равен 16 Гбайт/с.
Системная шина процессора Pentium 4 тоже гораздо быстрее шины процессора Pentium III. Она имеет ширину 64 разряда и работает на частоте 400 МГц. Скорость пересылки данных по этой шине составляет 3,2 Гбайт/с, а у процессора Pentium III - 1 Гбайт/с.
9.6.8. Технология Hyper-Threading от Intel Производительности всегда мало
Об эффективности всегда много говорят. И не только в корпоративном окружении, в каких-то серьезных проектах, но и в повседневной жизни. Говорят, homo sapiens лишь частично задействуют возможности своего мозга. То же самое относится и к процессорам современных компьютеров.
Взять, к примеру, Pentium 4. Процессор обладает, в общей сложности, семью исполнительными устройствами, два из которых могут работать с удвоенной скоростью – две операции (микрооперации) за такт. Но в любом случае, вы бы не нашли программы, которая смогла бы заполнить инструкциями все эти устройства. Обычные программы обходятся несложными целочисленными вычислениями, да несколькими операциями загрузки и хранения данных, а операции с плавающей точкой остаются в стороне. Другие же программы главным образом загружают работой устройства для операций с плавающей точкой.
Чтобы проиллюстрировать ситуацию, давайте вообразим себе процессор с тремя исполнительными устройствами: арифметико-логическим (целочисленным – ALU), устройством для работы с плавающей точкой (FPU), и устройством загрузки/хранения (для записи и чтения данных из памяти). Кроме того, предположим, что наш процессор может выполнять любую операцию за один такт и может распределять операции по всем трем устройствам одновременно. Давайте представим, что к этому процессору на выполнение отправляется поток из следующих инструкций:
1+1 10+1 Сохранить предыдущий результат
Рисунок 9.6.3 иллюстрирует уровень загруженности исполнительных устройств (белым цветом обозначается незадействованное устройство, ярко-зеленым (серым) – работающее устройство):
ALU |
|
|
|
FPU |
|
|
|
Load/ Store |
|
|
|
|
1 |
2 |
3 |
|
Clock Cycle |
Рис. 9.6.4.
Итак, вы видите, что в каждый такт используется только 33% всех исполнительных устройств. В этот раз FPU остается вообще незадействованным. В соответствии с данными Intel, большинство программ для IA-32 x86 используют не более 35% исполнительных устройств процессора Pentium 4.
Представим себе ещё один поток, отправим его на выполнение процессору. На этот раз он будет состоять из операций загрузки данных, сложения и сохранения данных, зеленый (серый) цвет. Они будут выполняться в следующем порядке:
ALU |
|
|
|
FPU |
|
|
|
Load/ Store |
|
|
|
|
1 |
2 |
3 |
|
Clock Cycle |
Рис. 9.6.5.
И снова загруженность исполнительных устройств составляет лишь на 33%.
Хорошим выходом из данной ситуации будет параллелизм на уровне инструкций (Instruction Level Parallelism - ILP). В этом случае одновременно выполняются сразу нескольких инструкций, поскольку процессор способен заполнять сразу несколько параллельных исполнительных устройств. К сожалению, большинство x86 программ не приспособлены к ILP в должной степени. Поэтому приходится изыскивать другие способы увеличения производительности. Так, например, если бы в системе использовалось сразу два процессора, то можно было бы одновременно выполнять сразу два потока. Такое решение называется параллелизмом на уровне потоков (thread-level parallelism, TLP). К слову сказать, такое решение достаточно дорогое.
Какие же ещё существуют способы увеличения исполнительной мощи современных процессоров архитектуры x86?