В чем разница между суперскаляром и векторным процессором?

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

кроме того, если я правильно понял, как скалярные, так и векторные инструкции присутствуют в современном процессоре, поэтому я полагаю, что эти два не являются взаимоисключающими (скалярные инструкции, такие как mov или add, будут выполняться суперскалярно и, например, будет вычисляться точечное произведение вектор-ли каким-то особым образом черной магии)?

19
задан Luke
24.12.2022 21:50 Количество просмотров материала 2779
Распечатать страницу

2 ответа

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

на векторный процессор содержит инструкции, специально предназначенные для работы с целыми группами нескольких значений данных одновременно (называется массивы или векторы). Большинств самомоднейшие высокопроизводительные обработчики содержат некоторую форму возможности обработки вектора; например;SSE ADDPS инструкция, доступная в большинстве x86 процессоров вычисляет сумму двух векторов каждый содержит четыре значения с одной точностью. Компилятор, разработчик и поддержка операционной системы обычно требуются для использования векторных инструкций, и не каждый процессор, даже в текущих поколениях, поддерживает самые передовые векторные инструкции (например, процессоры Intel Celeron и Pentium, даже с Кабы Озеро, не поддерживают AVX).

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


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

2
отвечен bwDraco 2022-12-26 05:38

Так как никто не пришел с ответом, я думаю, что понял это в то же время.

скалярный процессор - это обычный процессор, выполняющий скалярные команды, которые работают над одним номером за раз. Ничего особенного.

векторный процессор С другой стороны использует векторные инструкции, которые должны работать на несколько номеров одновременно. Существуют специальные, более широкие регистры, предназначенные для этой цели (например, 128-битный xmm*, в который могут быть упакованы несколько значений, например, 4 32-битных целых числа; AVX-512 вводит 512-битные регистры, которые являются самыми широкими, которые я мог найти). Vector ops сделаны специальными блоками в обработчике которые сделаны для той цели. Типичный пример векторного процессора будет ГПУ - это не только векторных вычислений.

Superscalar - термин, используемый для обозначения конкретной оптимизации, позволяющей скалярным инструкциям выполняться параллельно, на различные" обычные " исполнительные единицы (например, несколько Alu). Она делится на несколько "потоков" (я только что сделал этот термин придумал), которые выполняются одновременно.

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

Он также не вводит никаких новых инструкций-все выглядит просто нормальной работой скалярного процессора. С другой стороны, векторные процессоры имеют специальные инструкции для векторных операций. Главное отличие состоит в том, что для векторных ops программист (или, скорее, компилятор) должен позаботиться о данных, и поскольку нет никакого вмешательства в разные регистры одновременно (помните, что все значения упакованы в широкие регистры), различные опасности избегаются. С другой стороны, суперскалярных процессоров делают все возможное, чтобы выяснить, какие инструкции являются независимыми друг от друга и выполнять их одновременно.


обратите внимание, как я никогда не говорил, что любая из категорий взаимоисключающие? Это не так. Векторные единицы измерения будут выполнять векторные инструкции, а процессор попытается найти наилучший способ распараллеливания скалярных. Фактически, все современные процессоры поддерживают обе векторные инструкции (SSE*, 3DNow!, AVX,...) и скалярных (х86), которая будет выполнена в "суперскалярной" способом.

0
отвечен Luke 2022-12-26 07:55

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх