get_time API: make public; extende with more time id: coarse and raw; added time error return value;

Change-Id: I1641eb2c38915222204617e07fc0bfb388bb8346
This commit is contained in:
Evgeny
2020-04-30 02:38:18 -05:00
parent 2df34c40ea
commit 3ce98d33d4
7 changed files with 122 additions and 31 deletions
+5 -4
View File
@@ -146,8 +146,9 @@ HsaRsrcFactory::HsaRsrcFactory(bool initialize_hsa) : initialize_hsa_(initialize
// Time correlation
const uint32_t corr_iters = 1000;
CorrelateTime(HsaTimer::TIME_ID_CLOCK_REALTIME, corr_iters);
CorrelateTime(HsaTimer::TIME_ID_CLOCK_MONOTONIC, corr_iters);
for (unsigned time_id = 0; time_id < HsaTimer::TIME_ID_NUMBER; time_id += 1) {
CorrelateTime((HsaTimer::time_id_t)time_id, corr_iters);
}
// System timeout
timeout_ = (timeout_ns_ == HsaTimer::TIMESTAMP_MAX) ? timeout_ns_ : timer_->ns_to_sysclock(timeout_ns_);
@@ -692,14 +693,14 @@ uint64_t HsaRsrcFactory::Submit(hsa_queue_t* queue, const void* packet, size_t s
return write_idx;
}
const char* HsaRsrcFactory::GetKernelName(uint64_t addr) {
const char* HsaRsrcFactory::GetKernelNameRef(uint64_t addr) {
std::lock_guard<mutex_t> lck(mutex_);
const auto it = symbols_map_->find(addr);
if (it == symbols_map_->end()) {
fprintf(stderr, "HsaRsrcFactory::kernel addr (0x%lx) is not found\n", addr);
abort();
}
return strdup(it->second);
return it->second;
}
void HsaRsrcFactory::EnableExecutableTracking(HsaApiTable* table) {
+23 -6
View File
@@ -181,7 +181,10 @@ class HsaTimer {
enum time_id_t {
TIME_ID_CLOCK_REALTIME = 0,
TIME_ID_CLOCK_MONOTONIC = 1,
TIME_ID_CLOCK_REALTIME_COARSE = 1,
TIME_ID_CLOCK_MONOTONIC = 2,
TIME_ID_CLOCK_MONOTONIC_COARSE = 3,
TIME_ID_CLOCK_MONOTONIC_RAW = 4,
TIME_ID_NUMBER
};
@@ -201,7 +204,7 @@ class HsaTimer {
}
// Method for timespec/ns conversion
timestamp_t timespec_to_ns(const timespec& time) const {
static timestamp_t timespec_to_ns(const timespec& time) {
return ((timestamp_t)time.tv_sec * 1000000000) + time.tv_nsec;
}
@@ -225,13 +228,22 @@ class HsaTimer {
void correlated_pair_ns(time_id_t time_id, uint32_t iters,
timestamp_t* timestamp_v, timestamp_t* time_v, timestamp_t* error_v) {
clockid_t clock_id = 0;
switch (clock_id) {
switch (time_id) {
case TIME_ID_CLOCK_REALTIME:
clock_id = CLOCK_REALTIME;
break;
case TIME_ID_CLOCK_REALTIME_COARSE:
clock_id = CLOCK_REALTIME_COARSE;
break;
case TIME_ID_CLOCK_MONOTONIC:
clock_id = CLOCK_MONOTONIC;
break;
case TIME_ID_CLOCK_MONOTONIC_COARSE:
clock_id = CLOCK_MONOTONIC_COARSE;
break;
case TIME_ID_CLOCK_MONOTONIC_RAW:
clock_id = CLOCK_MONOTONIC_RAW;
break;
default:
CHECK_STATUS("internal error: invalid time_id", HSA_STATUS_ERROR);
}
@@ -394,7 +406,7 @@ class HsaRsrcFactory {
// Enable executables loading tracking
static bool IsExecutableTracking() { return executable_tracking_on_; }
static void EnableExecutableTracking(HsaApiTable* table);
static const char* GetKernelName(uint64_t addr);
static const char* GetKernelNameRef(uint64_t addr);
// Initialize HSA API table
void static InitHsaApiTable(HsaApiTable* table);
@@ -429,9 +441,14 @@ class HsaRsrcFactory {
time_error_[time_id] = error_v;
}
hsa_status_t GetTime(uint32_t time_id, uint64_t value, uint64_t* time) {
hsa_status_t GetTimeVal(uint32_t time_id, uint64_t time_stamp, uint64_t* time_value) {
if (time_id >= HsaTimer::TIME_ID_NUMBER) return HSA_STATUS_ERROR;
*time = value + time_shift_[time_id];
*time_value = time_stamp + time_shift_[time_id];
return HSA_STATUS_SUCCESS;
}
hsa_status_t GetTimeErr(uint32_t time_id, uint64_t* err) {
*err = time_error_[time_id];
return HSA_STATUS_SUCCESS;
}