[SPM] Clean up obsolete SPM logics and refine some SPM-related definition (#157)
* Clean up obsolete SPM logics
* Add PERFCOUNTER_SELECT1 to CounterRegInfo
* Add RLC_SPM_PERFMON_SAMPLE_DELAY_MAX
[ROCm/aqlprofile commit: 6f236ffb5f]
This commit is contained in:
@@ -330,7 +330,7 @@ class Gfx10CmdBuilder : public CmdBuilder {
|
||||
}
|
||||
|
||||
void BuildNopPacket(CmdBuffer* cmdbuf, uint32_t num_dwords) {
|
||||
uint32_t header = MakePacket3Header(PACKET3_NOP, num_dwords);
|
||||
uint32_t header = MakePacket3Header(PACKET3_NOP, num_dwords * sizeof(uint32_t));
|
||||
APPEND_COMMAND_WRAPPER(cmdbuf, header);
|
||||
if (num_dwords > 1) {
|
||||
std::vector<uint32_t> data_block((num_dwords - 1), 0);
|
||||
|
||||
@@ -304,7 +304,7 @@ class Gfx11CmdBuilder : public CmdBuilder {
|
||||
}
|
||||
|
||||
void BuildNopPacket(CmdBuffer* cmdbuf, uint32_t num_dwords) {
|
||||
uint32_t header = MakePacket3Header(PACKET3_NOP, num_dwords);
|
||||
uint32_t header = MakePacket3Header(PACKET3_NOP, num_dwords * sizeof(uint32_t));
|
||||
APPEND_COMMAND_WRAPPER(cmdbuf, header);
|
||||
if (num_dwords > 1) {
|
||||
std::vector<uint32_t> data_block((num_dwords - 1), 0);
|
||||
|
||||
@@ -325,7 +325,7 @@ class Gfx9CmdBuilder : public CmdBuilder {
|
||||
}
|
||||
|
||||
void BuildNopPacket(CmdBuffer* cmdbuf, uint32_t num_dwords) {
|
||||
uint32_t header = MakePacket3Header(PACKET3_NOP, num_dwords);
|
||||
uint32_t header = MakePacket3Header(PACKET3_NOP, num_dwords * sizeof(uint32_t));
|
||||
APPEND_COMMAND_WRAPPER(cmdbuf, header);
|
||||
if (num_dwords > 1) {
|
||||
std::vector<uint32_t> data_block((num_dwords - 1), 0);
|
||||
|
||||
@@ -104,19 +104,6 @@ class GpuSpmBuilder : public SpmBuilder, protected Primitives {
|
||||
// 3. Program the RLC_PERFMON_SEGMENT_SIZE register.
|
||||
builder.BuildWriteUConfigRegPacket(cmd_buffer, Primitives::RLC_SPM_PERFMON_CNTL__ADDR,
|
||||
Primitives::rlc_spm_perfmon_cntl_value(sampling_rate));
|
||||
if (!config->spm_kfd_mode) {
|
||||
builder.BuildWriteUConfigRegPacket(cmd_buffer, Primitives::RLC_SPM_PERFMON_RING_BASE_LO__ADDR,
|
||||
buffer_ptr);
|
||||
builder.BuildWriteUConfigRegPacket(cmd_buffer, Primitives::RLC_SPM_PERFMON_RING_BASE_HI__ADDR,
|
||||
buffer_ptr >> 32);
|
||||
builder.BuildWriteUConfigRegPacket(cmd_buffer, Primitives::RLC_SPM_PERFMON_RING_SIZE__ADDR,
|
||||
buffer_size);
|
||||
}
|
||||
|
||||
// Setting VMID
|
||||
if (!config->spm_kfd_mode)
|
||||
builder.BuildWriteUConfigRegPacket(cmd_buffer, Primitives::RLC_SPM_MC_CNTL__ADDR,
|
||||
Primitives::rlc_spm_mc_cntl_value());
|
||||
|
||||
// Iterate through the list of blocks to create PM4 packets to read counter values
|
||||
// Below pair.first is the block id of a counter event and pair.second is the index into
|
||||
@@ -272,17 +259,16 @@ class GpuSpmBuilder : public SpmBuilder, protected Primitives {
|
||||
for (size_t j = 0; j < block_info->instance_count; ++j) {
|
||||
builder.BuildWriteUConfigRegPacket(cmd_buffer, Primitives::GRBM_GFX_INDEX_ADDR,
|
||||
Primitives::grbm_inst_se_sh_index_value(j, 0, 0));
|
||||
builder.BuildWriteUConfigRegPacket(cmd_buffer, block_info->delay_info[j].reg,
|
||||
builder.BuildWriteUConfigRegPacket(cmd_buffer, block_info->delay_info.reg,
|
||||
Primitives::get_spm_global_delay(counter_des, j));
|
||||
}
|
||||
} else {
|
||||
for (size_t i = 0; i < config->spm_se_number_total; ++i) {
|
||||
for (size_t i = 0; i < config->se_number; ++i) {
|
||||
for (size_t j = 0; j < block_info->instance_count; ++j) {
|
||||
int delay_index = i * block_info->instance_count + j;
|
||||
builder.BuildWriteUConfigRegPacket(cmd_buffer, Primitives::GRBM_GFX_INDEX_ADDR,
|
||||
Primitives::grbm_inst_se_index_value(j, i));
|
||||
builder.BuildWriteUConfigRegPacket(cmd_buffer,
|
||||
block_info->delay_info[delay_index].reg,
|
||||
block_info->delay_info.reg,
|
||||
Primitives::get_spm_se_delay(counter_des, i, j));
|
||||
}
|
||||
}
|
||||
@@ -341,7 +327,7 @@ class GpuSpmBuilder : public SpmBuilder, protected Primitives {
|
||||
builder.BuildWriteUConfigRegPacket(
|
||||
cmd_buffer, Primitives::RLC_SPM_PERFMON_SEGMENT_SIZE__ADDR,
|
||||
Primitives::rlc_spm_perfmon_segment_size_value(global_count, se_count));
|
||||
if (config->mi100) {
|
||||
if (config->spm_has_core1) {
|
||||
builder.BuildWriteUConfigRegPacket(
|
||||
cmd_buffer, Primitives::RLC_SPM_PERFMON_SEGMENT_SIZE_CORE1__ADDR,
|
||||
Primitives::rlc_spm_perfmon_segment_size_core1_value(se_count));
|
||||
|
||||
@@ -42,18 +42,20 @@ struct TraceConfig {
|
||||
uint32_t perfMASK = ~0u;
|
||||
uint32_t perfCTRL = 0;
|
||||
std::vector<std::pair<size_t, size_t>> perfcounters{};
|
||||
// GC configurations used by both TT and SPM
|
||||
uint32_t se_number = 0;
|
||||
uint32_t sa_number = 0;
|
||||
uint32_t xcc_number = 0;
|
||||
// SPM mode
|
||||
bool spm_sq_32bit_mode = true;
|
||||
bool spm_kfd_mode = true;
|
||||
bool mi100 = false;
|
||||
bool spm_has_core1 = false;
|
||||
uint32_t spm_sample_delay_max = 0;
|
||||
|
||||
void* control_buffer_ptr = nullptr;
|
||||
uint32_t control_buffer_size = 0;
|
||||
void* data_buffer_ptr = nullptr;
|
||||
uint32_t data_buffer_size = 0;
|
||||
|
||||
// SE number for tracing
|
||||
uint32_t spm_se_number_total = 0;
|
||||
// concurrent kernels mode
|
||||
uint32_t concurrent = 0;
|
||||
// SE mask for tracing; note -> replicated for all XCCs
|
||||
|
||||
Verwijs in nieuw issue
Block a user