Miscellaneous Updates (const-correctness, logic fixes, etc.) (#126)

* Update lib/rocprofiler/hsa/hsa.cpp

- fix logic for constructing callback_contexts and buffered_contexts arrays

* Update include/rocprofiler/{agent,fwd,pc_sampling}.h

- remove rocprofiler_pc_sampling_config_array_t due to const problems
- update rocprofiler_agent_t to use arrays to const data
- remove redundant rocprofiler_query_pc_sampling_agent_configurations
  - this implementation is quite literally looking up info in the agent struct that was passed

* Update lib/rocprofiler/pc_sampling.cpp

- remove rocprofiler_query_pc_sampling_agent_configurations

* update lib/rocprofiler/agent.cpp

- handle const fields
- make mi200_pc_sampling_config variable static

* Update lib/rocprofiler/tests/agent.cpp

- tweak to pc_sampling_configs offset

* Update samples/pc_sampling

- Update sample to reflect minor tweaks to pc_sampling_configs in rocprofiler_agent_t

* Update CI workflow

- remove 'if: ${{ always() }}'
  - I suspect this is why the jobs do not cancel in progress correctly
This commit is contained in:
Jonathan R. Madsen
2023-10-17 00:39:41 -05:00
کامیت شده توسط GitHub
والد a7a971a247
کامیت d1518c65b2
11فایلهای تغییر یافته به همراه59 افزوده شده و 83 حذف شده
+2 -2
مشاهده پرونده
@@ -54,7 +54,7 @@ find_first_gpu_agent_impl(const rocprofiler_agent_t** agents, size_t num_agents,
_out_agent->name,
_out_agent->id.handle,
_out_agent->type,
_out_agent->pc_sampling_configs.size);
_out_agent->num_pc_sampling_configs);
return ROCPROFILER_STATUS_SUCCESS;
}
else
@@ -64,7 +64,7 @@ find_first_gpu_agent_impl(const rocprofiler_agent_t** agents, size_t num_agents,
agents[i]->name,
agents[i]->id.handle,
agents[i]->type,
agents[i]->pc_sampling_configs.size);
agents[i]->num_pc_sampling_configs);
}
}
return ROCPROFILER_STATUS_ERROR;
@@ -57,11 +57,11 @@ second_user()
// After failure, the second user queries available configuration and observes the one chosen by
// the first user.
size_t config_count = 10;
std::vector<rocprofiler_pc_sampling_configuration_t> configs(config_count);
ROCPROFILER_CALL(rocprofiler_query_pc_sampling_agent_configurations(
*gpu_agent, configs.data(), &config_count),
"The second user cannot query available configurations");
auto config_count = gpu_agent->num_pc_sampling_configs;
auto configs = std::vector<rocprofiler_pc_sampling_configuration_t>{};
configs.reserve(config_count);
for(size_t i = 0; i < config_count; ++i)
configs.emplace_back(gpu_agent->pc_sampling_configs[i]);
// Only one configuration should be listed, and its parameters should match the parameters set
// by the first user. Vladimir: Is it ok to use assertions? In the release mode, they might be
@@ -34,7 +34,7 @@ find_all_gpu_agents_supporting_pc_sampling_impl(const rocprofiler_agent_t** agen
// Skip GPU agents not supporting PC sampling
// Vladimir: The assumption is that if a GPU agent does not support PC sampling,
// the size is 0.
if(agents[i]->pc_sampling_configs.size == 0) continue;
if(agents[i]->num_pc_sampling_configs == 0) continue;
_out_agents->push_back(*agents[i]);
@@ -43,7 +43,7 @@ find_all_gpu_agents_supporting_pc_sampling_impl(const rocprofiler_agent_t** agen
agents[i]->name,
agents[i]->id.handle,
agents[i]->type,
agents[i]->pc_sampling_configs.size);
agents[i]->num_pc_sampling_configs);
return ROCPROFILER_STATUS_SUCCESS;
}
else
@@ -53,7 +53,7 @@ find_all_gpu_agents_supporting_pc_sampling_impl(const rocprofiler_agent_t** agen
agents[i]->name,
agents[i]->id.handle,
agents[i]->type,
agents[i]->pc_sampling_configs.size);
agents[i]->num_pc_sampling_configs);
}
}
@@ -78,10 +78,10 @@ configure_host_trap_sampling(rocprofiler_context_id_t context_id,
rocprofiler_agent_t gpu_agent)
{
// Vladimir: Does MI200 have only one configuration?
assert(gpu_agent.pc_sampling_configs.size == 1);
assert(gpu_agent.num_pc_sampling_configs == 1);
// Extract the configuration
auto host_trap_config = gpu_agent.pc_sampling_configs.data[0];
auto host_trap_config = gpu_agent.pc_sampling_configs[0];
// The mean of min_interval and max_interval
auto interval = (host_trap_config.min_interval + host_trap_config.max_interval) / 2;
@@ -96,15 +96,16 @@ configure_host_trap_sampling(rocprofiler_context_id_t context_id,
}
rocprofiler_pc_sampling_configuration_t
extract_stochastic_config(rocprofiler_pc_sampling_config_array_t* configs)
extract_stochastic_config(const rocprofiler_pc_sampling_configuration_t* configs,
size_t num_configs)
{
// Iterate over an array of configurations and return the first one
// with stochasting method.
for(size_t i = 0; i < configs->size; i++)
for(size_t i = 0; i < num_configs; i++)
{
if(configs->data[i].method == ROCPROFILER_PC_SAMPLING_METHOD_STOCHASTIC)
if(configs[i].method == ROCPROFILER_PC_SAMPLING_METHOD_STOCHASTIC)
{
return configs->data[i];
return configs[i];
}
}
printf("Improper use of the `extract_stochastic_config` function.");
@@ -118,7 +119,7 @@ configure_stochastic_sampling(rocprofiler_context_id_t context_id,
{
// Find the configuration matching stochastic sampling in cycles
rocprofiler_pc_sampling_configuration_t stochastic_config =
extract_stochastic_config(&gpu_agent.pc_sampling_configs);
extract_stochastic_config(gpu_agent.pc_sampling_configs, gpu_agent.num_pc_sampling_configs);
// The mean of min_interval and max_interval
auto interval = (stochastic_config.min_interval + stochastic_config.max_interval) / 2;