// Copyright (c) 2019-2020 NVIDIA Corporation // // SPDX-License-Identifier: CC-BY-4.0 include::{generated}/meta/{refprefix}VK_NV_cooperative_matrix.txt[] === Other Extension Metadata *Last Modified Date*:: 2019-02-05 *Interactions and External Dependencies*:: - This extension requires {spirv}/NV/SPV_NV_cooperative_matrix.html[`SPV_NV_cooperative_matrix`] - This extension provides API support for https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_cooperative_matrix.txt[`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 {spirv}/NV/SPV_NV_cooperative_matrix.html[`SPV_NV_cooperative_matrix`] SPIR-V extension and can be used with the https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_cooperative_matrix.txt[`GL_NV_cooperative_matrix`] GLSL extension. This extension includes support for enumerating the matrix types and dimensions that are supported by the implementation. include::{generated}/interfaces/VK_NV_cooperative_matrix.txt[] === 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