@@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef INC_ROCTRACER_PROF_PROTOCOL_H_
|
||||
#define INC_ROCTRACER_PROF_PROTOCOL_H_
|
||||
#ifndef INC_EXT_PROF_PROTOCOL_H_
|
||||
#define INC_EXT_PROF_PROTOCOL_H_
|
||||
|
||||
// Traced API domains
|
||||
typedef enum {
|
||||
@@ -52,8 +52,16 @@ struct activity_record_t {
|
||||
activity_correlation_id_t correlation_id; // activity correlation ID
|
||||
uint64_t begin_ns; // host begin timestamp
|
||||
uint64_t end_ns; // host end timestamp
|
||||
int device_id; // device id
|
||||
uint64_t stream_id; // stream id
|
||||
union {
|
||||
struct {
|
||||
int device_id; // device id
|
||||
uint64_t queue_id; // queue id
|
||||
};
|
||||
struct {
|
||||
uint32_t process_id; // device id
|
||||
uint32_t thread_id; // thread id
|
||||
};
|
||||
};
|
||||
size_t bytes; // data size bytes
|
||||
};
|
||||
|
||||
@@ -62,4 +70,4 @@ typedef activity_record_t* (*activity_sync_callback_t)(uint32_t cid, activity_re
|
||||
// Activity async calback type
|
||||
typedef void (*activity_async_callback_t)(uint32_t op, void* record, void* arg);
|
||||
|
||||
#endif // INC_ROCTRACER_PROF_PROTOCOL_H_
|
||||
#endif // INC_EXT_PROF_PROTOCOL_H_
|
||||
|
||||
@@ -29,6 +29,8 @@ THE SOFTWARE.
|
||||
#include <mutex>
|
||||
#include <string.h>
|
||||
#include <pthread.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/syscall.h>
|
||||
|
||||
#include "ext/hsa_rt_utils.hpp"
|
||||
#include "util/exception.h"
|
||||
@@ -276,7 +278,7 @@ DESTRUCTOR_API void destructor() {
|
||||
util::Logger::Destroy();
|
||||
}
|
||||
|
||||
roctracer_record_t* SyncActivityCallback(
|
||||
roctracer_record_t* HIP_SyncActivityCallback(
|
||||
uint32_t activity_id,
|
||||
roctracer_record_t* record,
|
||||
const void* callback_data,
|
||||
@@ -303,7 +305,8 @@ roctracer_record_t* SyncActivityCallback(
|
||||
return record;
|
||||
} else {
|
||||
record->end_ns = timer.timestamp_ns();
|
||||
Kalmar::CLAMP::GetActivityCoord(&(record->device_id), &(record->stream_id));
|
||||
record->process_id = syscall(__NR_getpid);
|
||||
record->thread_id = syscall(__NR_gettid);
|
||||
pool->Write(*record);
|
||||
// Clearing record in HCC
|
||||
Kalmar::CLAMP::SetActivityRecord(0);
|
||||
@@ -311,7 +314,7 @@ roctracer_record_t* SyncActivityCallback(
|
||||
}
|
||||
}
|
||||
|
||||
void AsyncActivityCallback(
|
||||
void HCC_AsyncActivityCallback(
|
||||
uint32_t op_id,
|
||||
void* record,
|
||||
void* arg)
|
||||
@@ -460,12 +463,12 @@ PUBLIC_API roctracer_status_t roctracer_enable_activity(
|
||||
roctracer_enable_activity(ACTIVITY_DOMAIN_HIP_API, HIP_API_ID_ANY, pool);
|
||||
break;
|
||||
case ACTIVITY_DOMAIN_HCC_OPS: {
|
||||
const bool err = Kalmar::CLAMP::SetActivityCallback(id, (void*)roctracer::AsyncActivityCallback, (void*)pool);
|
||||
const bool err = Kalmar::CLAMP::SetActivityCallback(id, (void*)roctracer::HCC_AsyncActivityCallback, (void*)pool);
|
||||
if (err == true) HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "Kalmar::CLAMP::SetActivityCallback error");
|
||||
break;
|
||||
}
|
||||
case ACTIVITY_DOMAIN_HIP_API: {
|
||||
const hipError_t hip_err = hipRegisterActivityCallback(id, (void*)roctracer::SyncActivityCallback, (void*)pool);
|
||||
const hipError_t hip_err = hipRegisterActivityCallback(id, (void*)roctracer::HIP_SyncActivityCallback, (void*)pool);
|
||||
if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRegisterActivityCallback error(" << hip_err << ")");
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -212,14 +212,26 @@ void activity_callback(const char* begin, const char* end, void* arg) {
|
||||
fprintf(stdout, "\tActivity records:\n"); fflush(stdout);
|
||||
while (record < end_record) {
|
||||
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)",
|
||||
fprintf(stdout, "\t%s\tcorrelation_id(%lu) time_ns(%lu:%lu)",
|
||||
name,
|
||||
record->correlation_id,
|
||||
record->begin_ns,
|
||||
record->end_ns,
|
||||
record->device_id,
|
||||
record->stream_id
|
||||
record->end_ns
|
||||
);
|
||||
if (record->domain == ACTIVITY_DOMAIN_HIP_API) {
|
||||
fprintf(stdout, " process_id(%u) thread_id(%u)",
|
||||
record->process_id,
|
||||
record->thread_id
|
||||
);
|
||||
} else if (record->domain == ACTIVITY_DOMAIN_HCC_OPS) {
|
||||
fprintf(stdout, " device_id(%d) queue_id(%lu)",
|
||||
record->device_id,
|
||||
record->queue_id
|
||||
);
|
||||
} else {
|
||||
fprintf(stderr, "Bad domain %d\n", record->domain);
|
||||
abort();
|
||||
}
|
||||
if (record->activity_id == hc::HSA_OP_ID_COPY) fprintf(stdout, " bytes(0x%zx)", record->bytes);
|
||||
fprintf(stdout, "\n");
|
||||
fflush(stdout);
|
||||
|
||||
Reference in New Issue
Block a user