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.

SPIR-V
Información general
Tipo de programa Lenguaje intermedio
Autor Grupo Khronos
Desarrollador Khronos Group
Lanzamiento inicial enero de 2014
Información técnica
Plataformas admitidas Multiplataforma
Archivos legibles
SPIR-V file
Archivos editables
SPIR-V file
Enlaces

Propósito

editar

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

editar

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

editar

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

editar

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

editar

Referencias

editar
  1. 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. 
  2. Larabel, Michael (12 de septiembre de 2012). «Khronos SPIR For OpenCL Brings Binary Compatibility». Phoronix. Consultado el 25 de julio de 2015. 
  3. 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. 
  4. Smith, Ryan (11 de agosto de 2014). «Khronos Announces OpenCL SPIR 2.0». Anandtech. Consultado el 5 de abril de 2015. 
  5. 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. 
  6. «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. 
  7. Kessenich, John. «An Introduction to SPIR-V». Khronos. Consultado el 25 de julio de 2015.