Поскольку никто не придумал ответ, я думаю, что я понял это за это время.
Скалярный процессор - это обычный процессор, выполняющий скалярные инструкции, которые работают по одному числу за раз. Ничего особенного.
Векторный процессор на другой стороне использует векторные инструкции, которые должны работать с несколькими числами одновременно. Для этой цели предназначены специальные, более широкие регистры (например, 128-битный xmm * SSE, в который могут быть упакованы несколько значений, например, 4 32-битных целых числа; AVX-512 представляет 512-битные регистры, которые являются самыми широкими. мог найти). Векторные операции выполняются специальными модулями процессора, которые предназначены для этой цели. Типичным примером векторного процессора является графический процессор - он выполняет только векторные вычисления.
Суперскаляр - это термин, используемый для обозначения конкретной оптимизации, позволяющей скалярным инструкциям выполняться параллельно на разных "обычных" исполнительных блоках (например, нескольких ALU). Он делит инструкции на несколько "потоков" (я только что придумал этот термин), которые затем выполняются одновременно.
Так чем же они отличаются от своих векторных аналогов? Скалярные инструкции не предназначены для выполнения таким образом. Существует множество возможных опасностей, которые могут возникнуть и предотвратить полностью параллельное выполнение, например, данные или процедурные зависимости. В этом случае выполнение этой инструкции должно будет ждать удовлетворения ее зависимостей, приостанавливая выполнение этого "потока". Процессор должен позаботиться о всех зависимостях, чтобы избежать повреждения данных, поэтому следует соблюдать особую осторожность при оптимизации выполнения таким образом.
Он также не вводит никаких новых инструкций - все выглядит как обычная скалярная работа процессора. С другой стороны, векторные процессоры имеют специальные инструкции для векторных операций. Основное отличие состоит в том, что для векторных операций программист (или, вернее, компилятор) должен заботиться о данных, и поскольку нет одновременного вмешательства в разные регистры (помните, что все значения упакованы в широкие регистры), различные опасности избегать С другой стороны, суперскалярные процессоры делают все возможное, чтобы выяснить, какие инструкции не зависят друг от друга, и выполнять их одновременно.
Заметьте, как я никогда не говорил, что какие-либо категории являются взаимоисключающими? Это не так. Векторные блоки будут выполнять векторные инструкции, а процессор попытается найти лучший способ распараллеливания скалярных. Фактически, все современные процессоры поддерживают как векторные инструкции (SSE *, 3DNow !, AVX, ...), так и скалярные (x86), которые будут выполняться "суперскалярным" способом.