Skip to content

Commit

Permalink
Implement SPV_INTEL_subgroup_matrix_multiply_accumulate (#2822) (#2979)
Browse files Browse the repository at this point in the history
  • Loading branch information
YuriPlyakhin authored Jan 30, 2025
1 parent 96c72b9 commit 252b6d2
Show file tree
Hide file tree
Showing 5 changed files with 294 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/LLVMSPIRVExtensions.inc
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,4 @@ EXT(SPV_INTEL_cache_controls)
EXT(SPV_INTEL_maximum_registers)
EXT(SPV_INTEL_bindless_images)
EXT(SPV_INTEL_2d_block_io)
EXT(SPV_INTEL_subgroup_matrix_multiply_accumulate)
18 changes: 18 additions & 0 deletions lib/SPIRV/libSPIRV/SPIRVInstruction.h
Original file line number Diff line number Diff line change
Expand Up @@ -3949,5 +3949,23 @@ _SPIRV_OP(Subgroup2DBlockLoadTranspose, false, 11)
_SPIRV_OP(Subgroup2DBlockLoadTransform, false, 11)
#undef _SPIRV_OP

class SPIRVSubgroupMatrixMultiplyAccumulateINTELInst
: public SPIRVInstTemplateBase {
public:
std::optional<ExtensionID> getRequiredExtension() const override {
return ExtensionID::SPV_INTEL_subgroup_matrix_multiply_accumulate;
}
SPIRVCapVec getRequiredCapability() const override {
return getVec(CapabilitySubgroupMatrixMultiplyAccumulateINTEL);
}
};

#define _SPIRV_OP(x, ...) \
typedef SPIRVInstTemplate<SPIRVSubgroupMatrixMultiplyAccumulateINTELInst, \
Op##x##INTEL, __VA_ARGS__> \
SPIRV##x##INTEL;
_SPIRV_OP(SubgroupMatrixMultiplyAccumulate, true, 7, true, 4)
#undef _SPIRV_OP

} // namespace SPIRV
#endif // SPIRV_LIBSPIRV_SPIRVINSTRUCTION_H
2 changes: 2 additions & 0 deletions lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h
Original file line number Diff line number Diff line change
Expand Up @@ -631,6 +631,8 @@ template <> inline void SPIRVMap<Capability, std::string>::init() {
add(CapabilitySubgroup2DBlockIOINTEL, "Subgroup2DBlockIOINTEL");
add(CapabilitySubgroup2DBlockTransformINTEL, "Subgroup2DBlockTransformINTEL");
add(CapabilitySubgroup2DBlockTransposeINTEL, "Subgroup2DBlockTransposeINTEL");
add(CapabilitySubgroupMatrixMultiplyAccumulateINTEL,
"SubgroupMatrixMultiplyAccumulateINTEL");
// From spirv_internal.hpp
add(internal::CapabilityFastCompositeINTEL, "FastCompositeINTEL");
add(internal::CapabilityOptNoneINTEL, "OptNoneINTEL");
Expand Down
1 change: 1 addition & 0 deletions lib/SPIRV/libSPIRV/SPIRVOpCodeEnum.h
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,7 @@ _SPIRV_OP(Subgroup2DBlockLoadTransformINTEL, 6232)
_SPIRV_OP(Subgroup2DBlockLoadTransposeINTEL, 6233)
_SPIRV_OP(Subgroup2DBlockPrefetchINTEL, 6234)
_SPIRV_OP(Subgroup2DBlockStoreINTEL, 6235)
_SPIRV_OP(SubgroupMatrixMultiplyAccumulateINTEL, 6237)
_SPIRV_OP(GroupIMulKHR, 6401)
_SPIRV_OP(GroupFMulKHR, 6402)
_SPIRV_OP(GroupBitwiseAndKHR, 6403)
Expand Down
Loading

0 comments on commit 252b6d2

Please sign in to comment.