Skip to content

[SYCL][L0] Fix interop event leak #5912

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

Closed
wants to merge 33 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 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
ff05096
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Feb 14, 2022
76670e6
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Feb 20, 2022
2228b5f
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Mar 2, 2022
5589806
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Mar 14, 2022
0df6354
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Mar 18, 2022
066e537
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Mar 21, 2022
4c6bdbf
Merge remote-tracking branch 'upstream/sycl' into sycl
bso-intel Mar 28, 2022
0b8e574
[SYCL] Fix memory leak in InterOp make_event
bso-intel Mar 28, 2022
0031721
calling release from cleanup conditional
bso-intel Apr 6, 2022
fcafeb2
added an additional retain for interop event
bso-intel Apr 19, 2022
f4a4457
removed refcount check
bso-intel Apr 27, 2022
537bd2e
added detailed comment
bso-intel Apr 29, 2022
558bbfd
fixed comment
bso-intel May 10, 2022
58b5da2
typo
bso-intel May 10, 2022
089d34f
revert comment
bso-intel May 10, 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
12 changes: 11 additions & 1 deletion sycl/plugins/level_zero/pi_level_zero.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5443,7 +5443,17 @@ pi_result piextEventCreateWithNativeHandle(pi_native_handle NativeHandle,
// Assume native event is host-visible, or otherwise we'd
// need to create a host-visible proxy for it.
(*Event)->HostVisibleEvent = *Event;

// A regular pi_event created by piEventCreate() starts with its reference
// count = 2 because of our explicit call to piEventCreate() at the end of
// createEventAndAssociateQueue().
// Then, this ref count becomes zero when the event is completed and RT
// calls piEventRelease().
// However, an interop event created in this function would go through
// the same life cycle, meaning it will be released only twice when RT
// calls piEventRelease in the sycl::event_impl destructor and when
// the Queue associated with the event is released.
// So, we increase the ref count of the interop pi_event here.
PI_CALL(piEventRetain(*Event));
return PI_SUCCESS;
}

Expand Down
5 changes: 3 additions & 2 deletions sycl/source/detail/event_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,9 @@ event_impl::event_impl(RT::PiEvent Event, const context &SyclContext)
"clEvent.",
PI_INVALID_CONTEXT);
}

getPlugin().call<PiApiKind::piEventRetain>(MEvent);
// Ref count should be incremented for OpenCL backend only.
if (getPlugin().getBackend() == cl::sycl::backend::opencl)
getPlugin().call<PiApiKind::piEventRetain>(MEvent);
}

event_impl::event_impl(const QueueImplPtr &Queue)
Expand Down