VK_NV_cooperative_matrix(3)

# VK_NV_cooperative_matrix(3) Manual Page

## Name

VK_NV_cooperative_matrix - device extension

Loading… please wait.

## Registered Extension Number

250

## Revision

1

## Ratification Status

Not ratified

## Extension and Version Dependencies

VK_KHR_get_physical_device_properties2

## Contact

- Jeff Bolz jeffbolznv

## Other Extension Metadata

Last Modified Date

  2019-02-05

Interactions and External Dependencies

  - This extension requires `SPV_NV_cooperative_matrix`

  - 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

- vkGetPhysicalDeviceCooperativeMatrixPropertiesNV

## New Structures

- VkCooperativeMatrixPropertiesNV

- Extending VkPhysicalDeviceFeatures2, VkDeviceCreateInfo:

  - VkPhysicalDeviceCooperativeMatrixFeaturesNV

- Extending VkPhysicalDeviceProperties2:

  - VkPhysicalDeviceCooperativeMatrixPropertiesNV

## New Enums

- VkComponentTypeNV

- VkScopeNV

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

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

## See Also

VkComponentTypeNV, VkCooperativeMatrixPropertiesNV, VkPhysicalDeviceCooperativeMatrixFeaturesNV, VkPhysicalDeviceCooperativeMatrixPropertiesNV, VkScopeNV, vkGetPhysicalDeviceCooperativeMatrixPropertiesNV

## Document Notes

For more information, see the Vulkan Specification

This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.

## Copyright

Copyright 2014-2023 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0