Повышение производительности компьютерных системРефераты >> Программирование и компьютеры >> Повышение производительности компьютерных систем
Последнее представляет собой опережающее исполнение команд, предсказание переходов и переупорядочение очереди выполнения инструкций. Кроме того, в Pentium широко используется нехарактерная для RISC технология переименования регистров для устранения ложной зависимости (в RISC просто слишком много регистров, чтобы в этом возникла существенная необходимость или оказалось недостаточно переупорядочения команд).
Конвейеров у Pentium Pro два. Однако это еще не означает, что Pentium способен выполнить две любые инструкции параллельно. Исходя из сложности команд CISC и того факта, что каждая инструкция может задействовать произвольное (читай: временами очень большое) число функциональных устройств микропроцессора, их все пришлось бы дублировать. В результате далеко не всякие инструкции выполняются параллельно.
Для борьбы с иррегулярными переходами в Pentium был использован значительно более сложный по сравнению с RISC-системами статически-динамический анализатор условия ветвления вместе с детектором вложенных конструкций (например, вложенных циклов). Но даже этот механизм не позволил достичь свыше 80 процентов угадываний.
Видно, что у RISC-микропроцессоров параллелизм выражен в большей степени, чем у CISC. Фиксированная (или близкая к ней) длина инструкций облегчила разработку многоконвейерных реализаций. Простые инструкции по отдельности задействовали лишь одно функциональное устройство. Например, типичная CISC-операция:
ADD AX, [SI+BX+66h]
Необходимо разобрать сложное поле адресации, чтобы понять, что это именно "SI+BX+66h", а не что-то другое; сложить (то есть вычислить этот результат), затем загрузить содержимое требуемой ячейки и, наконец, опять сложить его со значением регистра AX.
Следовательно, для выполнения инструкции за один такт требуется два арифметических устройства и один загрузчик. Но и в этом случае все действия должны выполняться последовательно. То есть ВЫЧИСЛЕНИЕ АДРЕСА, ЗАГРУЗКА, ВЫЧИСЛЕНИЕ РЕЗУЛЬТАТА. И никакие действия не могут быть спарены. Хоть умри, но потребуется три такта на выполнение, или хотя бы одно из устройств должно функционировать на удвоенной тактовой частоте.
RISC казались более приятным полигоном для проникновения параллельных вычислений в бытовые компьютеры. А в том, что будущее принадлежит параллельным архитектурам, уже никто не сомневался: линейные (последовательные) вычисления наткнулись на непреодолимые на сегодняшнем этапе физические и технические ограничения и к середине девяностых сохранились только там, где производительность была некритична (скажем, микрокалькуляторы, наручные часы, аппаратура определения номера и др.).
ВЫБОР ДРУГОГО ПУТИ
Производители CISC-архитектур недолго оставались в тупике. Они решили усилить параллелизм не в исполнении команд, а в обработке данных, введя поддержку векторных операций. Именно в этом и заключается широко известная MMX-технология.
Однако новая технология не давала никакого выигрыша на старых приложениях - не спасала даже перекомпиляция. Существенно повлиять на быстродействие могло только принципиальное изменение идеологии программирования: переход на векторные операции.
Несомненный плюс - явный параллелизм всего в одной инструкции там, где раньше их требовалась сотня. Использование MMX дает до 60 процентов прироста производительности приложений, манипулирующих графикой, звуком или аналогичными вычислениями и обработкой больших массивов чисел.
AMD не отстала от конкурентов и активно продвигает на рынок свой вариант реализации MMX - технологию 3DNow!, ориентированную на вычисления, связанные с трехмерной графикой.
Однако существовали многие ограничения на внедрение и распространение этих технологий. Прежде всего, векторные вычисления не типичны для платформы PC. Они требуют не столько поддержки со стороны компиляторов (компиляторам что - просто новый набор инструкций), сколько именно используемых программистами алгоритмов и языков. Ни Си, ни Паскаль, ни другие популярные языки не ориентированы на векторные операции.
Более того, не ориентированы на них и задачи, решаемые персональным компьютером. Большую часть времени процессор занят не наукоемкими вычислениями, а "работой по хозяйству": обмен с периферией, прорисовка окон, бесконечные вызовы функций и передача многочисленных параметров с постоянным контролем границ последних.
Во всех вышеперечисленных операциях операндами выступают именно скаляры, никак не векторы. Конечно, графические приложения ускоряют работу, но не в той степени, как специализированные графические процессоры. В целом польза от MMX оказалась настолько сомнительной, что сегодня только единичные приложения используют расширенный набор команд.
Гораздо большего можно было добиться, заставив компилятор располагать инструкции так, чтобы максимально увеличить возможность спаривания и распараллеливания вычислений. Иными словами, помогать процессору в оптимизации. Прежде всего, не использовать сложную адресацию и ограничить себя только командами, которые выполняются за один такт, при этом - не мешая выполнению других.
Но не приходим ли мы добровольно к RISC-концепции, вновь возвращаясь к началу на очередном витке прогресса? К тому же правила оптимизации даже у соседних моделей процессоров (например, Pentium 75, Pentium 100, Pentium 166 MMX, Pentium II) отличаются очень и очень. Настолько, что код, оптимизированный под один процессор, может исполняться медленнее неоптимизированного - на другом.
Воистину, "мартышкин труд". Это что же, при появлении нового микропроцессора перекомпилировать все программное обеспечение заново? Поставлять покупателю исходные тексты с компилятором? Или пытаться в ущерб производительности найти компромиссный вариант? Причем любое решение было бы надругательством над самой концепцией суперскалярной архитектуры: параллелизм распознает сам процессор, и ему не требуется помощи со стороны компилятора.
Вот если бы был волшебный способ не подстраиваться под логику работы процессора, а явно указать ему связи между командами . Именно так и возникла архитектура VLIW.
VLIW (процессоры с длинным командным словом)
Параллелизм был свойствен еще первым ламповым компьютерам. Тогда это был единственный путь увеличения производительности. Потом, с совершенствованием технологий, о нем то забывали, то, когда вставали технические препятствия наращивания производительности, вспоминали.
Почему? Да потому, что параллелизм - это . как бы помягче выразиться? Нет, не плохо, скорее всего - излишне сложно и непривычно, и сопряжено с трудностями в разработке компиляторов.
Однако на рубеже второго тысячелетия компьютерная индустрия завела себя в тупик. Считается, что с поправкой на ионный ветер и длину волны излучателя, который рисует матрицу будущего кристалла, вкупе с некоторыми другими эффектами, невозможно (читай: технически неоправданно сложно) перейти порог 0,1 мкм в ближайшие десять лет, а выпускаемые сейчас по 0,18-мкм технологии микропроцессоры его уже почти достигли. (Texas Instruments уже разработала технологический процесс с проектными нормами 0,07 мкм. - Г.Б.)