From 3bbfce112be05cd546e18fd5d63a08813044c999 Mon Sep 17 00:00:00 2001 From: Graham Sider Date: Fri, 24 Sep 2021 18:46:46 -0400 Subject: [PATCH] kfdtest: Update KFDQMTest to LLVM Asm - Reformat shaders for legibility - Move assembly processes to from IsaGen (CompileShader) to Assembler (RunAssembleBuf) Signed-off-by: Graham Sider Change-Id: I669f076b5c34eb90349865eeca1b29e17c9e80d6 [ROCm/ROCR-Runtime commit: 08d38fb14010fd0bcf24d73ce626d8b5bffc49d8] --- .../tests/kfdtest/src/KFDQMTest.cpp | 200 +++++++++--------- 1 file changed, 97 insertions(+), 103 deletions(-) diff --git a/projects/rocr-runtime/tests/kfdtest/src/KFDQMTest.cpp b/projects/rocr-runtime/tests/kfdtest/src/KFDQMTest.cpp index 9b4003b68e..c28715639f 100644 --- a/projects/rocr-runtime/tests/kfdtest/src/KFDQMTest.cpp +++ b/projects/rocr-runtime/tests/kfdtest/src/KFDQMTest.cpp @@ -34,6 +34,100 @@ #include "Dispatch.hpp" +/* A simple isa loop program with dense mathematic operations + * s1 controls the number iterations of the loop + * This shader can be used by GFX8, GFX9 and GFX10 + */ +static const char* LoopIsa = R"( + .text + s_movk_i32 s0, 0x0008 + s_movk_i32 s1, 0x00ff + v_mov_b32 v0, 0 + v_mov_b32 v1, 0 + v_mov_b32 v2, 0 + v_mov_b32 v3, 0 + v_mov_b32 v4, 0 + v_mov_b32 v5, 0 + v_mov_b32 v6, 0 + v_mov_b32 v7, 0 + v_mov_b32 v8, 0 + v_mov_b32 v9, 0 + v_mov_b32 v10, 0 + v_mov_b32 v11, 0 + v_mov_b32 v12, 0 + v_mov_b32 v13, 0 + v_mov_b32 v14, 0 + v_mov_b32 v15, 0 + v_mov_b32 v16, 0 + LOOP: + s_mov_b32 s8, s4 + s_mov_b32 s9, s1 + s_mov_b32 s10, s6 + s_mov_b32 s11, s7 + s_cmp_le_i32 s1, s0 + s_cbranch_scc1 END_OF_PGM + s_buffer_load_dwordx8 s[8:15], s[8:11], 0x10 + v_add_f32 v0, 2.0, v0 + v_cvt_f32_i32 v17, s1 + s_waitcnt lgkmcnt(0) + v_add_f32 v18, s8, v17 + v_add_f32 v19, s9, v17 + v_add_f32 v20, s10, v17 + v_add_f32 v21, s11, v17 + v_add_f32 v22, s12, v17 + v_add_f32 v23, s13, v17 + v_add_f32 v24, s14, v17 + v_add_f32 v17, s15, v17 + v_log_f32 v25, v18 + v_mul_f32 v25, v22, v25 + v_exp_f32 v25, v25 + v_log_f32 v26, v19 + v_mul_f32 v26, v23, v26 + v_exp_f32 v26, v26 + v_log_f32 v27, v20 + v_mul_f32 v27, v24, v27 + v_exp_f32 v27, v27 + v_log_f32 v28, v21 + v_mul_f32 v28, v17, v28 + v_exp_f32 v28, v28 + v_add_f32 v5, v5, v25 + v_add_f32 v6, v6, v26 + v_add_f32 v7, v7, v27 + v_add_f32 v8, v8, v28 + v_mul_f32 v18, 0x3fb8aa3b, v18 + v_exp_f32 v18, v18 + v_mul_f32 v19, 0x3fb8aa3b, v19 + v_exp_f32 v19, v19 + v_mul_f32 v20, 0x3fb8aa3b, v20 + v_exp_f32 v20, v20 + v_mul_f32 v21, 0x3fb8aa3b, v21 + v_exp_f32 v21, v21 + v_add_f32 v9, v9, v18 + v_add_f32 v10, v10, v19 + v_add_f32 v11, v11, v20 + v_add_f32 v12, v12, v21 + v_sqrt_f32 v18, v22 + v_sqrt_f32 v19, v23 + v_sqrt_f32 v20, v24 + v_sqrt_f32 v21, v17 + v_add_f32 v13, v13, v18 + v_add_f32 v14, v14, v19 + v_add_f32 v15, v15, v20 + v_add_f32 v16, v16, v21 + v_rsq_f32 v18, v22 + v_rsq_f32 v19, v23 + v_rsq_f32 v20, v24 + v_rsq_f32 v17, v17 + v_add_f32 v1, v1, v18 + v_add_f32 v2, v2, v19 + v_add_f32 v3, v3, v20 + v_add_f32 v4, v4, v17 + s_add_u32 s0, s0, 1 + s_branch LOOP + END_OF_PGM: + s_endpgm +)"; + void KFDQMTest::SetUp() { ROUTINE_START @@ -677,111 +771,12 @@ TEST_F(KFDQMTest, OverSubscribeCpQueues) { TEST_END } -/* A simple isa loop program with dense mathematic operations - * s1 controls the number iterations of the loop - * This shader can be used by GFX8, GFX9 and GFX10 - */ -static const char *loop_isa = \ -"\ -shader loop_isa\n\ -wave_size(32)\n\ -type(CS)\n\ - s_movk_i32 s0, 0x0008\n\ - s_movk_i32 s1, 0x00ff\n\ - v_mov_b32 v0, 0\n\ - v_mov_b32 v1, 0\n\ - v_mov_b32 v2, 0\n\ - v_mov_b32 v3, 0\n\ - v_mov_b32 v4, 0\n\ - v_mov_b32 v5, 0\n\ - v_mov_b32 v6, 0\n\ - v_mov_b32 v7, 0\n\ - v_mov_b32 v8, 0\n\ - v_mov_b32 v9, 0\n\ - v_mov_b32 v10, 0\n\ - v_mov_b32 v11, 0\n\ - v_mov_b32 v12, 0\n\ - v_mov_b32 v13, 0\n\ - v_mov_b32 v14, 0\n\ - v_mov_b32 v15, 0\n\ - v_mov_b32 v16, 0\n\ - LOOP:\n\ - s_mov_b32 s8, s4\n\ - s_mov_b32 s9, s1\n\ - s_mov_b32 s10, s6\n\ - s_mov_b32 s11, s7\n\ - s_cmp_le_i32 s1, s0\n\ - s_cbranch_scc1 END_OF_PGM\n\ - s_buffer_load_dwordx8 s[8:15], s[8:11], 0x10\n\ - v_add_f32 v0, 2.0, v0\n\ - v_cvt_f32_i32 v17, s1\n\ -s_waitcnt lgkmcnt(0)\n\ - v_add_f32 v18, s8, v17\n\ - v_add_f32 v19, s9, v17\n\ - v_add_f32 v20, s10, v17\n\ - v_add_f32 v21, s11, v17\n\ - v_add_f32 v22, s12, v17\n\ - v_add_f32 v23, s13, v17\n\ - v_add_f32 v24, s14, v17\n\ - v_add_f32 v17, s15, v17\n\ - v_log_f32 v25, v18\n\ - v_mul_f32 v25, v22, v25\n\ - v_exp_f32 v25, v25\n\ - v_log_f32 v26, v19\n\ - v_mul_f32 v26, v23, v26\n\ - v_exp_f32 v26, v26\n\ - v_log_f32 v27, v20\n\ - v_mul_f32 v27, v24, v27\n\ - v_exp_f32 v27, v27\n\ - v_log_f32 v28, v21\n\ - v_mul_f32 v28, v17, v28\n\ - v_exp_f32 v28, v28\n\ - v_add_f32 v5, v5, v25\n\ - v_add_f32 v6, v6, v26\n\ - v_add_f32 v7, v7, v27\n\ - v_add_f32 v8, v8, v28\n\ - v_mul_f32 v18, 0x3fb8aa3b, v18\n\ - v_exp_f32 v18, v18\n\ - v_mul_f32 v19, 0x3fb8aa3b, v19\n\ - v_exp_f32 v19, v19\n\ - v_mul_f32 v20, 0x3fb8aa3b, v20\n\ - v_exp_f32 v20, v20\n\ - v_mul_f32 v21, 0x3fb8aa3b, v21\n\ - v_exp_f32 v21, v21\n\ - v_add_f32 v9, v9, v18\n\ - v_add_f32 v10, v10, v19\n\ - v_add_f32 v11, v11, v20\n\ - v_add_f32 v12, v12, v21\n\ - v_sqrt_f32 v18, v22\n\ - v_sqrt_f32 v19, v23\n\ - v_sqrt_f32 v20, v24\n\ - v_sqrt_f32 v21, v17\n\ - v_add_f32 v13, v13, v18\n\ - v_add_f32 v14, v14, v19\n\ - v_add_f32 v15, v15, v20\n\ - v_add_f32 v16, v16, v21\n\ - v_rsq_f32 v18, v22\n\ - v_rsq_f32 v19, v23\n\ - v_rsq_f32 v20, v24\n\ - v_rsq_f32 v17, v17\n\ - v_add_f32 v1, v1, v18\n\ - v_add_f32 v2, v2, v19\n\ - v_add_f32 v3, v3, v20\n\ - v_add_f32 v4, v4, v17\n\ - s_add_u32 s0, s0, 1\n\ - s_branch LOOP\n\ - END_OF_PGM:\n\ - s_endpgm\n\ - end\n\ -"; - HSAint64 KFDQMTest::TimeConsumedwithCUMask(int node, uint32_t* mask, uint32_t mask_count) { HsaMemoryBuffer isaBuffer(PAGE_SIZE, node, true/*zero*/, false/*local*/, true/*exec*/); HsaMemoryBuffer dstBuffer(PAGE_SIZE, node, true, false, false); HsaMemoryBuffer ctlBuffer(PAGE_SIZE, node, true, false, false); - m_pIsaGen = IsaGenerator::Create(m_FamilyId); - m_pIsaGen->CompileShader(loop_isa, "loop_isa", isaBuffer); + EXPECT_SUCCESS(m_pAsm->RunAssembleBuf(LoopIsa, isaBuffer.As())); Dispatch dispatch(isaBuffer); dispatch.SetDim(1024, 16, 16); @@ -838,7 +833,6 @@ TEST_F(KFDQMTest, BasicCuMaskingLinear) { TEST_START(TESTPROFILE_RUNALL); int defaultGPUNode = m_NodeInfo.HsaDefaultGPUNode(); ASSERT_GE(defaultGPUNode, 0) << "failed to get default GPU Node"; - m_pIsaGen = IsaGenerator::Create(m_FamilyId); if (m_FamilyId >= FAMILY_VI) { const HsaNodeProperties *pNodeProperties = m_NodeInfo.GetNodeProperties(defaultGPUNode); @@ -982,7 +976,7 @@ TEST_F(KFDQMTest, QueuePriorityOnDifferentPipe) { HSAint32 *syncBuffer = syncBuf.As(); HsaMemoryBuffer isaBuffer(PAGE_SIZE, node, true/*zero*/, false/*local*/, true/*exec*/); - m_pIsaGen->CompileShader(loop_isa, "loop_isa", isaBuffer); + ASSERT_SUCCESS(m_pAsm->RunAssembleBuf(LoopIsa, isaBuffer.As())); Dispatch dispatch[2] = { Dispatch(isaBuffer, true), @@ -1047,7 +1041,7 @@ TEST_F(KFDQMTest, QueuePriorityOnSamePipe) { HSAint32 *syncBuffer = syncBuf.As(); HsaMemoryBuffer isaBuffer(PAGE_SIZE, node, true/*zero*/, false/*local*/, true/*exec*/); - m_pIsaGen->CompileShader(loop_isa, "loop_isa", isaBuffer); + ASSERT_SUCCESS(m_pAsm->RunAssembleBuf(LoopIsa, isaBuffer.As())); Dispatch dispatch[2] = { Dispatch(isaBuffer, true),