VK_NV_cooperative_matrix
Other Extension Metadata
Last Modified Date
2019-02-05
Interactions and External Dependencies
- This extension provides API support for
GL_NV_cooperative_matrix
Contributors
- Jeff Bolz, NVIDIA
- Markus Tavenrath, NVIDIA
- Daniel Koch, NVIDIA
Description
This extension adds support for using cooperative matrix types in SPIR-V. Cooperative matrix types are medium-sized matrices that are primarily supported in compute shaders, where the storage for the matrix is spread across all invocations in some scope (usually a subgroup) and those invocations cooperate to efficiently perform matrix multiplies.
Cooperative matrix types are defined by the
SPV_NV_cooperative_matrix
SPIR-V extension and can be used with the
GL_NV_cooperative_matrix
GLSL extension.
This extension includes support for enumerating the matrix types and dimensions that are supported by the implementation.
New Commands
New Structures
- VkCooperativeMatrixPropertiesNV
- Extending VkPhysicalDeviceFeatures2, VkDeviceCreateInfo:
- Extending VkPhysicalDeviceProperties2:
New Enums
New Enum Constants
VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME
VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION
- Extending VkComponentTypeKHR:
VK_COMPONENT_TYPE_FLOAT16_NV
VK_COMPONENT_TYPE_FLOAT32_NV
VK_COMPONENT_TYPE_FLOAT64_NV
VK_COMPONENT_TYPE_SINT16_NV
VK_COMPONENT_TYPE_SINT32_NV
VK_COMPONENT_TYPE_SINT64_NV
VK_COMPONENT_TYPE_SINT8_NV
VK_COMPONENT_TYPE_UINT16_NV
VK_COMPONENT_TYPE_UINT32_NV
VK_COMPONENT_TYPE_UINT64_NV
VK_COMPONENT_TYPE_UINT8_NV
- Extending VkScopeKHR:
VK_SCOPE_DEVICE_NV
VK_SCOPE_QUEUE_FAMILY_NV
VK_SCOPE_SUBGROUP_NV
VK_SCOPE_WORKGROUP_NV
- Extending VkStructureType:
VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV
New SPIR-V Capabilities
Issues
(1) What matrix properties will be supported in practice?
RESOLVED: In NVIDIA’s initial implementation, we will support:
- AType = BType = fp16 CType = DType = fp16 MxNxK = 16x8x16 scope = Subgroup
- AType = BType = fp16 CType = DType = fp16 MxNxK = 16x8x8 scope = Subgroup
- AType = BType = fp16 CType = DType = fp32 MxNxK = 16x8x16 scope = Subgroup
- AType = BType = fp16 CType = DType = fp32 MxNxK = 16x8x8 scope = Subgroup
Version History
- Revision 1, 2019-02-05 (Jeff Bolz)
- Internal revisions