Visual Instruction Set


Visual Instruction Set (VIS) — система команд SIMD для микропроцессоров SPARC V9, разработанная компанией Sun Microsystems.

Существует четыре версии VIS: VIS 1, VIS 2, VIS 2+ и VIS 3.

VIS 1 была представлена в 1994 и впервые введена в использование корпорацией Sun на микропроцессорах UltraSPARC (1995) и корпорацией Fujitsu на микропроцессорах SPARC64 GP (2000).

VIS 2 впервые использовалась на UltraSPARC III. Все последующие процессоры UltraSPARC и SPARC64 также поддерживали этот стандарт.

VIS 3 впервые была реализована в SPARC T4.

VIS повторно использует существующие 64-битные регистры с плавающей точкой для хранения 8, 16 и 32-битных целочисленных значений. В этом смысле VIS более похожа на MMX, чем на другие SIMD-архитектуры, такие как SSE/SSE2/AltiVec. Однако MMX от Intel разделяет только 8 регистров с устройством с плавающей точкой, тогда как процессоры SPARC обычно имеют значительно большее количество регистров (одна из характеристик RISC архитектуры).

VIS строго следует главной идее RISC: использовать краткие и эффективные команды. Этот принцип сильно отличается от принципа работы сравнимых расширений CISC-процессоров, таких как MMX/SSE/SSE2/SSE3/SSE4/3DNow!. В целом, принцип RISC может сделать программу более простой и эффективной.

Однако Intel и AMD могут легко добавлять новые расширения к процессорам x86/x64, тогда как Sun должна быть очень осторожной при добавлении новых расширений, что может считаться одним из преимуществ CISC над RISC. Иногда программистам приходится использовать несколько инструкций VIS для описания одной операции, которая может быть записана одной инструкцией в MMX/SSE, однако следует иметь в виду, что меньшее количество инструкций не обязательно влечёт за собой лучшую производительность.

Существует четыре способа использования VIS в коде:

  • Использовать опцию -mvis в GCC
  • Использовать ассемблер внутри программы на высоко-уровневом языке программирования (Си, Ада)
  • Использовать VSDK (VIS Software Developer’s Kit)
  • Использовать мультимедийную библиотеку mediaLib, имеющую интерфейсы к функциям на Си.