API normalizing
This commit is contained in:
+7
-4
@@ -34,15 +34,18 @@ The library source tree:
|
||||
- Set environment:
|
||||
export HIP_PATH=<your path>/HIP
|
||||
export HCC_PATH=<your path>/hcc
|
||||
export HCC_HOME=<your path>/hcc/lib
|
||||
export HCC_HOME=<your path>/hcc/build
|
||||
export CMAKE_PREFIX_PATH=/opt/rocm/lib:/opt/rocm/include/hsa
|
||||
|
||||
- Build HCC:
|
||||
cd <your path>/hcc
|
||||
mkdir build && cd build && cmake -DUSE_PROF_API=1 .. && make -j <nproc>
|
||||
cd <your path>/hcc && mkdir build && cd build
|
||||
cmake -DUSE_PROF_API=1 -DPROF_API_HEADER_PATH=<your path>/roctracer/inc/roctracer ..
|
||||
make -j <nproc>
|
||||
|
||||
- Build HIP:
|
||||
cd <your path>/HIP && mkdir build && cd build && cmake -DUSE_PROF_API=1 .. && make -j <nproc>
|
||||
cd <your path>/HIP && mkdir build && cd build
|
||||
cmake -DUSE_PROF_API=1 -DPROF_API_HEADER_PATH=<your path>/roctracer/inc/roctracer ..
|
||||
make -j <nproc>
|
||||
ln -s HIP/build HIP/lib
|
||||
|
||||
- Build ROCtracer
|
||||
|
||||
+7
-10
@@ -80,7 +80,8 @@ typedef activity_domain_t roctracer_domain_t;
|
||||
// NULL returned on the error and the library errno is set
|
||||
const char* roctracer_id_string(
|
||||
const uint32_t& domain, // tracing domain
|
||||
const uint32_t& id); // activity ID
|
||||
const uint32_t& id, // activity ID
|
||||
const uint32_t& kind); // activity kind
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Callback API
|
||||
@@ -93,17 +94,15 @@ const char* roctracer_id_string(
|
||||
typedef activity_rtapi_callback_t roctracer_rtapi_callback_t;
|
||||
|
||||
// Enable runtime API callbacks
|
||||
roctracer_status_t roctracer_enable_api_callback(
|
||||
roctracer_status_t roctracer_enable_callback(
|
||||
activity_domain_t domain, // runtime API domain
|
||||
uint32_t kind, // API kind
|
||||
uint32_t id, // API call ID
|
||||
activity_rtapi_callback_t callback, // callback function pointer
|
||||
void* arg); // [in/out] callback arg
|
||||
|
||||
// Disable runtime API callbacks
|
||||
roctracer_status_t roctracer_disable_api_callback(
|
||||
roctracer_status_t roctracer_disable_callback(
|
||||
activity_domain_t domain, // runtime API domain
|
||||
uint32_t kind, // API kind
|
||||
uint32_t id); // API call ID
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -170,20 +169,18 @@ roctracer_pool_t* roctracer_default_pool(
|
||||
roctracer_pool_t* pool = NULL); // [in] new default pool if not NULL
|
||||
|
||||
// Enable activity records logging
|
||||
roctracer_status_t roctracer_enable_api_activity(
|
||||
roctracer_status_t roctracer_enable_activity(
|
||||
activity_domain_t domain, // runtime API domain
|
||||
uint32_t kind, // activity kind
|
||||
uint32_t id, // activity ID
|
||||
roctracer_pool_t* pool = NULL); // memory pool, NULL is a default one
|
||||
|
||||
// Disable activity records logging
|
||||
roctracer_status_t roctracer_disable_api_activity(
|
||||
roctracer_status_t roctracer_disable_activity(
|
||||
activity_domain_t domain, // runtime API domain
|
||||
uint32_t kind, // activity kind
|
||||
uint32_t id); // activity ID
|
||||
|
||||
// Flush available activity records
|
||||
roctracer_status_t roctracer_flush_api_activity(
|
||||
roctracer_status_t roctracer_flush_activity(
|
||||
roctracer_pool_t* pool = NULL); // memory pool, NULL is a default one
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
+13
-25
@@ -347,11 +347,11 @@ PUBLIC_API const char* roctracer_error_string() {
|
||||
|
||||
// Return ID string by given domain and activity/API ID
|
||||
// NULL returned on the error and the library errno is set
|
||||
PUBLIC_API const char* roctracer_id_string(const uint32_t& domain, const uint32_t& id) {
|
||||
PUBLIC_API const char* roctracer_id_string(const uint32_t& domain, const uint32_t& id, const uint32_t& kind) {
|
||||
API_METHOD_PREFIX
|
||||
switch (domain) {
|
||||
case ACTIVITY_DOMAIN_HCC_OPS: {
|
||||
return Kalmar::CLAMP::GetCmdName(id);
|
||||
return Kalmar::CLAMP::GetCmdName(kind);
|
||||
break;
|
||||
}
|
||||
case ACTIVITY_DOMAIN_HIP_API: {
|
||||
@@ -365,9 +365,8 @@ PUBLIC_API const char* roctracer_id_string(const uint32_t& domain, const uint32_
|
||||
}
|
||||
|
||||
// Enable runtime API callbacks
|
||||
PUBLIC_API roctracer_status_t roctracer_enable_api_callback(
|
||||
PUBLIC_API roctracer_status_t roctracer_enable_callback(
|
||||
roctracer_domain_t domain,
|
||||
uint32_t kind,
|
||||
uint32_t id,
|
||||
roctracer_rtapi_callback_t callback,
|
||||
void* user_data)
|
||||
@@ -378,7 +377,6 @@ PUBLIC_API roctracer_status_t roctracer_enable_api_callback(
|
||||
if (id != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_ANY: id != 0");
|
||||
id = HIP_API_ID_ANY;
|
||||
case ACTIVITY_DOMAIN_HIP_API: {
|
||||
if (kind != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_HIP_API: kind != 0, not supported");
|
||||
hipError_t hip_err = hipRegisterApiCallback(id, (void*)callback, user_data);
|
||||
if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRegisterApiCallback error(" << hip_err << ")");
|
||||
break;
|
||||
@@ -390,9 +388,8 @@ PUBLIC_API roctracer_status_t roctracer_enable_api_callback(
|
||||
}
|
||||
|
||||
// Enable runtime API callbacks
|
||||
PUBLIC_API roctracer_status_t roctracer_disable_api_callback(
|
||||
PUBLIC_API roctracer_status_t roctracer_disable_callback(
|
||||
roctracer_domain_t domain,
|
||||
uint32_t kind,
|
||||
uint32_t id)
|
||||
{
|
||||
API_METHOD_PREFIX
|
||||
@@ -401,7 +398,6 @@ PUBLIC_API roctracer_status_t roctracer_disable_api_callback(
|
||||
if (id != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_ANY: id != 0");
|
||||
id = HIP_API_ID_ANY;
|
||||
case ACTIVITY_DOMAIN_HIP_API: {
|
||||
if (kind != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_HIP_API: kind != 0, not supported");
|
||||
hipError_t hip_err = hipRemoveApiCallback(id);
|
||||
if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRemoveApiCallback error(" << hip_err << ")");
|
||||
break;
|
||||
@@ -450,9 +446,8 @@ PUBLIC_API roctracer_status_t roctracer_close_pool(roctracer_pool_t* pool) {
|
||||
}
|
||||
|
||||
// Enable activity records logging
|
||||
PUBLIC_API roctracer_status_t roctracer_enable_api_activity(
|
||||
PUBLIC_API roctracer_status_t roctracer_enable_activity(
|
||||
roctracer_domain_t domain,
|
||||
uint32_t kind,
|
||||
uint32_t id,
|
||||
roctracer_pool_t* pool)
|
||||
{
|
||||
@@ -460,19 +455,16 @@ PUBLIC_API roctracer_status_t roctracer_enable_api_activity(
|
||||
if (pool == NULL) pool = roctracer_default_pool();
|
||||
switch (domain) {
|
||||
case ACTIVITY_DOMAIN_ANY:
|
||||
if (kind != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_ANY: kind != 0");
|
||||
if (id != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_ANY: id != 0");
|
||||
roctracer_enable_api_activity(ACTIVITY_DOMAIN_HCC_OPS, hc::HSA_OP_ID_ANY, 0, pool);
|
||||
roctracer_enable_api_activity(ACTIVITY_DOMAIN_HIP_API, 0, HIP_API_ID_ANY, pool);
|
||||
roctracer_enable_activity(ACTIVITY_DOMAIN_HCC_OPS, hc::HSA_OP_ID_ANY, pool);
|
||||
roctracer_enable_activity(ACTIVITY_DOMAIN_HIP_API, HIP_API_ID_ANY, pool);
|
||||
break;
|
||||
case ACTIVITY_DOMAIN_HCC_OPS: {
|
||||
if (id != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_HCC_OPS: id != 0, not supported");
|
||||
const bool err = Kalmar::CLAMP::SetActivityCallback(kind, (void*)roctracer::AsyncActivityCallback, (void*)pool);
|
||||
const bool err = Kalmar::CLAMP::SetActivityCallback(id, (void*)roctracer::AsyncActivityCallback, (void*)pool);
|
||||
if (err == true) HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "Kalmar::CLAMP::SetActivityCallback error");
|
||||
break;
|
||||
}
|
||||
case ACTIVITY_DOMAIN_HIP_API: {
|
||||
if (kind != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_HIP_API: kind != 0, not supported");
|
||||
const hipError_t hip_err = hipRegisterActivityCallback(id, (void*)roctracer::SyncActivityCallback, (void*)pool);
|
||||
if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRegisterActivityCallback error(" << hip_err << ")");
|
||||
break;
|
||||
@@ -484,27 +476,23 @@ PUBLIC_API roctracer_status_t roctracer_enable_api_activity(
|
||||
}
|
||||
|
||||
// Disable activity records logging
|
||||
PUBLIC_API roctracer_status_t roctracer_disable_api_activity(
|
||||
PUBLIC_API roctracer_status_t roctracer_disable_activity(
|
||||
roctracer_domain_t domain,
|
||||
uint32_t kind,
|
||||
uint32_t id)
|
||||
{
|
||||
API_METHOD_PREFIX
|
||||
switch (domain) {
|
||||
case ACTIVITY_DOMAIN_ANY:
|
||||
if (kind != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_ANY: kind != 0");
|
||||
if (id != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_ANY: id != 0");
|
||||
roctracer_disable_api_activity(ACTIVITY_DOMAIN_HCC_OPS, hc::HSA_OP_ID_ANY, 0);
|
||||
roctracer_disable_api_activity(ACTIVITY_DOMAIN_HIP_API, 0, HIP_API_ID_ANY);
|
||||
roctracer_disable_activity(ACTIVITY_DOMAIN_HCC_OPS, hc::HSA_OP_ID_ANY);
|
||||
roctracer_disable_activity(ACTIVITY_DOMAIN_HIP_API, HIP_API_ID_ANY);
|
||||
break;
|
||||
case ACTIVITY_DOMAIN_HCC_OPS: {
|
||||
if (id != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_HCC_OPS: id != 0, not supported");
|
||||
const bool err = Kalmar::CLAMP::SetActivityCallback(kind, NULL, NULL);
|
||||
const bool err = Kalmar::CLAMP::SetActivityCallback(id, NULL, NULL);
|
||||
if (err == true) HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "Kalmar::CLAMP::SetActivityCallback(NULL) error");
|
||||
break;
|
||||
}
|
||||
case ACTIVITY_DOMAIN_HIP_API: {
|
||||
if (kind != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_HIP_API: kind != 0, not supported");
|
||||
const hipError_t hip_err = hipRemoveActivityCallback(id);
|
||||
if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRemoveActivityCallback error(" << hip_err << ")");
|
||||
break;
|
||||
@@ -516,7 +504,7 @@ PUBLIC_API roctracer_status_t roctracer_disable_api_activity(
|
||||
}
|
||||
|
||||
// Flush available activity records
|
||||
PUBLIC_API roctracer_status_t roctracer_flush_api_activity(roctracer_pool_t* pool) {
|
||||
PUBLIC_API roctracer_status_t roctracer_flush_activity(roctracer_pool_t* pool) {
|
||||
API_METHOD_PREFIX
|
||||
if (pool == NULL) pool = roctracer_default_pool();
|
||||
roctracer::MemoryPool* memory_pool = reinterpret_cast<roctracer::MemoryPool*>(pool);
|
||||
|
||||
@@ -161,7 +161,7 @@ void hip_api_callback(
|
||||
(void)arg;
|
||||
const hip_api_data_t* data = reinterpret_cast<const hip_api_data_t*>(callback_data);
|
||||
fprintf(stdout, "<%s id(%u)\tcorrelation_id(%lu) %s> ",
|
||||
roctracer_id_string(ACTIVITY_DOMAIN_HIP_API, cid),
|
||||
roctracer_id_string(ACTIVITY_DOMAIN_HIP_API, cid, 0),
|
||||
cid,
|
||||
data->correlation_id,
|
||||
(data->phase == ACTIVITY_API_PHASE_ENTER) ? "on-enter" : "on-exit");
|
||||
@@ -211,7 +211,7 @@ void activity_callback(const char* begin, const char* end, void* arg) {
|
||||
const roctracer_record_t* end_record = reinterpret_cast<const roctracer_record_t*>(end);
|
||||
fprintf(stdout, "\tActivity records:\n"); fflush(stdout);
|
||||
while (record < end_record) {
|
||||
const char * name = roctracer_id_string(record->domain, record->activity_id);
|
||||
const char * name = roctracer_id_string(record->domain, record->activity_id, record->kind);
|
||||
fprintf(stdout, "\t%s\tcorrelation_id(%lu) time_ns(%lu:%lu) device_id(%d) stream_id(%lu)",
|
||||
name,
|
||||
record->correlation_id,
|
||||
@@ -220,7 +220,7 @@ void activity_callback(const char* begin, const char* end, void* arg) {
|
||||
record->device_id,
|
||||
record->stream_id
|
||||
);
|
||||
if (record->kind == hc::HSA_OP_ID_COPY) fprintf(stdout, " bytes(0x%zx)", record->bytes);
|
||||
if (record->activity_id == hc::HSA_OP_ID_COPY) fprintf(stdout, " bytes(0x%zx)", record->bytes);
|
||||
fprintf(stdout, "\n");
|
||||
fflush(stdout);
|
||||
ROCTRACER_CALL(roctracer_next_record(record, &record));
|
||||
@@ -236,15 +236,15 @@ void start_tracing() {
|
||||
properties.buffer_callback_fun = activity_callback;
|
||||
ROCTRACER_CALL(roctracer_open_pool(&properties));
|
||||
// Enable HIP API callbacks
|
||||
ROCTRACER_CALL(roctracer_enable_api_callback(ACTIVITY_DOMAIN_ANY, 0, 0, hip_api_callback, NULL));
|
||||
ROCTRACER_CALL(roctracer_enable_callback(ACTIVITY_DOMAIN_ANY, 0, hip_api_callback, NULL));
|
||||
// Enable HIP activity tracing
|
||||
ROCTRACER_CALL(roctracer_enable_api_activity(ACTIVITY_DOMAIN_ANY, 0, 0));
|
||||
ROCTRACER_CALL(roctracer_enable_activity(ACTIVITY_DOMAIN_ANY, 0));
|
||||
}
|
||||
|
||||
// Stop tracing routine
|
||||
void stop_tracing() {
|
||||
ROCTRACER_CALL(roctracer_disable_api_callback(ACTIVITY_DOMAIN_ANY, 0, 0));
|
||||
ROCTRACER_CALL(roctracer_disable_api_activity(ACTIVITY_DOMAIN_ANY, 0, 0));
|
||||
ROCTRACER_CALL(roctracer_disable_callback(ACTIVITY_DOMAIN_ANY, 0));
|
||||
ROCTRACER_CALL(roctracer_disable_activity(ACTIVITY_DOMAIN_ANY, 0));
|
||||
ROCTRACER_CALL(roctracer_close_pool());
|
||||
std::cout << "# STOP #############################" << std::endl << std::flush;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user