Инструкции REP считаются векторными операциями?

Я пытаюсь понять понятия SIMD и векторных инструкций. Если я правильно понимаю:

  • Векторные инструкции - это команды, которые работают с одномерным массивом данных (= вектор), в отличие от скалярных команд, которые работают с одним элементом данных.
  • Инструкции SIMD на самом деле являются инструкциями с одной инструкцией и несколькими данными, которые выглядят так же, как векторные инструкции ... Я действительно не знаю разницы, и если таковые имеются.

Команды REP работают с массивом данных, поэтому кажется, что они на самом деле являются SIMD / векторными командами. Я не видел ни одной статьи, описывающей их как векторные инструкции, и я знаю, что инструкции REP не являются частью SIMD-расширений x86.

Мои вопросы:

  1. Считается ли REP векторной операцией?
  2. REP считается SIMD инструкцией?
  3. Есть ли реальная разница между вектором и SIMD инструкциями?

Быстрый поиск в Google моего третьего вопроса привел меня к этому:

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

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

Всего 1 ответ


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

Исторически «вектор» является более старым термином, а «векторные» команды рассматриваются как отдельные инструкции, которые выполняют некоторую операцию над последовательностью элементов путем конвейерной передачи операций через один функциональный блок. «Единый функциональный блок» не имеет ничего общего с векторизацией как концепцией - именно так были реализованы векторные машины, когда транзисторы были очень дорогими (с середины 1960-х до середины 1990-х). Более поздние «векторные» архитектуры используют одну векторную инструкцию для конвейерной работы между несколькими функциональными блоками. Например, процессор NEC SX-Aurora TSUBASA имеет 256-элементные векторные регистры и 32 векторных функциональных блока, причем каждый 256-элементный вектор отправляет 8 элементов в каждый векторный функциональный блок.

Я не знаю, когда термин «SIMD» был впервые использован, но я не помню, чтобы он встречался в обычном использовании до середины 1990-х годов, когда инструкции «SIMD» были впервые разработаны как средство для выполнения нескольких параллельных операций на небольших размеры данных в пределах существующей ширины регистра. Например, набор инструкций Intel MMX (1997) позволяет процессору выполнять независимые 8/16/32-битные операции над содержимым 64-битного регистра. Более поздние наборы команд SIMD (SSE и т. Д.) Предоставляют новые регистры, которые шире любого поддерживаемого типа данных, что позволяет работать с независимыми полями шириной до 64 бит в регистре. Конструкция набора команд поддерживает одновременное выполнение операций по всей ширине регистра SIMD, но это не требуется. Например, AMD выпустила несколько поколений процессоров, которые поддерживают инструкции для более широких регистров SIMD, чем параллельность функциональных блоков. Например, процессоры EPYC первого поколения AMD поддерживают 256-битные инструкции SIMD, но они распределяются по функциональным блокам шириной 128 бит в течение двух последовательных циклов. Масштабируемые векторные расширения ARM дополнительно разделяют понятия ширины вектора и количества параллельных функциональных блоков.

Инструкции «REP» в архитектуре x86 предоставляют ограниченную возможность обеспечения вектороподобных функций для команд «строковые инструкции» и «вход / выход». Они не являются общим механизмом, и я уверен, что многие разработчики процессоров Intel хотели бы, чтобы их исключили из набора инструкций. Некоторые интересные исторические заметки содержатся в обсуждении на форуме по адресу https://software.intel.com/en-us/forums/intel-fortran-compiler/topic/275765.


Есть идеи?

10000