Jump to content

Стандартное портативное промежуточное представление

(Перенаправлено со СПИР-V )
SPIR-V
Разработчик(и) Хронос Групп
Первоначальный выпуск 2015
Стабильная версия
СПИР-В 1.6 / 16 декабря 2021 г .; 2 года назад ( 16.12.2021 )
Операционная система Кросс-платформенный
Платформа Кросс-платформенный
Тип Средний язык
Веб-сайт www .chronos .org /регистрация /SPIR-V

Стандартное переносимое промежуточное представление ( SPIR ) — это промежуточный язык для параллельных вычислений и графики, разработанный Khronos Group . Он используется в нескольких средах выполнения, включая Vulkan графический API и вычислительный API OpenCL , для представления шейдера или ядра . Он также используется в качестве языка обмена для кросс-компиляции. [1] [2]

SPIR-V — это новая версия SPIR, представленная в 2015 году группой Khronos и с тех пор заменившая исходный SPIR, представленный в 2012 году.

Целью SPIR-V является естественное представление примитивов, необходимых для вычислений и графики; отделить язык высокого уровня от интерфейса вычислений и графических драйверов; быть формой распространения или распространять полностью скомпилированные двоичные файлы; быть полностью автономной спецификацией; и поддерживать несколько API. Он также используется в качестве промежуточной цели для инструментов кросс-компиляции.

Например, SPIR-V позволяет API Vulkan использовать любой язык шейдеров , включая GLSL и HLSL . [3] [4] SPIR-V можно декомпилировать в несколько языков шейдеров ( GLSL , GLSL ES, MSL , HLSL ) с помощью SPIRV-Cross, так что эти языки можно конвертировать между собой. [5] и/или от них Он также имеет пути к WebGPU , OpenCL , SYCL , C++ и Rust .


На целевых платформах использование SPIR-V устраняет необходимость встраивания исходного компилятора языка высокого уровня в драйверы устройств, что снижает сложность драйверов. [2]

SPIR был первоначально представлен в 2011 году, а SPIR-V — в 2015 году.

СПИР и СПИР-В
СПИР 1.2 СПИР 2.0 SPIR-V 1.X
LLVM-взаимодействие ЛЛВМ ИР версия 3.2 ЛЛВМ ИР версия 3.4
100% Хронос определен
Преобразование туда и обратно без потерь
Вычисление конструкций Метаданные/Внутренние характеристики Метаданные/Внутренние характеристики Родной
Графические конструкции Нет Нет Родной
Поддерживаемый язык и поддерживаемые функции ОпенCL С 1.2
ОпенCL С 1.2
ОпенCL С 2.0
OpenCL C 1.2/2.X
OpenCL С++
ГЛСЛ
Прием OpenCL Расширение OpenCL 1.2 Расширение OpenCL 2.0 OpenCL 2.1/2.2 ядро
Прием графического API
Вулкан 1.X
OpenGL 4.6 ядро

Версии на базе LLVM

[ редактировать ]

SPIR до выпуска SPIR-V 2015 года был основан на промежуточном представлении LLVM . Предварительная спецификация SPIR 1.0 была анонсирована в 2012 году. [6] 22 июля 2013 года на выставке SIGGRAPH 2013 была анонсирована предварительная спецификация SPIR 1.2 . [7] Окончательная спецификация SPIR 1.2 была представлена ​​на выставке HiPEAC 2014 21 января 2014 года. [8] 11 августа 2014 года на конференции SIGGRAPH 2014 была представлена ​​предварительная спецификация SPIR 2.0 . [9] SPIR-V не использует LLVM. [2]

SPIR-V 1.0 — это новая версия SPIR, анонсированная в марте 2015 года. [10] и выпущен 16 ноября 2015 г. [11] Семейство SPIR теперь включает настоящий межAPI-стандарт, полностью определенный Khronos, со встроенной поддержкой функций шейдеров и ядра.

Отдельная программа Khronos Group позволяет осуществлять конвертацию с LLVM IR. [12]

Поддержка приема SPIR-V включена в базовую спецификацию OpenCL 2.1, Vulkan API и OpenGL версии 4.6.

