La Representación Intermedia Portable Estándar (en inglés Standard Portable Intermediate Representation, SPIR) es un lenguaje intermedio de computación paralela y gráficos perteneciente al Grupo Khronos, originalmente desarrollado para su uso con OpenCL. La versión actual, SPIR-V, se anunció en marzo de 2015.
Propósito
OpenCL utiliza compilación instantánea (just-in-time, JIT), usando uno de los dos posibles métodos de distribución de software: los desarrolladores pueden distribuir binarios precompilados dependientes del dispositivo, o bien pueden distribuir el código fuente relevante, limitado por el deseo de proteger la propiedad intelectual. SPIR permite la creación y distribución de binarios independientes del dispositivo en el marco de la pila tecnológica de OpenCL.[1]
Versiones
SPIR se introdujo en el año 2011, la versión actual SPIR-V se introdujo en el año 2015.
- SPIR 1.2 derivaba del LLVM IR versión 3.2; como extensión OpenCL 1.2
- SPIR 2.0 se derivó del LLVM IR versión 3.4; como extensión OpenCL 2.0
- SPIR-V no derivado de LLVM IR; parte básica de OpenCL 2.1 y de Vulkan
Versiones basadas en LLVM
Antes del lanzamiento de SPIR-V en el 2015, SPIR estuvo basado en la representación intermedia de LLVM (LLVM IR). Una especificación provisional para SPIR 1.0 se anunció en el 2012.[2] La versión 1.2 se anunció en la conferencia SIGGRAPH 2013, con la versión 2.0 publicada en la misma conferencia un año más tarde.[3][4]
SPIR-V
SPIR-V es una versión reescrita de SPIR anunciada en marzo de 2015, y liberada el 16 de noviembre de 2015.[5][6] La familia SPIR ahora dispone de una API multiplataforma estándar plenamente definida por Khronos con soporte nativo para las características de los shaders y kernels de cómputo.
Soporte para la ingestión de SPIR-V se ha incorporado en la especificación básica de OpenCL 2.1 y la nueva API Vulkan de gráficos y cómputo.
SPIR-V es un lenguaje intermedio de alto nivel, intercambiado en formato binario. Las funciones se representan mediante un [[grafo de control de flujo]] de bloques básicos, utilizando la forma asignación estática única (SSA). Las estructuras de datos retienen la representación jerárquica de alto nivel. SPIR-V no es una representación con pérdidas a diferencia de otros bytecode previos o representaciones intermedias usadas para gráficos y parecidas a máquinas virtuales. Esto permite más rendimiento al traducir SPIR-V al código máquina de los dispositivos donde se ejecute.[7]
Véase también
Referencias
- ↑ Farber, Rob (11 de agosto de 2014). «Commercial OpenCL! SPIR 2.0 Protects IP Yet Allows Powerful, Portable, Source Code Free Kernels». TechEnablement. Consultado el 5 de abril de 2015.
- ↑ Larabel, Michael (12 de septiembre de 2012). «Khronos SPIR For OpenCL Brings Binary Compatibility». Phoronix. Consultado el 25 de julio de 2015.
- ↑ Smith, Ryan (22 de julio de 2013). «Khronos @ SIGGRAPH 2013: OpenGL 4.4, OpenCL 2.0, & OpenCL 1.2 SPIR Announced». Anandtech. Consultado el 5 de abril de 2015.
- ↑ Smith, Ryan (11 de agosto de 2014). «Khronos Announces OpenCL SPIR 2.0». Anandtech. Consultado el 5 de abril de 2015.
- ↑ Parkerson, Stuart (4 de marzo de 2015). «Khronos Group Introduces New Vulkan Hardware Driver API and SPIR-V Intermediate Language Shared by Vulkan and OpenCL 2.1». App Developer Magazine. Consultado el 5 de abril de 2015.
- ↑ «Khronos Releases OpenCL 2.1 and SPIR-V 1.0 Specifications for Heterogeneous Parallel Programming». www.Khronos.org. 16 de noviembre de 2015. Consultado el 16 de noviembre de 2015.
- ↑ Kessenich, John. «An Introduction to SPIR-V». Khronos. Consultado el 25 de julio de 2015.