dispatch data th-id, queue-id, kernel-object
Change-Id: Ic5593603c6587cad17be33618d011a9aefc648ab
This commit is contained in:
@@ -26,6 +26,7 @@ THE SOFTWARE.
|
||||
#include <amd_hsa_kernel_code.h>
|
||||
#include <cxxabi.h>
|
||||
#include <dlfcn.h>
|
||||
#include <sys/syscall.h>
|
||||
|
||||
#include <atomic>
|
||||
#include <iostream>
|
||||
@@ -49,6 +50,7 @@ class InterceptQueue {
|
||||
typedef std::map<uint64_t, InterceptQueue*> obj_map_t;
|
||||
typedef hsa_status_t (*queue_callback_t)(hsa_queue_t*, void* data);
|
||||
typedef void (*queue_event_callback_t)(hsa_status_t status, hsa_queue_t *queue, void *arg);
|
||||
typedef uint32_t queue_id_t;
|
||||
|
||||
static void HsaIntercept(HsaApiTable* table);
|
||||
|
||||
@@ -79,6 +81,8 @@ class InterceptQueue {
|
||||
(*obj_map_)[(uint64_t)(*queue)] = obj;
|
||||
status = proxy->SetInterceptCB(OnSubmitCB, obj);
|
||||
obj->queue_event_callback_ = callback;
|
||||
obj->queue_id = current_queue_id;
|
||||
++current_queue_id;
|
||||
|
||||
in_constr_call_ = false;
|
||||
return status;
|
||||
@@ -139,13 +143,17 @@ class InterceptQueue {
|
||||
}
|
||||
|
||||
// Prepareing dispatch callback data
|
||||
const char* kernel_name = GetKernelName(dispatch_packet);
|
||||
uint64_t kernel_symbol = GetKernelSymbol(dispatch_packet);
|
||||
const char* kernel_name = GetKernelName(kernel_symbol);
|
||||
rocprofiler_callback_data_t data = {obj->agent_info_->dev_id,
|
||||
obj->agent_info_->dev_index,
|
||||
obj->queue_,
|
||||
user_que_idx,
|
||||
obj->queue_id,
|
||||
dispatch_packet,
|
||||
kernel_name,
|
||||
kernel_symbol,
|
||||
syscall(__NR_gettid),
|
||||
(tracker_entry) ? tracker_entry->record : NULL};
|
||||
|
||||
// Calling dispatch callback
|
||||
@@ -222,7 +230,7 @@ class InterceptQueue {
|
||||
return static_cast<hsa_packet_type_t>((*header >> HSA_PACKET_HEADER_TYPE) & header_type_mask);
|
||||
}
|
||||
|
||||
static const char* GetKernelName(const hsa_kernel_dispatch_packet_t* dispatch_packet) {
|
||||
static uint64_t GetKernelSymbol(const hsa_kernel_dispatch_packet_t* dispatch_packet) {
|
||||
const amd_kernel_code_t* kernel_code = NULL;
|
||||
hsa_status_t status =
|
||||
util::HsaRsrcFactory::Instance().LoaderApi()->hsa_ven_amd_loader_query_host_address(
|
||||
@@ -231,8 +239,12 @@ class InterceptQueue {
|
||||
if (HSA_STATUS_SUCCESS != status) {
|
||||
kernel_code = reinterpret_cast<amd_kernel_code_t*>(dispatch_packet->kernel_object);
|
||||
}
|
||||
amd_runtime_loader_debug_info_t* dbg_info = reinterpret_cast<amd_runtime_loader_debug_info_t*>(
|
||||
kernel_code->runtime_loader_kernel_symbol);
|
||||
return kernel_code->runtime_loader_kernel_symbol;
|
||||
}
|
||||
|
||||
static const char* GetKernelName(const uint64_t kernel_symbol) {
|
||||
amd_runtime_loader_debug_info_t* dbg_info =
|
||||
reinterpret_cast<amd_runtime_loader_debug_info_t*>(kernel_symbol);
|
||||
const char* kernel_name = (dbg_info != NULL) ? dbg_info->kernel_name : NULL;
|
||||
|
||||
// Kernel name is mangled name
|
||||
@@ -298,11 +310,13 @@ class InterceptQueue {
|
||||
static Tracker* tracker_;
|
||||
static bool tracker_on_;
|
||||
static bool in_constr_call_;
|
||||
static queue_id_t current_queue_id;
|
||||
|
||||
hsa_queue_t* const queue_;
|
||||
ProxyQueue* const proxy_;
|
||||
const util::AgentInfo* agent_info_;
|
||||
queue_event_callback_t queue_event_callback_;
|
||||
queue_id_t queue_id;
|
||||
};
|
||||
|
||||
} // namespace rocprofiler
|
||||
|
||||
Reference in New Issue
Block a user