Standard Portable Intermediate Representation

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
SPIR
SPIR logo
Developer(s)Khronos Group
Initial releaseJanuary 2014 (2014-01)
Stable release
SPIR-V 1.4 / May 7, 2019; 8 months ago (2019-05-07)
Operating systemCross-platform
PlatformCross-platform
TypeIntermediate language
Websitewww.khronos.org/spir

Standard Portable Intermediate Representation (SPIR) is an intermediate language for parallel compute and graphics by Khronos Group, originally developed for use with OpenCL. SPIR was rewritten into SPIR-V in March 2015.

Purpose[edit]

OpenCL uses just-in-time compilation (JIT), necessitating one of two software distribution patterns: developers can distribute device-specific pre-compiled binaries, or they can distribute relevant source code, which is limited by the desire to protect intellectual property. SPIR enables the creation and distribution of device-independent binaries within the OpenCL stack.[1] SPIR-V can be disassembled into several shading languages using SPIRV-Cross, so that these languages can be interconverted.[2]

Versions[edit]

SPIR was originally introduced in 2011 and SPIR-V was introduced in 2015.

SPIR and SPIR-V
SPIR 1.2 SPIR 2.0 SPIR-V 1.X
LLVM Interaction LLVM IR version 3.2 LLVM IR version 3.4 100% Khronos defined

Round-trip lossless conversion

Compute Constructs Metadata/Intrinsics Metadata/Intrinsics Native
Graphics Constructs No No Native
Supported Language & Feature Supported OpenCL C 1.2 OpenCL C 1.2

OpenCL C 2.0

OpenCL C 1.2 / 2.X

OpenCL C++

GLSL

OpenCL Ingestion OpenCL 1.2 Extension OpenCL 2.0 Extension OpenCL 2.1/2.2 Core
Graphics API Ingestion NA NA Vulkan 1.X

OpenGL 4.6 Core

LLVM-based versions[edit]

SPIR prior to the 2015 SPIR-V release was based on the LLVM Intermediate Representation. A provisional specification for SPIR 1.0 was announced in 2012.[3] On July 22, 2013, a provisional specification SPIR 1.2 was announced at SIGGRAPH 2013.[4] The final SPIR 1.2 specification was released at HiPEAC 2014 on January 21, 2014.[5] On August 11th, 2014, a provisional specification for SPIR 2.0 was released at SIGGRAPH 2014.[6]

SPIR-V[edit]

SPIR-V 1.0 is a rewritten version of SPIR announced in March 2015,[7] and released on Nov. 16 2015.[8] The SPIR family now includes a true cross-API standard that is fully defined by Khronos with native support for shader and kernel features.

SPIR-V is a high-level intermediate language, exchanged in binary form. Functions are represented by a control flow graph of basic blocks, using static single assignment (SSA) form. Data structures retain high-level hierarchical representation. It is not lossy like previous byte-code or virtual machine-like intermediate representations used for graphical shaders. This allows higher performance lowering to target devices.[9]

Support for ingestion of SPIR-V is incorporated in the core specification of OpenCL 2.1, the Vulkan API, and OpenGL version 4.6.

SPIR-V 1.1[edit]

On April 18th 2016, SPIR-V 1.1 was released at IWOCL 2016 along with Provisional OpenCL 2.2. SPIR-V 1.1 added support for OpenCL C++, initializer/finalizer function execution modes, named barriers, subgroup execution, program scope pipes and pipe storage.[10]

SPIR-V 1.2[edit]

On May 16, 2017, SPIR-V 1.2 was released at IWOCL 2017 along with OpenCL 2.2. SPIR-V 1.2 added support for runtime specialization of key tuning parameters in OpenCL 2.2.[11]

SPIR-V 1.3[edit]

On March 7, 2018, SPIR-V 1.3 was released along with Vulkan 1.1. SPIR-V 1.3 Added support for subgroup operations and enables enhanced compiler optimizations.[12]

SPIR-V 1.4[edit]

On May 7, 2019, SPIR-V 1.4 was released.[13]

See also[edit]

References[edit]

  1. ^ 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.
  2. ^ KhronosGroup/SPIRV-Cross, The Khronos Group, 2019-09-06, retrieved 2019-09-08
  3. ^ Larabel, Michael (12 September 2012). "Khronos SPIR For OpenCL Brings Binary Compatibility". Phoronix. Retrieved 25 July 2015.
  4. ^ Smith, Ryan (22 July 2013). "Khronos @ SIGGRAPH 2013: OpenGL 4.4, OpenCL 2.0, & OpenCL 1.2 SPIR Announced". Anandtech. Retrieved 5 April 2015.
  5. ^ "Khronos Releases SPIR 1.2 Specification for Portable Encoding of OpenCL Device Programs". The Khronos Group. 2014-01-20. Retrieved 2019-08-05.
  6. ^ Smith, Ryan (11 August 2014). "Khronos Announces OpenCL SPIR 2.0". Anandtech. Retrieved 5 April 2015.
  7. ^ 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.
  8. ^ "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.
  9. ^ Kessenich, John. "An Introduction to SPIR-V" (PDF). Khronos. Retrieved 25 July 2015.
  10. ^ Trevett, Neil (18 April 2016). "OpenCL A State of the Union (IWOCL 2016)" (PDF). Khronos Group.
  11. ^ Trevett, Neil (16 May 2017). "OpenCL State of the Nation (IWOCL 2017)" (PDF). IWOCL.
  12. ^ "SPIR - The Industry Open Standard Intermediate Language for Parallel Compute and Graphics". The Khronos Group. 2014-01-20. Retrieved 2019-08-05.
  13. ^ "Khronos SPIR-V Registry - The Khronos Group Inc". www.khronos.org. Retrieved 2019-08-05.

External links[edit]