// Copyright (c) 2019-2020 NVIDIA Corporation
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_NV_cooperative_matrix.adoc[]

=== 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
    {GLSLregistry}/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
{GLSLregistry}/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.adoc[]

=== New SPIR-V Capabilities

  * <<spirvenv-capabilities-table-CooperativeMatrixNV,
    code:CooperativeMatrixNV>>

=== 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
