Skip to content

Commit b34d31d

Browse files
authored
[OpenMP] Fix record-replay allocation order for kernel environment (#71863)
1 parent c6c04a8 commit b34d31d

File tree

2 files changed

+24
-19
lines changed

2 files changed

+24
-19
lines changed

openmp/libomptarget/plugins-nextgen/common/PluginInterface/PluginInterface.cpp

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -231,10 +231,9 @@ struct RecordReplayTy {
231231
OS.close();
232232
}
233233

234-
void saveKernelInputInfo(const char *Name, DeviceImageTy &Image,
235-
void **ArgPtrs, ptrdiff_t *ArgOffsets,
236-
int32_t NumArgs, uint64_t NumTeamsClause,
237-
uint32_t ThreadLimitClause, uint64_t LoopTripCount) {
234+
void saveKernelDescr(const char *Name, void **ArgPtrs, ptrdiff_t *ArgOffsets,
235+
int32_t NumArgs, uint64_t NumTeamsClause,
236+
uint32_t ThreadLimitClause, uint64_t LoopTripCount) {
238237
json::Object JsonKernelInfo;
239238
JsonKernelInfo["Name"] = Name;
240239
JsonKernelInfo["NumArgs"] = NumArgs;
@@ -255,12 +254,6 @@ struct RecordReplayTy {
255254
JsonArgOffsets.push_back(ArgOffsets[I]);
256255
JsonKernelInfo["ArgOffsets"] = json::Value(std::move(JsonArgOffsets));
257256

258-
SmallString<128> MemoryFilename = {Name, ".memory"};
259-
dumpDeviceMemory(MemoryFilename);
260-
261-
SmallString<128> GlobalsFilename = {Name, ".globals"};
262-
dumpGlobals(GlobalsFilename, Image);
263-
264257
SmallString<128> JsonFilename = {Name, ".json"};
265258
std::error_code EC;
266259
raw_fd_ostream JsonOS(JsonFilename.str(), EC);
@@ -271,6 +264,14 @@ struct RecordReplayTy {
271264
JsonOS.close();
272265
}
273266

267+
void saveKernelInput(const char *Name, DeviceImageTy &Image) {
268+
SmallString<128> GlobalsFilename = {Name, ".globals"};
269+
dumpGlobals(GlobalsFilename, Image);
270+
271+
SmallString<128> MemoryFilename = {Name, ".memory"};
272+
dumpDeviceMemory(MemoryFilename);
273+
}
274+
274275
void saveKernelOutputInfo(const char *Name) {
275276
SmallString<128> OutputFilename = {
276277
Name, (isRecording() ? ".original.output" : ".replay.output")};
@@ -504,12 +505,6 @@ Error GenericKernelTy::launch(GenericDeviceTy &GenericDevice, void **ArgPtrs,
504505
printLaunchInfo(GenericDevice, KernelArgs, NumThreads, NumBlocks))
505506
return Err;
506507

507-
if (RecordReplay.isRecording())
508-
RecordReplay.saveKernelInputInfo(
509-
getName(), getImage(), ArgPtrs, ArgOffsets,
510-
KernelArgs.NumArgs - /* KernelLaunchEnvironment */ 1, NumBlocks,
511-
NumThreads, KernelArgs.Tripcount);
512-
513508
return launchImpl(GenericDevice, NumThreads, NumBlocks, KernelArgs,
514509
KernelArgsPtr, AsyncInfoWrapper);
515510
}
@@ -1411,12 +1406,21 @@ Error GenericDeviceTy::launchKernel(void *EntryPtr, void **ArgPtrs,
14111406
GenericKernelTy &GenericKernel =
14121407
*reinterpret_cast<GenericKernelTy *>(EntryPtr);
14131408

1414-
if (RecordReplay.isRecording())
1409+
if (RecordReplay.isRecording()) {
14151410
RecordReplay.saveImage(GenericKernel.getName(), GenericKernel.getImage());
1411+
RecordReplay.saveKernelInput(GenericKernel.getName(),
1412+
GenericKernel.getImage());
1413+
}
14161414

14171415
auto Err = GenericKernel.launch(*this, ArgPtrs, ArgOffsets, KernelArgs,
14181416
AsyncInfoWrapper);
14191417

1418+
if (RecordReplay.isRecording())
1419+
RecordReplay.saveKernelDescr(GenericKernel.getName(), ArgPtrs, ArgOffsets,
1420+
KernelArgs.NumArgs, KernelArgs.NumTeams[0],
1421+
KernelArgs.ThreadLimit[0],
1422+
KernelArgs.Tripcount);
1423+
14201424
// 'finalize' here to guarantee next record-replay actions are in-sync
14211425
AsyncInfoWrapper.finalize(Err);
14221426

@@ -1845,7 +1849,8 @@ int32_t __tgt_rtl_data_exchange(int32_t SrcDeviceId, void *SrcPtr,
18451849
int32_t DstDeviceId, void *DstPtr,
18461850
int64_t Size) {
18471851
return __tgt_rtl_data_exchange_async(SrcDeviceId, SrcPtr, DstDeviceId, DstPtr,
1848-
Size, /* AsyncInfoPtr */ nullptr);
1852+
Size,
1853+
/* AsyncInfoPtr */ nullptr);
18491854
}
18501855

18511856
int32_t __tgt_rtl_data_exchange_async(int32_t SrcDeviceId, void *SrcPtr,

openmp/libomptarget/tools/kernelreplay/llvm-omp-kernel-replay.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ int main(int argc, char **argv) {
147147
uint8_t *recored_data = new uint8_t[DeviceMemoryMB.get()->getBufferSize()];
148148
std::memcpy(recored_data,
149149
const_cast<char *>(DeviceMemoryMB.get()->getBuffer().data()),
150-
DeviceMemorySizeJson.value() * sizeof(uint8_t));
150+
DeviceMemoryMB.get()->getBufferSize());
151151

152152
__tgt_target_kernel_replay(
153153
/* Loc */ nullptr, DeviceId, KernelEntry.addr, (char *)recored_data,

0 commit comments

Comments
 (0)