Инструкции REP считаются векторными операциями? - PullRequest
2 голосов
/ 16 января 2020

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

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

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

Мои вопросы:

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

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

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

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

1 Ответ

5 голосов
/ 16 января 2020

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

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

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

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

...