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 <Graham.Sider@amd.com>
Change-Id: I669f076b5c34eb90349865eeca1b29e17c9e80d6


[ROCm/ROCR-Runtime commit: 08d38fb140]
Tento commit je obsažen v:
Graham Sider
2021-09-24 18:46:46 -04:00
odevzdal Harish Kasiviswanathan
rodič 8b175d6233
revize 3bbfce112b
+97 -103
Zobrazit soubor
@@ -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<char*>()));
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<HSAint32*>();
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<char*>()));
Dispatch dispatch[2] = {
Dispatch(isaBuffer, true),
@@ -1047,7 +1041,7 @@ TEST_F(KFDQMTest, QueuePriorityOnSamePipe) {
HSAint32 *syncBuffer = syncBuf.As<HSAint32*>();
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<char*>()));
Dispatch dispatch[2] = {
Dispatch(isaBuffer, true),