Релизы СПИР-V
Дата Версия Примечания
18 апреля 2016 г. 1.1 Выпущен на IWOCL 2016 вместе с Provisional OpenCL 2.2. В SPIR-V 1.1 добавлена ​​поддержка OpenCL C++, режимов выполнения функций инициализатора/финализатора, именованных барьеров, выполнения подгрупп, каналов области программы и хранилища каналов. [13]
16 мая 2017 г. 1.2 Выпущен на IWOCL 2017 вместе с OpenCL 2.2. В SPIR-V 1.2 добавлена ​​поддержка специализации ключевых параметров настройки во время выполнения в OpenCL 2.2. [14]
7 марта 2018 г. 1.3 Выпущен вместе с Vulkan 1.1 . SPIR-V 1.3 Добавлена ​​поддержка операций подгрупп и улучшена оптимизация компилятора. [15]
7 мая 2019 г. 1.4 [1]
13 сентября 2020 г. 1.5 [1]
16 декабря 2021 г. 1.6 [1]

SPIR-V — это промежуточный язык высокого уровня, обмен которым осуществляется в двоичной форме. Функции представлены графом потока управления базовых блоков с использованием статической формы однократного назначения (SSA). Структуры данных сохраняют иерархическое представление высокого уровня. Он не имеет потерь, как предыдущие байт-коды или промежуточные представления, подобные виртуальным машинам, используемые для графических шейдеров. Это позволяет приблизиться к оптимальной производительности на целевых устройствах. [16]

Расширяемость

[ редактировать ]

SPIR-V можно расширить, написав расширения для добавления семантики или зарезервировав диапазоны значений токенов для использования стороной. Поставщики могут самостоятельно добавлять в SPIR-V нужную семантику. [17] Дополнительные наборы расширенных наборов команд могут быть предоставлены в отдельных спецификациях. Несколько наборов можно без проблем импортировать, поскольку расширенные инструкции используются путем указания идентификатора набора и инструкции в наборе. [17]

К отладчикам относятся RenderDoc , SwiftShader и Amber. [18]

Графические шейдеры используют структурированный поток управления в SPIR-V, чтобы указать, как вложены потоки управления. Это помогает определить расхождение и повторную сходимость потока управления в средах параллельного выполнения. [19] Специализация уменьшает количество вариантов шейдера, которые необходимо распространять. [20]

Валидация

[ редактировать ]

В спецификации SPIR-V указаны правила, которым необходимо следовать, чтобы иметь действительный модуль SPIR-V. Это позволяет проводить автономную проверку. Драйверы не обязаны обрабатывать недействительные модули SPIR-V. При тестировании тестирование на соответствие проверяет, что драйверы ведут себя правильно при использовании действительного SPIR-V, а валидаторы проверяют, что внешние интерфейсы правильно генерируют SPIR-V. [21]

Связывание

[ редактировать ]

SPIR-V может выражать вызовы функций в другом модуле компиляции. Стандартная версия SPIR-V использует эту функцию для вычислительных ядер OpenCL, но не для этапов шейдеров, которые графические API хотят полностью связать в один модуль SPIR-V. [22] Доступны расширения, позволяющие инструментам временно использовать частично связанные шейдеры, а также ядра. [23]

Возможности

[ редактировать ]

Модуль SPIR-V используется клиентским API для поддержки функций этого модуля, которые классифицируются по возможностям и объявляются на ранней стадии модуля. Валидатор может подтвердить, что модуль использует только заявленные возможности, а клиентский API может отклонить модули, в которых заявлены неподдерживаемые возможности. [24]

SPIR-V для кросс-компиляции GLSL

[ редактировать ]

SPIR-V использовался для работы с несколькими версиями языков исходного уровня. Например, несколько версий языка шейдеров OpenGL (GLSL) требуют распространения нескольких версий шейдеров из-за реализаций, привязанных к конкретной более старой версии GLSL, например, для WebGL 1.0 и реализации Apple OpenGL. Одним из примечательных вариантов использования SPIR-V является его возможность использовать в качестве формата обмена между версиями GLSL с использованием инструментов, поддерживаемых Khronos Group, для компиляции GLSL в SPIR-V. glslangValidator, [25] optimizing SPIR-V spirv-opt, [21] и кросс-компиляция в SPIR-V для различных целей GLSL. spirv-cross. [26]

