표준 휴대용 중간 표현
Standard Portable Intermediate Representation![]() | |
개발자 | 크로노스 그룹 |
---|---|
초기 릴리즈 | 2014년 1월; | 전
안정적 해제 | SPIR-V 1.6 / 2021년 12월 16일; 전 |
운영 체제 | 크로스 플랫폼 |
플랫폼 | 크로스 플랫폼 |
유형 | 중간 언어 |
웹사이트 | www |
SIR(Standard Portable Intermediate Presentation)은 Khronos Group이 OpenCL과 함께 사용하기 위해 개발한 병렬 컴퓨팅 및 그래픽용 중간 언어다. SIR는 2015년 3월 SIR-V로 다시 작성되었다.
목적
OpenCL은 JIT(Just-In-Time 컴파일)를 사용하므로 개발자는 기기별 사전 컴파일된 바이너리를 배포할 수 있고, 또는 지적재산권 보호 욕구에 의해 제한되는 관련 소스 코드를 배포할 수 있다는 두 가지 소프트웨어 배포 패턴 중 하나가 필요하다.SPIR은 OpenCL 스택 내에서 장치 독립 이진 파일을 생성하고 배포할 수 있도록 한다.[1]또한 컴파일의 오프라인 특성은 새로운 C++ 기능의 사용과 같은 보다 유연한 언어 개선을 가능하게 한다.[2]
더 중요한 것은, SIR-V는 벌칸 API가 GLSL과 HLSL을 포함한 어떤 음영 언어도 사용할 수 있도록 한다.[3][4] SIR-V는 SIRV-Cross를 사용하여 여러 음영 언어(GLSL, GLSL ES, MSL, HLSL)로 컴파일할 수 있다.[5]WebGPU의 텍스트 음영 언어는 SPIR-V 위에 얇은 레이어로 설계되었다.[6]
버전
SPIR은 원래 2011년에 도입되었고, 2015년에 SIR-V가 도입되었다.
SPIR 1.2 | SPIR 2.0 | SPIR-V 1.X | |
---|---|---|---|
LLVM 상호 작용 | LLVM IR 버전 3.2 | LLVM IR 버전 3.4 |
|
계산 구성 | 메타데이터/내부 정보 | 메타데이터/내부 정보 | 네이티브 |
그래픽 구성 | 아니요. | 아니요. | 네이티브 |
지원되는 언어 및 기능 | OpenCL C 1.2 |
|
|
OpenCL 섭취 | OpenCL 1.2 확장 | OpenCL 2.0 확장 | OpenCL 2.1/2.2 코어 |
그래픽 API 수집 | 해당 없음 | 해당 없음 |
|
LLVM 기반 버전
2015년 SPR-V 릴리스 이전의 SPIR은 LLVM 중간 표현을 기반으로 했다.SIR 1.0의 잠정 사양은 2012년에 발표되었다.[7]2013년 7월 22일 SIGGRAP 2013에서 잠정 규격 SIRF 1.2가 발표되었다.[8]최종 SIR 1.2 규격은 2014년 1월 21일 HiPEAC 2014에서 발표되었다.[9]2014년 8월 11일, SIGGRAP 2014에서 SIRF 2.0의 잠정 사양이 공개되었다.[10]
SPIR-V
SPIR-V 1.0은 2015년 3월 발표한 SIRR을 다시 쓴 버전으로,[11] 2015년 11월 16일 출시됐다.[12]SIR 제품군은 이제 셰이더와 커널 기능에 대한 네이티브 지원을 통해 크로노스에 의해 완전히 정의되는 진정한 크로스 API 표준을 포함한다.
SPIR-V는 2진 형태로 교환되는 고도의 중간 언어다.함수는 정적 단일 할당(SSA) 양식을 사용하여 기본 블록의 제어 흐름 그래프로 표현된다.데이터 구조는 높은 수준의 계층적 표현을 유지한다.그래픽 셰이더에 사용된 이전 바이트 코드나 가상 머신 같은 중간 표현처럼 손실되지 않는다.이를 통해 대상 장치의 최적 성능에 근접할 수 있다.[13]크로노스 그룹에 의한 별도의 프로그램은 LLVM IR과의 상호 변환을 허용한다.[14]
SPR-V 섭취 지원은 OpenCL 2.1, 벌칸 API, OpenGL 버전 4.6의 핵심 사양에 통합되어 있다.
SPIR-V 1.1
2016년 4월 18일 IWOCL 2016에서 임시 OpenCL 2.2와 함께 SIR-V 1.1이 출시되었다. SIR-V 1.1은 OpenCL C++, 이니셜라이저/파이널라이저 기능 실행 모드, 명명된 장벽, 부분군 실행, 프로그램 스코프 파이프 및 파이프 저장소에 대한 지원을 추가했다.[15]
SPIR-V 1.2
2017년 5월 16일 IWOCL 2017에서 OpenCL 2.2와 함께 SIR-V 1.2가 출시되었으며, SIR-V 1.2에는 OpenCL 2.2의 키 튜닝 파라미터 런타임 전문화에 대한 지원이 추가되었다.[16]
SPIR-V 1.3
2018년 3월 7일에는 벌칸 1.1. SIR-V 1.3과 함께 SIR-V 1.3이 출시되었으며, 서브그룹 운영에 대한 지원이 추가되어 컴파일러 최적화가 가능해졌다.[17]
SPIR-V 1.4
2019년 5월 7일 SPIR-V 1.4가 출시되었다.[18]
SPIR-V 1.5
2019년 9월 13일 SPIR-V 1.5가 출시되었다.[19]
SPIR-V 1.6
2021년 12월 16일 SIR-V 1.6이 출시되었다.[20]
GLS 교차 컴필레이션을 위한 SPIR-V
후속 버전의 OpenGL Shading Language(GLSL)는 역호환 언어의 많은 변화를 도입했다.그 결과, 여러 OpenGL 버전을 대상으로 하는 GLSL 셰이더는 버전별로 한 번씩 다시 작성되는데, WebGL 1.0, Apple의 OpenGL 구현 등 특정 구형 GLS에 고정되어 있는 구현으로 인해 실질적인 호환성 문제로 악화된다.SIR-V의 대표적인 사용 사례 중 하나는 Khronos Group이 GLSL을 SIR-V로 컴파일하기 위해 유지하는 도구를 사용하여 GLSL 버전 간의 교환 형식으로 사용할 수 있는 기능이다.glslangValidator
,[21] SIR-V 최적화spirv-opt
,[22] SPIR-V와 서로 다른 GLS 대상의 교차 컴파일spirv-cross
.[23]
그러나 형식으로서 SPIR-V는 교차 컴파일에는 몇 가지 주목할 만한 한계가 있다.아마도 가장 중요한 것은 모든 SPIR-V 모듈이 적어도 하나의 진입점 기호를 가지고 있어야 한다는 요건일 것이다.이는 복잡한 셰이더를 일련의 부분 컴파일 단계에 이어 연결 단계에 의해 조립할 수 있는 별도의 컴파일에서 형식이 쉽게 사용되는 것을 방지한다.CPU 컴파일 언어와 유사하게 SPR-V는 실행 파일을 생성하는 데만 사용할 수 있지만 객체 파일에는 사용할 수 없다..o
, 공유 개체 파일.so
또는 정적 라이브러리.a
이는 다음과 같은 일부 SPIR-V 도구의 명시된 목표에 반하는 것이다.spirv-link
SPR-V 바이너리 코드에 완전한 연결 기능을 제공하는 것을 목표로 한다.[24]
참고 항목
- HLSL(High-Level Shading Language)
- Cg(프로그래밍 언어)
- OpenGL 음영 언어(GLSL)
- 텅스텐 그래픽 셰이더 인프라
- 계산 커널
- 병렬 스레드 실행
- ARB 어셈블리 언어
참조
- ^ Farber, Rob (11 August 2014). "Commercial OpenCL! SPIR 2.0 Protects IP Yet Allows Powerful, Portable, Source Code Free Kernels". TechEnablement. Retrieved 5 April 2015.
- ^ Trevett, Neil. "OpenCL Overview and Update" (PDF).
- ^ "Shader modules". Vulkan Tutorial.
- ^ "HLSL as a First Class Vulkan Shading Language". The Khronos Group. 15 January 2020.
- ^ KhronosGroup/SPIRV-Cross, The Khronos Group, 2019-09-06, retrieved 2019-09-08
- ^ WebGPU 음영 언어 규격
- ^ Larabel, Michael (12 September 2012). "Khronos SPIR For OpenCL Brings Binary Compatibility". Phoronix. Retrieved 25 July 2015.
- ^ Smith, Ryan (22 July 2013). "Khronos @ SIGGRAPH 2013: OpenGL 4.4, OpenCL 2.0, & OpenCL 1.2 SPIR Announced". Anandtech. Retrieved 5 April 2015.
- ^ "Khronos Releases SPIR 1.2 Specification for Portable Encoding of OpenCL Device Programs". The Khronos Group. 2014-01-20. Retrieved 2019-08-05.
- ^ Smith, Ryan (11 August 2014). "Khronos Announces OpenCL SPIR 2.0". Anandtech. Retrieved 5 April 2015.
- ^ Parkerson, Stuart (4 March 2015). "Khronos Group Introduces New Vulkan Hardware Driver API and SPIR-V Intermediate Language Shared by Vulkan and OpenCL 2.1". App Developer Magazine. Retrieved 5 April 2015.
- ^ "Khronos Releases OpenCL 2.1 and SPIR-V 1.0 Specifications for Heterogeneous Parallel Programming". www.Khronos.org. 16 November 2015. Retrieved 16 November 2015.
- ^ Kessenich, John. "An Introduction to SPIR-V" (PDF). Khronos. Retrieved 25 July 2015.
- ^ "SPIRV-LLVM-Translator: A tool and a library for bi-directional translation between SPIR-V and LLVM IR". GitHub. The Khronos Group.
- ^ Trevett, Neil (18 April 2016). "OpenCL A State of the Union (IWOCL 2016)" (PDF). Khronos Group.
- ^ Trevett, Neil (16 May 2017). "OpenCL State of the Nation (IWOCL 2017)" (PDF). IWOCL.
- ^ "SPIR - The Industry Open Standard Intermediate Language for Parallel Compute and Graphics". The Khronos Group. 2014-01-20. Retrieved 2019-08-05.
- ^ "Khronos SPIR-V Registry - The Khronos Group Inc". www.khronos.org. Retrieved 2019-08-05.
- ^ "Khronos SPIR-V Registry - The Khronos Group Inc". www.khronos.org. Retrieved 2020-01-30.
- ^ "Khronos SPIR-V Registry - The Khronos Group Inc". www.khronos.org. Retrieved 2020-02-27.
- ^ "OpenGL / OpenGL ES Reference Compiler". www.khronos.org. Retrieved 2020-10-01.
- ^ "SPIR-V Tools". www.github.com. Retrieved 2020-10-01.
- ^ "SPIR-V Cross". www.github.com. Retrieved 2020-10-01.
- ^ "SPIR-V Tools". www.github.com. Retrieved 2020-10-01.