Skip to content
Merged
Show file tree
Hide file tree
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
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ void RDNASQTParser::sqtt_simd_analysis(CppReturnInfo& info, TokenGenerator& _gen
case RdnaType::HEADER:
{
tt_version = header_type{.raw = token.contents}.version;
csregister.tt_version = tt_version;

if (tt_version >= 4) double_buffer = (token.contents >> 43) & 1;

Expand Down
5 changes: 4 additions & 1 deletion projects/rocprof-trace-decoder/source/gfx9/gfx9wave.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,10 @@ class CSRegisterHandlerGFX9 : public CSRegisterHandler
class MISQTTParser : public SQTTParser
{
public:
MISQTTParser(int tg_cu, bool _double_buffer) : target_cu(tg_cu), double_buffer(_double_buffer){};
MISQTTParser(int tg_cu, bool _double_buffer, bool is_mi350) : target_cu(tg_cu), double_buffer(_double_buffer)
{
csregister.tt_version = is_mi350 ? 1 : 0;
};
~MISQTTParser() override{};

void sqtt_simd_analysis(CppReturnInfo& info, class TokenGenerator& generator, class Stitcher& stitch) override;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,7 @@ ROCPROF_TRACE_DECODER_API rocprofiler_thread_trace_decoder_status_t rocprof_trac
{
uint64_t header_word = load_header_word(data);
gfxip = extract_gfxip(header_word);
if (gfxip > 9) local.tt_version = mi400::header_type{.raw = header_word}.version;

auto decoder = HandleData::get_write_handle(handle);
if (!decoder.valid()) return ROCPROFILER_THREAD_TRACE_DECODER_STATUS_ERROR_INVALID_ARGUMENT;
Expand Down
15 changes: 11 additions & 4 deletions projects/rocprof-trace-decoder/source/trace_parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,14 @@ std::unique_ptr<SQTTParser> AnalyseBinary_GFX9_internal(
uint64_t buffersize,
int target_cu,
class Stitcher& stitch,
bool double_buffer
bool double_buffer,
bool is_mi350
)
{
stitch.setgfxip(9);

auto generator = gfx9::MITokenGenerator(tokendata, buffersize, 0, 0);
auto parser = std::make_unique<gfx9::MISQTTParser>(target_cu, double_buffer);
auto parser = std::make_unique<gfx9::MISQTTParser>(target_cu, double_buffer, is_mi350);
parser->sqtt_simd_analysis(info, generator, stitch);

return parser;
Expand Down Expand Up @@ -165,7 +166,13 @@ std::unique_ptr<SQTTParser> AnalyseBinary_internal(

BUFFER_SIZE -= sizeof(rocprof_trace_decoder_gfx9_header_t);
return AnalyseBinary_GFX9_internal(
info, buffer, BUFFER_SIZE, gfx9_header.DCU, stitch, gfx9_header.double_buffer
info,
buffer,
BUFFER_SIZE,
gfx9_header.DCU,
stitch,
gfx9_header.double_buffer,
gfx9_header.gfx9_version2 >= 6
);
}
else if (gfx9_header.legacy_version != 0)
Expand All @@ -182,7 +189,7 @@ std::unique_ptr<SQTTParser> AnalyseBinary_internal(
return AnalyseBinary_GFX10_internal(info, buffer, BUFFER_SIZE, stitch);
}
}
else { return AnalyseBinary_GFX9_internal(info, buffer, BUFFER_SIZE, gfx9_target_cu, stitch, false); }
else { return AnalyseBinary_GFX9_internal(info, buffer, BUFFER_SIZE, gfx9_target_cu, stitch, false, false); }

return nullptr;
}
Expand Down
7 changes: 4 additions & 3 deletions projects/rocprof-trace-decoder/source/trace_parser.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,7 @@ class CSRegisterHandler

bool bIsROCMFormat = false;
int userdata_state{};
int tt_version{0};

CowPtr<std::vector<address_range_t>> active_codeobjs{};
CachedTable table{};
Expand Down Expand Up @@ -527,7 +528,7 @@ class CSRegisterHandler

static constexpr uint64_t BITMASK = (uint64_t{1} << 48) - 1;

rocprofiler_thread_trace_decoder_dispatch_t PopulateDispatch(int64_t time, int me, int pipe, int tt_version = 0)
rocprofiler_thread_trace_decoder_dispatch_t PopulateDispatch(int64_t time, int me, int pipe)
{
rocprofiler_thread_trace_decoder_dispatch_t event{};
event.size = sizeof(rocprofiler_thread_trace_decoder_dispatch_t);
Expand All @@ -549,8 +550,8 @@ class CSRegisterHandler
event.vgprs = (rsrc1 & 0x3F) * 8 + 8;
event.user_sgprs = (rsrc2 >> 1) & 0x1F;

if (tt_version == 0) event.sgprs = ((rsrc1 >> 7) & 0x7) * 16 + 16;

if (tt_version <= 1) event.sgprs = ((rsrc1 >> 7) & 0x7) * 16 + 16;
if (tt_version == 1) event.lds_size = event.lds_size * 10 / 4;
if (tt_version >= 5)
{
event.vgprs *= 2;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ std::unique_ptr<SQTTParser> AnalyseBinary_GFX9_internal(
uint64_t buffersize,
int target_cu,
class Stitcher& stitch,
bool double_buffer
bool double_buffer,
bool is_mi350
);

// Note: ToPcV2 is defined in segment_test.cpp
Expand Down Expand Up @@ -362,5 +363,5 @@ TEST(AnalyseBinaryTest, Gfx9PositiveTargetCu)
Stitcher stitch(mock, noop_cb, nullptr);
uint8_t buf[64] = {0};
CppReturnInfo info;
EXPECT_NE(AnalyseBinary_GFX9_internal(info, buf, sizeof(buf), 0, stitch, false), nullptr);
EXPECT_NE(AnalyseBinary_GFX9_internal(info, buf, sizeof(buf), 0, stitch, false, false), nullptr);
}
Loading