Skip to content

Commit 41f3626

Browse files
committed
[OpenMP][OMPT] Fix reported target pointer for data alloc callback
This patch fixes: llvm#64671 DataOp EMI callbacks would not report the correct target pointer. This is now alleviated by passing a `void**` into the function which emits the actual callback, then evaluating that pointer. Note: Since this is only done after the pointer has been properly updated, only `endpoint=2` callbacks will show a non-null value. Reviewed By: dhruvachak, jdoerfert Differential Revision: https://reviews.llvm.org/D157996
1 parent 2459ed6 commit 41f3626

File tree

6 files changed

+27
-11
lines changed

6 files changed

+27
-11
lines changed

openmp/libomptarget/src/OmptCallback.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,37 +71,39 @@ static uint64_t createRegionId() {
7171
}
7272

7373
void Interface::beginTargetDataAlloc(int64_t DeviceId, void *HstPtrBegin,
74-
size_t Size, void *Code) {
74+
void **TgtPtrBegin, size_t Size,
75+
void *Code) {
7576
beginTargetDataOperation();
7677
if (ompt_callback_target_data_op_emi_fn) {
7778
// HostOpId will be set by the tool. Invoke the tool supplied data op EMI
7879
// callback
7980
ompt_callback_target_data_op_emi_fn(
8081
ompt_scope_begin, TargetTaskData, &TargetData, &TargetRegionOpId,
8182
ompt_target_data_alloc, HstPtrBegin,
82-
/* SrcDeviceNum */ omp_get_initial_device(), /* TgtPtrBegin */ nullptr,
83+
/* SrcDeviceNum */ omp_get_initial_device(), *TgtPtrBegin,
8384
/* TgtDeviceNum */ DeviceId, Size, Code);
8485
} else if (ompt_callback_target_data_op_fn) {
8586
// HostOpId is set by the runtime
8687
HostOpId = createOpId();
8788
// Invoke the tool supplied data op callback
8889
ompt_callback_target_data_op_fn(
8990
TargetData.value, HostOpId, ompt_target_data_alloc, HstPtrBegin,
90-
/* SrcDeviceNum */ omp_get_initial_device(), /* TgtPtrBegin */ nullptr,
91+
/* SrcDeviceNum */ omp_get_initial_device(), *TgtPtrBegin,
9192
/* TgtDeviceNum */ DeviceId, Size, Code);
9293
}
9394
}
9495