Однако как формат SPIR-V имеет некоторые ограничения для кросс-компиляции, включая требование, чтобы каждый модуль SPIR-V имел хотя бы один символ точки входа. Это не позволяет легко использовать формат для отдельной компиляции, где сложные шейдеры могут быть собраны с помощью серии шагов частичной компиляции, за которыми следует этап компоновки. Это противоречит заявленным целям некоторых инструментов SPIR-V, таких как spirv-link, [21] целью которого является обеспечение полной функциональности связывания двоичного кода SPIR-V.

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б с д «Реестр Khronos SPIR-V — The Khronos Group Inc» . www.khronos.org . Проверено 16 января 2024 г.
  2. ^ Перейти обратно: а б с Терцо, Оливер; Джемаме, Карим; Сционти, Альберт; Песуэла, Клара (10 сентября 2019 г.). Гетерогенные вычислительные архитектуры: проблемы и перспективы . ЦРК Пресс. ISBN  9780429680038 . Проверено 24 июня 2022 г.
  3. ^ «Шейдерные модули» . Учебник по Вулкану .
  4. ^ «HLSL как первоклассный язык шейдинга Vulkan» . Группа «Хронос» . 15 января 2020 г.
  5. ^ KhronosGroup/SPIRV-Cross , The Khronos Group, 2019-09-06 , retrieved 2019-09-08
  6. ^ Ларабель, Майкл (12 сентября 2012 г.). «Khronos SPIR для OpenCL обеспечивает двоичную совместимость» . Фороникс . Проверено 25 июля 2015 г.
  7. ^ Смит, Райан (22 июля 2013 г.). «Хронос @ SIGGRAPH 2013: анонсированы OpenGL 4.4, OpenCL 2.0 и OpenCL 1.2 SPIR» . Анандтех . Проверено 5 апреля 2015 г.
  8. ^ «Khronos выпускает спецификацию SPIR 1.2 для переносимого кодирования программ устройств OpenCL» . Группа «Хронос» . 20 января 2014 г. Проверено 5 августа 2019 г.
  9. ^ Смит, Райан (11 августа 2014 г.). «Хронос анонсирует OpenCL SPIR 2.0» . Анандтех . Проверено 5 апреля 2015 г.
  10. ^ Паркерсон, Стюарт (4 марта 2015 г.). «Khronos Group представляет новый API-интерфейс аппаратного драйвера Vulkan и промежуточный язык SPIR-V, общий для Vulkan и OpenCL 2.1» . Журнал для разработчиков приложений . Проверено 5 апреля 2015 г.
  11. ^ «Khronos выпускает спецификации OpenCL 2.1 и SPIR-V 1.0 для гетерогенного параллельного программирования» . www.Хронос.орг . 16 ноября 2015 года . Проверено 16 ноября 2015 г.
  12. ^ «SPIRV-LLVM-Translator: инструмент и библиотека для двунаправленной трансляции между SPIR-V и LLVM IR» . Гитхаб . Группа «Хронос».
  13. ^ Треветт, Нил (18 апреля 2016 г.). «OpenCL: Состояние страны (IWOCL 2016)» (PDF) . Группа компаний «Хронос» .
  14. ^ Треветт, Нил (16 мая 2017 г.). «Состояние страны по OpenCL (IWOCL 2017)» (PDF) . ИВОКЛ .
  15. ^ «SPIR — промежуточный язык открытого стандарта для параллельных вычислений и графики» . Группа «Хронос» . 20 января 2014 г. Проверено 5 августа 2019 г.
  16. ^ Кессенич, Джон. «Введение в SPIR-V» (PDF) . Хронос . Проверено 25 июля 2015 г.
  17. ^ Перейти обратно: а б «СПИРВ-Гид» . github.com . Проверено 24 июня 2022 г.
  18. ^ «Среда тестирования шейдеров с несколькими API с открытым исходным кодом Google 'Amber'» . phoronix.com . Проверено 24 июня 2022 г.
  19. ^ «Спецификация SPIR-V: структурированный поток управления» . khronos.org . Проверено 24 июня 2022 г.
  20. ^ «Константы специализации» . veldrid.dev . Проверено 24 июня 2022 г.
  21. ^ Перейти обратно: а б с «Инструменты СПИР-В» . www.github.com . Проверено 01 октября 2020 г.
  22. ^ «Основы шейдеров» . Informit.com . Проверено 24 июня 2022 г.
  23. ^ «Расширение SPIR-V для Visual Studio» . saschawillems.de . Проверено 24 июня 2022 г.
  24. ^ «Спецификация SPIR-V: языковые возможности» . khronos.org . Проверено 24 июня 2022 г.
  25. ^ «Справочный компилятор OpenGL/OpenGL ES» . www.khronos.org . Проверено 01 октября 2020 г.
  26. ^ «Кросс СПИР-В» . www.github.com . Проверено 01 октября 2020 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: cb06dd27ca3825d447b994129446b96d__1722775680
URL1:https://arc.ask3.ru/arc/aa/cb/6d/cb06dd27ca3825d447b994129446b96d.html
Заголовок, (Title) документа по адресу, URL1:
Standard Portable Intermediate Representation - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)