Como es habitual cada cierto periodo de tiempo el Grupo Khronos, el organismo detrás de los varios estándares abiertos de la industria (OpenCL, OpenGL, OpenGL ES, WebGL,WebCL, OpenSL ES, OpenMAX AL, EGL, OpenVG etc etc), ha anunciado las nuevas especificaciones para la API gráfica abierta OpenGL 4.4 y la API para cómputo paralelo OpenCL 2.2 (Open Computing Language).
OpenGL 4.4 (Open Graphics Library 4.4)
La nueva versión de OpenGL 4.4, mejora sus características para aprovechar de mucha mejor forma las capacidades del hardware gráfico actual, manteniendo compatibilidad completa con las versiones previas. Dentro de las nuevas funciones que ha agregado el grupo Khronos también se ha hecho un especial hincapié en definir con OpenGL 4.4 nuevas funcionalidades para poder portar de manera más fluida aplicaciones y títulos a otras plataformas y API.
Además, el grupo Khronos y su OpenGL ARB (Architecture Review Board), han creado un programa de certificación mandatorio de drivers con el objetivo de reducir las diferencias entre los controladores gráficos con soporte OpenGL de las distintas empresas, entiéndase AMD y NVIDIA principalmente, con el objetivo de facilitar el trabajo de los desarrolladores portando aplicaciones para cada plataforma.
New functionality in the OpenGL 4.4 specification includes:
Buffer Placement Control (GL_ARB_buffer_storage)
Significantly enhances memory flexibility and efficiency through explicit control over the position of buffers in the graphics and system memory, together with cache behavior control – including the ability of the CPU to map a buffer for direct use by a GPU.Efficient Asynchronous Queries (GL_ARB_query_buffer_object)
Buffer objects can be the direct target of a query to avoid the CPU waiting for the result and stalling the graphics pipeline. This provides significantly boosted performance for applications that intend to subsequently use the results of queries on the GPU, such as dynamic quality reduction strategies based on performance metrics.Shader Variable Layout (GL_ARB_enhanced_layouts)
Detailed control over placement of shader interface variables, including the ability to pack vectors efficiently with scalar types. Includes full control over variable layout inside uniform blocks and enables shaders to specify transform feedback variables and buffer layout.Efficient Multiple Object Binding (GL_ARB_multi_bind)
New commands which enable an application to bind or unbind sets of objects with one API call instead of separate commands for each bind operation, amortizing the function call, name space lookup, and potential locking overhead. The core rendering loop of many graphics applications frequently binds different sets of textures, samplers, images, vertex buffers, and uniform buffers and so this can significantly reduce CPU overhead and improve performance.Streamlined Porting of Direct3D applications
A number of core functions contribute to easier porting of applications and games written in Direct3D including GL_ARB_buffer_storage for buffer placement control, GL_ARB_vertex_type_10f_11f_11f_rev which creates a vertex data type that packs three components in a 32 bit value that provides a performance improvement for lower precision vertices and is a format used by Direct3D, and GL_ARB_texture_mirror_clamp_to_edge that provides a texture clamping mode also used by Direct3D.Extensions released alongside the OpenGL 4.4 specification include:
- Bindless Texture Extension (GL_ARB_bindless_texture): Shaders can now access an effectively unlimited number of texture and image resources directly by virtual addresses. This bindless texture approach avoids the application overhead due to explicitly binding a small window of accessible textures. Ray tracing and global illumination algorithms are faster and simpler with unfettered access to a virtual world’s entire texture set.
- Sparse Texture Extension (GL_ARB_sparse_texture): Enables handling of huge textures that are much larger than the GPUs physical memory by allowing an application to select which regions of the texture are resident for ‘mega-texture’ algorithms and very large data-set visualizations.
Pueden revisar el listado de nuevas funciones y características de OpenGL 4.4 en este enlace.
OpenCL 2.2 (Open Computing Language 2.2)
Junto con OpenGL 4.4, el Grupo Khronos anuncia paralelamente la nueva versión de la API OpenCL 2.2, la cual está enfocada en ofrecer una interfaz de programación de aplicaciones (API) que permitan crear aplicaciones con paralelismo, es decir, aplicaciones que se puedan ejecutar tanto en la CPU o procesador central, como también en las GPU, que proveen un mayor nivel de procesamiento paralelo, esto es a lo que actualmente se le llama computación heterogénea y cuyo soporte va desde dispositivos móviles a supercomputadores.
Las especificaciones OpenCL 2.2 están disponibles de manera provisional para los desarrolladores, con el fin de conseguir feedback para mejorar las especificaciones finales que serán liberadas en un periodo de 6 meses a contar de hoy.
Updates and additions to OpenCL 2.0 include:
- Shared Virtual Memory
Host and device kernels can directly share complex, pointer-containing data structures such as trees and linked lists, providing significant programming flexibility and eliminating costly data transfers between host and devices.- Dynamic Parallelism
Device kernels can enqueue kernels to the same device with no host interaction, enabling flexible work scheduling paradigms and avoiding the need to transfer execution control and data between the device and host, often significantly offloading host processor bottlenecks.- Generic Address Space
Functions can be written without specifying a named address space for arguments, especially useful for those arguments that are declared to be a pointer to a type, eliminating the need for multiple functions to be written for each named address space used in an application.- Images
Improved image support including sRGB images and 3D image writes, the ability for kernels to read from and write to the same image, and the creation of OpenCL images from a mip-mapped or a multi-sampled OpenGL texture for improved OpenGL interop.- C11 Atomics
A subset of C11 atomics and synchronization operations to enable assignments in one work-item to be visible to other work-items in a work-group, across work-groups executing on a device or for sharing data between the OpenCL device and host.- Pipes
Pipes are memory objects that store data organized as a FIFO and OpenCL 2.0 provides built-in functions for kernels to read from or write to a pipe, providing straightforward programming of pipe data structures that can be highly optimized by OpenCL implementers.- Android Installable Client Driver Extension
Enables OpenCL implementations to be discovered and loaded as a shared object on Android systems.
Pueden encontrar más información en este enlace, aunque para ciertos datos requieren registro.
Galería OpenGL 4.4
[nggallery id=1114]
Galería OpenCL 2.2
[nggallery id=1115]
[The Khronos™ Group] [Galería: Anandtech]