9596
void Interface::endTargetDataAlloc(int64_t DeviceId, void *HstPtrBegin,
96-
size_t Size, void *Code) {
97+
void **TgtPtrBegin, size_t Size,
98+
void *Code) {
9799
// Only EMI callback handles end scope
98100
if (ompt_callback_target_data_op_emi_fn) {
99101
// HostOpId will be set by the tool. Invoke the tool supplied data op EMI
100102
// callback
101103
ompt_callback_target_data_op_emi_fn(
102104
ompt_scope_end, TargetTaskData, &TargetData, &TargetRegionOpId,
103105
ompt_target_data_alloc, HstPtrBegin,
104-
/* SrcDeviceNum */ omp_get_initial_device(), /* TgtPtrBegin */ nullptr,
106+
/* SrcDeviceNum */ omp_get_initial_device(), *TgtPtrBegin,
105107
/* TgtDeviceNum */ DeviceId, Size, Code);
106108
}
107109
endTargetDataOperation();

openmp/libomptarget/src/OmptInterface.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ static ompt_get_target_task_data_t ompt_get_target_task_data_fn;
4747
class Interface {
4848
public:
4949
/// Top-level function for invoking callback before device data allocation
50-
void beginTargetDataAlloc(int64_t DeviceId, void *TgtPtrBegin, size_t Size,
51-
void *Code);
50+
void beginTargetDataAlloc(int64_t DeviceId, void *HstPtrBegin,
51+
void **TgtPtrBegin, size_t Size, void *Code);
5252

5353
/// Top-level function for invoking callback after device data allocation
54-
void endTargetDataAlloc(int64_t DeviceId, void *TgtPtrBegin, size_t Size,
55-
void *Code);
54+
void endTargetDataAlloc(int64_t DeviceId, void *HstPtrBegin,
55+
void **TgtPtrBegin, size_t Size, void *Code);
5656

5757
/// Top-level function for invoking callback before data submit
5858
void beginTargetDataSubmit(int64_t DeviceId, void *HstPtrBegin,

openmp/libomptarget/src/device.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -580,12 +580,14 @@ __tgt_target_table *DeviceTy::loadBinary(void *Img) {
580580

581581
void *DeviceTy::allocData(int64_t Size, void *HstPtr, int32_t Kind) {
582582
/// RAII to establish tool anchors before and after data allocation
583+
void *TargetPtr = nullptr;
583584
OMPT_IF_BUILT(InterfaceRAII TargetDataAllocRAII(
584585
RegionInterface.getCallbacks<ompt_target_data_alloc>(),
585-
RTLDeviceID, HstPtr, Size,
586+
RTLDeviceID, HstPtr, &TargetPtr, Size,
586587
/* CodePtr */ OMPT_GET_RETURN_ADDRESS(0));)
587588

588-
return RTL->data_alloc(RTLDeviceID, Size, HstPtr, Kind);
589+
TargetPtr = RTL->data_alloc(RTLDeviceID, Size, HstPtr, Kind);
590+
return TargetPtr;
589591
}
590592

591593
int32_t DeviceTy::deleteData(void *TgtAllocBegin, int32_t Kind) {

openmp/libomptarget/test/ompt/veccopy_disallow_both.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,12 @@ int main() {
6363
/// CHECK: Callback Target EMI: kind=1 endpoint=1
6464
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
6565
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
66+
/// CHECK-NOT: dest=(nil)
6667
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
6768
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
6869
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
6970
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
71+
/// CHECK-NOT: dest=(nil)
7072
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
7173
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
7274
/// CHECK: Callback Submit: target_id=[[TARGET_ID:[0-9]+]] host_op_id=[[HOST_OP_ID:[0-9]+]] req_num_teams=1
@@ -82,10 +84,12 @@ int main() {
8284
/// CHECK: Callback Target EMI: kind=1 endpoint=1
8385
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
8486
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
87+
/// CHECK-NOT: dest=(nil)
8588
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
8689
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
8790
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
8891
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
92+
/// CHECK-NOT: dest=(nil)
8993
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
9094
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
9195
/// CHECK: Callback Submit: target_id=[[TARGET_ID:[0-9]+]] host_op_id=[[HOST_OP_ID:[0-9]+]] req_num_teams=0

openmp/libomptarget/test/ompt/veccopy_emi.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,12 @@ int main() {
6161
/// CHECK: Callback Target EMI: kind=1 endpoint=1
6262
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
6363
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
64+
/// CHECK-NOT: dest=(nil)
6465
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
6566
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
6667
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
6768
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
69+
/// CHECK-NOT: dest=(nil)
6870
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
6971
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
7072
/// CHECK: Callback Submit EMI: endpoint=1 req_num_teams=1
@@ -81,10 +83,12 @@ int main() {
8183
/// CHECK: Callback Target EMI: kind=1 endpoint=1
8284
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
8385
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
86+
/// CHECK-NOT: dest=(nil)
8487
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
8588
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
8689
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
8790
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
91+
/// CHECK-NOT: dest=(nil)
8892
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
8993
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
9094
/// CHECK: Callback Submit EMI: endpoint=1 req_num_teams=0

openmp/libomptarget/test/ompt/veccopy_emi_map.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,12 @@ int main() {
6262
/// CHECK: Callback Target EMI: kind=1 endpoint=1
6363
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
6464
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
65+
/// CHECK-NOT: dest=(nil)
6566
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
6667
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
6768
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
6869
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
70+
/// CHECK-NOT: dest=(nil)
6971
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
7072
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
7173
/// CHECK: Callback Submit EMI: endpoint=1 req_num_teams=1
@@ -82,10 +84,12 @@ int main() {
8284
/// CHECK: Callback Target EMI: kind=1 endpoint=1
8385
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
8486
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
87+
/// CHECK-NOT: dest=(nil)
8588
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
8689
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
8790
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
8891
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
92+
/// CHECK-NOT: dest=(nil)
8993
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
9094
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
9195
/// CHECK: Callback Submit EMI: endpoint=1 req_num_teams=0

0 commit comments

Comments
 (0)