7

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

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

2 ответа2

2

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

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

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


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

0

Поскольку никто не придумал ответ, я думаю, что я понял это за это время.

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

Векторный процессор на другой стороне использует векторные инструкции, которые должны работать с несколькими числами одновременно. Для этой цели предназначены специальные, более широкие регистры (например, 128-битный xmm * SSE, в который могут быть упакованы несколько значений, например, 4 32-битных целых числа; AVX-512 представляет 512-битные регистры, которые являются самыми широкими. мог найти). Векторные операции выполняются специальными модулями процессора, которые предназначены для этой цели. Типичным примером векторного процессора является графический процессор - он выполняет только векторные вычисления.

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

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

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


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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .