Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 30 additions & 5 deletions tools/clang/unittests/HLSLExec/LinAlgTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -255,8 +255,8 @@ static VariantCompType makeExpectedMat(ComponentType CompType, MatrixDim M,

for (size_t I = 0; I < M; ++I) {
for (size_t J = 0; J < N; ++J) {
size_t Value = I * M + J;
size_t Idx = Transpose ? J * N + I : Value;
size_t Value = I * N + J;
size_t Idx = Transpose ? J * M + I : Value;
switch (CompType) {
case ComponentType::F32:
Floats[Idx] = StartingVal + static_cast<float>(Increment ? Value : 0);
Expand Down Expand Up @@ -340,6 +340,7 @@ class DxilConf_SM610_LinAlg {
// Cast/Convert
TEST_METHOD(CopyConvert_Wave_16x16_F16);
TEST_METHOD(CopyConvert_Wave_16x16_F16_Transpose);
TEST_METHOD(CopyConvert_Wave_4x8_F32_Transpose);

// Matrix Matrix Arithmetic
TEST_METHOD(MatMatMul_Wave_16x16x16_F16);
Expand Down Expand Up @@ -819,14 +820,14 @@ static const char CopyConvertShader[] = R"(
[[__LinAlgMatrix_Attributes(COMP_TYPE, M_DIM, N_DIM, USE, SCOPE)]]
Src;
__builtin_LinAlgMatrix
[[__LinAlgMatrix_Attributes(COMP_TYPE, N_DIM, M_DIM, USE, SCOPE)]]
[[__LinAlgMatrix_Attributes(COMP_TYPE, DST_M_DIM, DST_N_DIM, USE, SCOPE)]]
Dst;

__builtin_LinAlg_MatrixLoadFromDescriptor(
Src, Input, 0, STRIDE, LAYOUT, 128);
Src, Input, 0, SRC_STRIDE, LAYOUT, 128);
__builtin_LinAlg_CopyConvertMatrix(Dst, Src, TRANSPOSE);
__builtin_LinAlg_MatrixStoreToDescriptor(
Dst, Output, 0, STRIDE, LAYOUT, 128);
Dst, Output, 0, DST_STRIDE, LAYOUT, 128);
}
)";

Expand All @@ -836,9 +837,18 @@ static void runCopyConvert(ID3D12Device *Device,
bool Transpose) {
const size_t NumElements = Params.totalElements();
const size_t BufferSize = Params.totalBytes();
MatrixParams DstParams = Params;
if (Transpose) {
DstParams.M = Params.N;
DstParams.N = Params.M;
}

std::stringstream ExtraDefs;
ExtraDefs << " -DTRANSPOSE=" << Transpose;
ExtraDefs << " -DDST_M_DIM=" << DstParams.M;
ExtraDefs << " -DDST_N_DIM=" << DstParams.N;
ExtraDefs << " -DSRC_STRIDE=" << Params.strideBytes();
ExtraDefs << " -DDST_STRIDE=" << DstParams.strideBytes();

std::string Args = buildCompilerArgs(Params, ExtraDefs.str().c_str());

Expand Down Expand Up @@ -899,6 +909,21 @@ void DxilConf_SM610_LinAlg::CopyConvert_Wave_16x16_F16_Transpose() {
/*Transpose=*/true);
}

void DxilConf_SM610_LinAlg::CopyConvert_Wave_4x8_F32_Transpose() {
MatrixParams Params = {};
Params.CompType = ComponentType::F32;
Params.M = 4;
Params.N = 8;
Params.Use = MatrixUse::A;
Params.Scope = MatrixScope::Wave;
Params.Layout = LinalgMatrixLayout::RowMajor;
Params.NumThreads = 64;
Params.Enable16Bit = false;
// Non-square dimensions make the destination shape and row stride observable.
runCopyConvert(D3DDevice, DxcSupport, Params, VerboseLogging,
/*Transpose=*/true);
}

static const char MatMatMulShader[] = R"(
#define USE_A 0
#define USE_B 1
Expand Down
Loading