Skip to content

[SYCL][L0] Remove ZeModule when program build failed #5541

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 31 commits into from
Feb 19, 2022
Merged
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
f62375d
[SYCL][L0] return error code when ZE_DEBUG=4 detects memory leaks.
bso-intel Dec 22, 2021
7d9755e
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Dec 24, 2021
84b6710
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Dec 27, 2021
534f424
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Dec 28, 2021
81b4db5
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Dec 30, 2021
0c249f1
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Jan 4, 2022
200f8ea
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Jan 7, 2022
aaed454
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Jan 11, 2022
d1c6404
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Jan 20, 2022
1032a47
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Jan 20, 2022
abbc3a0
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Jan 24, 2022
1b2bcc7
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Jan 25, 2022
4657e3b
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Jan 28, 2022
39515bd
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Feb 2, 2022
89e505b
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Feb 4, 2022
6f2d5dd
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Feb 7, 2022
f0b7ec1
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Feb 10, 2022
0a63386
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Feb 10, 2022
e04b730
[SYCL][L0] Remove ZeModule when program build failed
bso-intel Feb 10, 2022
9a6b91d
restructure
bso-intel Feb 11, 2022
d6c6193
Update sycl/plugins/level_zero/pi_level_zero.cpp
bso-intel Feb 11, 2022
b605f01
set zeModule nullptr to avoid double destroy
bso-intel Feb 11, 2022
edae517
Merge branch 'buildfail-leak' of https://github.com/bso-intel/llvm in…
bso-intel Feb 11, 2022
c3157ce
address feedback
bso-intel Feb 11, 2022
ae22347
removed call to ZeModuleDestroy
bso-intel Feb 18, 2022
9a8b907
Update sycl/plugins/level_zero/pi_level_zero.cpp
bso-intel Feb 18, 2022
28d6f10
added binding of ZeModule to Program
bso-intel Feb 18, 2022
503cbd2
Merge branch 'buildfail-leak' of https://github.com/bso-intel/llvm in…
bso-intel Feb 18, 2022
a8fdd76
address feedback
bso-intel Feb 18, 2022
ad98494
set Result
bso-intel Feb 18, 2022
a1b1000
reorg
bso-intel Feb 19, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 26 additions & 17 deletions sycl/plugins/level_zero/pi_level_zero.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4296,28 +4296,37 @@ pi_result piProgramBuild(pi_program Program, pi_uint32 NumDevices,
ze_device_handle_t ZeDevice = DeviceList[0]->ZeDevice;
ze_context_handle_t ZeContext = Program->Context->ZeContext;
ze_module_handle_t ZeModule = nullptr;
ZE_CALL(zeModuleCreate, (ZeContext, ZeDevice, &ZeModuleDesc, &ZeModule,
&Program->ZeBuildLog));

// The call to zeModuleCreate does not report an error if there are
// unresolved symbols because it thinks these could be resolved later via a
// call to zeModuleDynamicLink. However, modules created with piProgramBuild
// are supposed to be fully linked and ready to use. Therefore, do an extra
// check now for unresolved symbols.
ze_result_t ZeResult = checkUnresolvedSymbols(ZeModule, &Program->ZeBuildLog);
if (ZeResult == ZE_RESULT_ERROR_MODULE_LINK_FAILURE) {
return PI_BUILD_PROGRAM_FAILURE;
} else if (ZeResult != ZE_RESULT_SUCCESS) {
return mapError(ZeResult);

pi_result Result = PI_SUCCESS;
Program->State = _pi_program::Exe;
ze_result_t ZeResult =
ZE_CALL_NOCHECK(zeModuleCreate, (ZeContext, ZeDevice, &ZeModuleDesc,
&ZeModule, &Program->ZeBuildLog));
if (ZeResult != ZE_RESULT_SUCCESS) {
// We adjust pi_program below to avoid attempting to release zeModule when
// RT calls piProgramRelease().
ZeModule = nullptr;
Program->State = _pi_program::Invalid;
Result = mapError(ZeResult);
} else {
// The call to zeModuleCreate does not report an error if there are
// unresolved symbols because it thinks these could be resolved later via a
// call to zeModuleDynamicLink. However, modules created with
// piProgramBuild are supposed to be fully linked and ready to use.
// Therefore, do an extra check now for unresolved symbols.
ZeResult = checkUnresolvedSymbols(ZeModule, &Program->ZeBuildLog);
if (ZeResult != ZE_RESULT_SUCCESS) {
Program->State = _pi_program::Invalid;
Result = (ZeResult == ZE_RESULT_ERROR_MODULE_LINK_FAILURE)
? PI_BUILD_PROGRAM_FAILURE
: mapError(ZeResult);
}
}

// We no longer need the IL / native code.
Program->Code.reset();

Program->ZeModule = ZeModule;
Program->State = _pi_program::Exe;

return PI_SUCCESS;
return Result;
}

pi_result piProgramGetBuildInfo(pi_program Program, pi_device Device,
Expand Down