mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-23 13:50:11 +00:00
[OpenMP][OMPT] Fix reported target pointer for data alloc callback
This patch fixes: https://github.com/llvm/llvm-project/issues/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
This commit is contained in:
parent
2459ed6780
commit
41f3626f8b
@ -71,7 +71,8 @@ static uint64_t createRegionId() {
|
||||
}
|
||||
|
||||
void Interface::beginTargetDataAlloc(int64_t DeviceId, void *HstPtrBegin,
|
||||
size_t Size, void *Code) {
|
||||
void **TgtPtrBegin, size_t Size,
|
||||
void *Code) {
|
||||
beginTargetDataOperation();
|
||||
if (ompt_callback_target_data_op_emi_fn) {
|
||||
// HostOpId will be set by the tool. Invoke the tool supplied data op EMI
|
||||
@ -79,7 +80,7 @@ void Interface::beginTargetDataAlloc(int64_t DeviceId, void *HstPtrBegin,
|
||||
ompt_callback_target_data_op_emi_fn(
|
||||
ompt_scope_begin, TargetTaskData, &TargetData, &TargetRegionOpId,
|
||||
ompt_target_data_alloc, HstPtrBegin,
|
||||
/* SrcDeviceNum */ omp_get_initial_device(), /* TgtPtrBegin */ nullptr,
|
||||
/* SrcDeviceNum */ omp_get_initial_device(), *TgtPtrBegin,
|
||||
/* TgtDeviceNum */ DeviceId, Size, Code);
|
||||
} else if (ompt_callback_target_data_op_fn) {
|
||||
// HostOpId is set by the runtime
|
||||
@ -87,13 +88,14 @@ void Interface::beginTargetDataAlloc(int64_t DeviceId, void *HstPtrBegin,
|
||||
// Invoke the tool supplied data op callback
|
||||
ompt_callback_target_data_op_fn(
|
||||
TargetData.value, HostOpId, ompt_target_data_alloc, HstPtrBegin,
|
||||
/* SrcDeviceNum */ omp_get_initial_device(), /* TgtPtrBegin */ nullptr,
|
||||
/* SrcDeviceNum */ omp_get_initial_device(), *TgtPtrBegin,
|
||||
/* TgtDeviceNum */ DeviceId, Size, Code);
|
||||
}
|
||||
}
|
||||
|
||||
void Interface::endTargetDataAlloc(int64_t DeviceId, void *HstPtrBegin,
|
||||
size_t Size, void *Code) {
|
||||
void **TgtPtrBegin, size_t Size,
|
||||
void *Code) {
|
||||
// Only EMI callback handles end scope
|
||||
if (ompt_callback_target_data_op_emi_fn) {
|
||||
// HostOpId will be set by the tool. Invoke the tool supplied data op EMI
|
||||
@ -101,7 +103,7 @@ void Interface::endTargetDataAlloc(int64_t DeviceId, void *HstPtrBegin,
|
||||
ompt_callback_target_data_op_emi_fn(
|
||||
ompt_scope_end, TargetTaskData, &TargetData, &TargetRegionOpId,
|
||||
ompt_target_data_alloc, HstPtrBegin,
|
||||
/* SrcDeviceNum */ omp_get_initial_device(), /* TgtPtrBegin */ nullptr,
|
||||
/* SrcDeviceNum */ omp_get_initial_device(), *TgtPtrBegin,
|
||||
/* TgtDeviceNum */ DeviceId, Size, Code);
|
||||
}
|
||||
endTargetDataOperation();
|
||||
|
@ -47,12 +47,12 @@ static ompt_get_target_task_data_t ompt_get_target_task_data_fn;
|
||||
class Interface {
|
||||
public:
|
||||
/// Top-level function for invoking callback before device data allocation
|
||||
void beginTargetDataAlloc(int64_t DeviceId, void *TgtPtrBegin, size_t Size,
|
||||
void *Code);
|
||||
void beginTargetDataAlloc(int64_t DeviceId, void *HstPtrBegin,
|
||||
void **TgtPtrBegin, size_t Size, void *Code);
|
||||
|
||||
/// Top-level function for invoking callback after device data allocation
|
||||
void endTargetDataAlloc(int64_t DeviceId, void *TgtPtrBegin, size_t Size,
|
||||
void *Code);
|
||||
void endTargetDataAlloc(int64_t DeviceId, void *HstPtrBegin,
|
||||
void **TgtPtrBegin, size_t Size, void *Code);
|
||||
|
||||
/// Top-level function for invoking callback before data submit
|
||||
void beginTargetDataSubmit(int64_t DeviceId, void *HstPtrBegin,
|
||||
|
@ -580,12 +580,14 @@ __tgt_target_table *DeviceTy::loadBinary(void *Img) {
|
||||
|
||||
void *DeviceTy::allocData(int64_t Size, void *HstPtr, int32_t Kind) {
|
||||
/// RAII to establish tool anchors before and after data allocation
|
||||
void *TargetPtr = nullptr;
|
||||
OMPT_IF_BUILT(InterfaceRAII TargetDataAllocRAII(
|
||||
RegionInterface.getCallbacks<ompt_target_data_alloc>(),
|
||||
RTLDeviceID, HstPtr, Size,
|
||||
RTLDeviceID, HstPtr, &TargetPtr, Size,
|
||||
/* CodePtr */ OMPT_GET_RETURN_ADDRESS(0));)
|
||||
|
||||
return RTL->data_alloc(RTLDeviceID, Size, HstPtr, Kind);
|
||||
TargetPtr = RTL->data_alloc(RTLDeviceID, Size, HstPtr, Kind);
|
||||
return TargetPtr;
|
||||
}
|
||||
|
||||
int32_t DeviceTy::deleteData(void *TgtAllocBegin, int32_t Kind) {
|
||||
|
@ -63,10 +63,12 @@ int main() {
|
||||
/// CHECK: Callback Target EMI: kind=1 endpoint=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
|
||||
/// CHECK-NOT: dest=(nil)
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
|
||||
/// CHECK-NOT: dest=(nil)
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
|
||||
/// 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() {
|
||||
/// CHECK: Callback Target EMI: kind=1 endpoint=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
|
||||
/// CHECK-NOT: dest=(nil)
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
|
||||
/// CHECK-NOT: dest=(nil)
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
|
||||
/// CHECK: Callback Submit: target_id=[[TARGET_ID:[0-9]+]] host_op_id=[[HOST_OP_ID:[0-9]+]] req_num_teams=0
|
||||
|
@ -61,10 +61,12 @@ int main() {
|
||||
/// CHECK: Callback Target EMI: kind=1 endpoint=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
|
||||
/// CHECK-NOT: dest=(nil)
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
|
||||
/// CHECK-NOT: dest=(nil)
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
|
||||
/// CHECK: Callback Submit EMI: endpoint=1 req_num_teams=1
|
||||
@ -81,10 +83,12 @@ int main() {
|
||||
/// CHECK: Callback Target EMI: kind=1 endpoint=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
|
||||
/// CHECK-NOT: dest=(nil)
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
|
||||
/// CHECK-NOT: dest=(nil)
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
|
||||
/// CHECK: Callback Submit EMI: endpoint=1 req_num_teams=0
|
||||
|
@ -62,10 +62,12 @@ int main() {
|
||||
/// CHECK: Callback Target EMI: kind=1 endpoint=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
|
||||
/// CHECK-NOT: dest=(nil)
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
|
||||
/// CHECK-NOT: dest=(nil)
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
|
||||
/// CHECK: Callback Submit EMI: endpoint=1 req_num_teams=1
|
||||
@ -82,10 +84,12 @@ int main() {
|
||||
/// CHECK: Callback Target EMI: kind=1 endpoint=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
|
||||
/// CHECK-NOT: dest=(nil)
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=1
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=1
|
||||
/// CHECK-NOT: dest=(nil)
|
||||
/// CHECK: Callback DataOp EMI: endpoint=1 optype=2
|
||||
/// CHECK: Callback DataOp EMI: endpoint=2 optype=2
|
||||
/// CHECK: Callback Submit EMI: endpoint=1 req_num_teams=0
|
||||
|
Loading…
Reference in New Issue
Block a user