-
Notifications
You must be signed in to change notification settings - Fork 793
[SYCL] Hide SYCL service kernels #4519
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
bader
merged 10 commits into
intel:sycl
from
steffenlarsen:steffen/hide_service_kernels
Sep 15, 2021
Merged
Changes from 4 commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
77dfc4d
[SYCL] Hide SYCL service kernels
steffenlarsen e882a6d
Fix formatting
steffenlarsen dbccdf1
Loosen isServiceKernel check
steffenlarsen 82b34e4
Make isServiceKernel parameter const reference
steffenlarsen 83b6321
Limit service-kernel check to missing kernel ids
steffenlarsen 25411f5
Prevent creating device images without non-service kernels
steffenlarsen b78f7af
Cache found service kernels
steffenlarsen 5052d1a
Add note about write-access limitation
steffenlarsen 3bc70d4
Change comment to require m_KernelIDsMutex
steffenlarsen f7c8f5e
Remove obsolete TODO comment
steffenlarsen File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
//==-------- service_kernels.hpp - SYCL service kernel name types ----------==// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#pragma once | ||
|
||
__SYCL_INLINE_NAMESPACE(cl) { | ||
namespace sycl { | ||
namespace detail { | ||
namespace __sycl_service_kernel__ { | ||
|
||
class AssertInfoCopier; | ||
|
||
} // namespace __sycl_service_kernel__ | ||
} // namespace detail | ||
} // namespace sycl | ||
} // __SYCL_INLINE_NAMESPACE(cl) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is quite straightforward approach and will work.
Though, I'm considered on its performance.
Is possible to get notion of mangling and check just the beginning of the string for Linux and ending for Windows?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Checking the start of the string was the original approach, but it did not consider Windows mangling. I am not very familiar with the Windows mangling scheme, but I worry that even if we could determine which mangling scheme is used, having templated classes would break the assumption about the end of the mangled name.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought we have the same(Itanium) mangling for kernels on both windows and linux.
In any case, if my another suggest is applied, the only place where we check if a kernel is a service one would be
addImage
s function which should be called once per process for a given image. Having said that I think this is not a performance critical peace of code.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems, like my yesterday's comment didn't get to post here:
Is it possible to cache this flag?
I believe, using unordered_map will allow for quick access. Also, we can eliminate use of mutexes as the initialization is only needed at boot-strap and there are only read requests during run-time.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You're thinking adding an
unordered_set
(I think set would do the trick) whereAddImages
caches all found service kernel names. ThenProgramManager::getSYCLDeviceImagesWithCompatibleState
would check against that rather than callingisServiceKernel
?Are you referring to
m_KernelIDsMutex
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right. This will do the thing.
Never, never, never. I meant any mutex required for lazy initialization of cache. With the cache initialized at boot-strap there is no place for lazy initialization and, thus, no need for thread-safety mechanism except for ensuring that only read access takes place during run-time.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have implemented caching of the service kernels found in
ProgramManager::AddImages
. This allows for faster lookup later. However, one concern I have is that the only time later that service kernels are looked up is in an assert, so in release builds we will never look up anything in the new cache.I think this may apply to
m_KernelIDsMutex
as well. That is outside the scope of this PR, so I'll make another PR in which we can discuss further.