Handle hsa_queue_destroy after finalization (#679)
* Handle hsa_queue_destroy after finalization
- fixes issue where hsa_queue_destroy(...) is invoked after rocprofiler-sdk has finalized
- hsa::get_queue_controller() returns pointer
- if queue controller is a null pointer, skip invoking QueueController::destroy_queue
* Update HIP/HSA/marker update_table logging
* Update rocprofv3 tests
- remove HSA_TOOLS_LIB env variable
- remove setting ROCPROFILER_LOG_LEVEL env variable
- add timeouts to tests which are missing them
* Disable thread sanitizer deadlock detection
* Update CI workflow
- rename vega20-ubuntu job to core-ci
- enable navi32 in core-ci and sanitizers
* Update run-ci.py
- set gcovr html medium and high threshold
* Update lib/rocprofiler-sdk/hsa/queue_controller.cpp
- remove this capture from enable/disable serialization
* Update lib/rocprofiler-sdk/hsa/{hsa_barrier,profile_serializer}.*
- hsa_barrier::set_barrier accepts const-ref to queue map
- profile_serializer::enable and profile_serializer::disable accept const-ref to queue map
* Logging for HIP/HSA/marker/profile_serializer
* Logging for HIP/HSA/marker/queue_controller
* Improve test_retired_correlation_ids asserts
* Fix tests/counter-collection/validate.py
- scale expected SQ_WAVES counter value based on warp size of GPU
* Tweak github comment for code coverage
* Remove gcovr html high/medium threshold args
* Fix tests/counter-collection/validate.py
- round before casting to int in test_counter_values
* operator bool for profile_serializer
- only wait on CV if profile_serializer is used
* Logging updates (profile_serializer + code_object)
* Update counter-collection validate.py
* QueueController does not wait on CV if finalizing/finalized
* Update CI workflow
- remove navi32 from core job
* Improve HIP/HSA/marker tracing get_functor/functor
- remove lambda wrapper around functor
* Update lib/rocprofiler-sdk/hsa/queue_controller.cpp
- do not acquire cvmutex lock during finalization
* Update lib/rocprofiler-sdk/hsa/hsa_barrier.*
- move ctor and dtor to implementation
- skip signal store screlease and destroy if already finalized
* Update CI workflow
- remove navi32 runners
* bwelton fixes for hangs
* CMake improvements + simplified demangle
- remove amd-comgr from common target (and thus removed from roctx DT_NEEDED)
---------
Co-authored-by: Benjamin Welton <bewelton@amd.com>
This commit is contained in:
gecommit door
GitHub
bovenliggende
78939e705a
commit
2f9b1767e9
@@ -236,8 +236,8 @@ counter_callback_info::get_packet(std::unique_ptr<rocprofiler::hsa::AQLPacket>&
|
||||
if(!ret_pkt)
|
||||
{
|
||||
// If we do not have a packet in the cache, create one.
|
||||
ret_pkt =
|
||||
profile->pkt_generator->construct_packet(hsa::get_queue_controller().get_ext_table());
|
||||
ret_pkt = profile->pkt_generator->construct_packet(
|
||||
CHECK_NOTNULL(hsa::get_queue_controller())->get_ext_table());
|
||||
}
|
||||
|
||||
ret_pkt->before_krn_pkt.clear();
|
||||
@@ -268,7 +268,7 @@ queue_cb(const context::context* ctx,
|
||||
// and maybe adds barrier packets if the state is transitioning from serialized <->
|
||||
// unserialized
|
||||
auto maybe_add_serialization = [&](auto& gen_pkt) {
|
||||
hsa::get_queue_controller().serializer().rlock([&](const auto& serializer) {
|
||||
CHECK_NOTNULL(hsa::get_queue_controller())->serializer().rlock([&](const auto& serializer) {
|
||||
for(auto& s_pkt : serializer.kernel_dispatch(queue))
|
||||
{
|
||||
gen_pkt->before_krn_pkt.push_back(s_pkt.ext_amd_aql_pm4);
|
||||
@@ -392,8 +392,9 @@ completed_cb(const context::context* ctx,
|
||||
|
||||
if(!pkt) return;
|
||||
|
||||
hsa::get_queue_controller().serializer().wlock(
|
||||
[&](auto& serializer) { serializer.kernel_completion_signal(session.queue); });
|
||||
CHECK_NOTNULL(hsa::get_queue_controller())->serializer().wlock([&](auto& serializer) {
|
||||
serializer.kernel_completion_signal(session.queue);
|
||||
});
|
||||
|
||||
// We have no profile config, nothing to output.
|
||||
if(!prof_config) return;
|
||||
@@ -478,10 +479,10 @@ start_context(const context::context* ctx)
|
||||
{
|
||||
if(!ctx || !ctx->counter_collection) return;
|
||||
|
||||
auto& controller = hsa::get_queue_controller();
|
||||
auto* controller = hsa::get_queue_controller();
|
||||
|
||||
bool already_enabled = true;
|
||||
controller.enable_serialization();
|
||||
CHECK_NOTNULL(controller)->enable_serialization();
|
||||
ctx->counter_collection->enabled.wlock([&](auto& enabled) {
|
||||
if(enabled) return;
|
||||
already_enabled = false;
|
||||
@@ -495,7 +496,7 @@ start_context(const context::context* ctx)
|
||||
// Insert our callbacks into HSA Interceptor. This
|
||||
// turns on counter instrumentation.
|
||||
if(cb->queue_id != rocprofiler::hsa::ClientID{-1}) continue;
|
||||
cb->queue_id = controller.add_callback(
|
||||
cb->queue_id = controller->add_callback(
|
||||
std::nullopt,
|
||||
[=](const hsa::Queue& q,
|
||||
const hsa::rocprofiler_packet& kern_pkt,
|
||||
@@ -526,13 +527,14 @@ stop_context(const context::context* ctx)
|
||||
{
|
||||
if(!ctx || !ctx->counter_collection) return;
|
||||
|
||||
auto& controller = hsa::get_queue_controller();
|
||||
auto* controller = hsa::get_queue_controller();
|
||||
|
||||
ctx->counter_collection->enabled.wlock([&](auto& enabled) {
|
||||
if(!enabled) return;
|
||||
enabled = false;
|
||||
});
|
||||
controller.disable_serialization();
|
||||
|
||||
if(controller) controller->disable_serialization();
|
||||
}
|
||||
|
||||
bool
|
||||
|
||||
Verwijs in nieuw issue
Block a user