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

4942
Luke

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

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

7
Принимая во внимание отрицательные и отрицательные голоса, объяснение будет приветствоваться. Мне кажется, что этот вопрос является конкретным и достаточно ясным, и реальным вопросом, с которым я столкнулся в отношении программного или аппаратного обеспечения, в соответствии с указаниями. Luke 7 лет назад 1

2 ответа на вопрос

2
bwDraco

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

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

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


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

0
Luke

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

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

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

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

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

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


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

Великое объяснение. После полного понимания вашего объяснения мой вопрос заключается в том, что, если процесс поддерживает суперскалярные инструкции, как я могу убедиться, что моя программа на C использует суперскалярные инструкции, если я, например, выполняю умножение матриц. Что-то сделано компилятором, если поддерживается суперскалярная инструкция? Whoami 6 лет назад 0

Похожие вопросы