Skip to content

Commit 29ca7a3

Browse files
committed
[OpenMP] [OMPT] Reset timestamps after they are used.
As shown in ROCm/aomp#851, a certain OMPT trace event may be assigned the timestamps of the previous event if this event was not traced for some reason. To prevent such accidental mis-attribution, reset timestamps to 0 after they are used. Currently, a value of 0 is used to indicate an invalid timestamp so that the timestamp consumer can detect and deal with this issue. Change-Id: Id985ad4e4df08c3a5eb715aeb0d359964fa3797a
1 parent 7d3afaf commit 29ca7a3

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

openmp/libomptarget/include/OmptTracing.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ namespace omp {
3030
namespace target {
3131
namespace ompt {
3232

33+
/// After a timestamp has been read, reset it.
34+
void resetTimestamp(uint64_t *T);
35+
3336
/// A tool may register unique buffer-request and buffer-completion
3437
/// callback functions for a device. The following are utility functions to
3538
/// manage those functions.

openmp/libomptarget/src/OmptTracing.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ std::atomic<uint64_t> llvm::omp::target::ompt::TracingTypesEnabled{0};
6262

6363
bool llvm::omp::target::ompt::TracingActive = false;
6464

65+
void llvm::omp::target::ompt::resetTimestamp(uint64_t *T) { *T = 0; }
66+
6567
ompt_callback_buffer_request_t
6668
llvm::omp::target::ompt::getBufferRequestFn(int DeviceId) {
6769
std::unique_lock<std::mutex> Lock(BufferManagementFnMutex);
@@ -220,8 +222,10 @@ void Interface::setTraceRecordCommon(ompt_record_ompt_t *DataPtr,
220222

221223
if (CallbackType == ompt_callback_target)
222224
DataPtr->time = 0; // Currently, no consumer, so no need to set it
223-
else
225+
else {
224226
DataPtr->time = TraceRecordStartTime;
227+
resetTimestamp(&TraceRecordStartTime);
228+
}
225229

226230
DataPtr->thread_id = getThreadId();
227231
DataPtr->target_id = TargetData.value;
@@ -239,7 +243,10 @@ void Interface::setTraceRecordTargetDataOp(ompt_record_target_data_op_t *Record,
239243
Record->dest_addr = DstAddr;
240244
Record->dest_device_num = DstDeviceNum;
241245
Record->bytes = Bytes;
246+
242247
Record->end_time = TraceRecordStopTime;
248+
resetTimestamp(&TraceRecordStopTime);
249+
243250
Record->codeptr_ra = CodePtr;
244251
}
245252

@@ -248,7 +255,9 @@ void Interface::setTraceRecordTargetKernel(ompt_record_target_kernel_t *Record,
248255
Record->host_op_id = HostOpId;
249256
Record->requested_num_teams = NumTeams;
250257
Record->granted_num_teams = TraceRecordNumGrantedTeams;
258+
251259
Record->end_time = TraceRecordStopTime;
260+
resetTimestamp(&TraceRecordStopTime);
252261
}
253262

254263
void Interface::setTraceRecordTarget(ompt_record_target_t *Record,

0 commit comments

Comments
 (0)