-
Notifications
You must be signed in to change notification settings - Fork 37
Restructure Python examples #2292
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
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
4d78083
Consolidate USM examples
ndgrigorian 7ab5652
run all Python examples in workflow
ndgrigorian 11311e4
Add more outputs to usm_allocation example
ndgrigorian 200b99d
Add exception handling in subdevices example
ndgrigorian 23cf073
use Python 3.14 for examples
ndgrigorian ec1a5ea
improve exception in usm_host_access example
ndgrigorian 96b07bb
add gh-2292 to changelog
ndgrigorian 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
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 was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
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,140 @@ | ||
| # Data Parallel Control (dpctl) | ||
| # | ||
| # Copyright 2020-2025 Intel Corporation | ||
| # | ||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||
| # you may not use this file except in compliance with the License. | ||
| # You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
|
|
||
| """ | ||
| Demonstrates SYCL USM memory usage in Python using dpctl.memory. | ||
| Includes allocation, host access, and host-device copying. | ||
| """ | ||
|
|
||
| import numpy as np | ||
|
|
||
| import dpctl.memory as dpmem | ||
|
|
||
|
|
||
| def usm_allocation(): | ||
| """ | ||
| Example demonstrating ways to allocate USM using dpctl.memory. | ||
| """ | ||
| # allocate USM-shared byte-buffer | ||
| ms = dpmem.MemoryUSMShared(16) | ||
| print(f"USM-shared buffer allocated with size: {len(ms)}") | ||
|
|
||
| # allocate USM-device byte-buffer | ||
| md = dpmem.MemoryUSMDevice(16) | ||
| print(f"USM-device buffer allocated with size: {len(md)}") | ||
|
|
||
| # allocate USM-host byte-buffer | ||
| mh = dpmem.MemoryUSMHost(16) | ||
| print(f"USM-host buffer allocated with size: {len(mh)}") | ||
|
|
||
| # specify alignment | ||
| # TODO: add alignment check | ||
| mda = dpmem.MemoryUSMDevice(128, alignment=16) | ||
| print(f"16-byte aligned USM-device buffer allocated with size: {len(mda)}") | ||
|
|
||
| # allocate using given queue, | ||
| # i.e. on the device and bound to the context stored in the queue | ||
| mdq = dpmem.MemoryUSMDevice(256, queue=mda.sycl_queue) | ||
| print( | ||
| "USM-device buffers share the same queue: " | ||
| f"{mdq.sycl_queue == mda.sycl_queue}" | ||
| ) | ||
|
|
||
| # information about device associate with USM buffer | ||
| print("Allocation performed on device:") | ||
| mda.sycl_queue.print_device_info() | ||
|
|
||
|
|
||
| def usm_host_access(): | ||
| """ | ||
| Example demonstrating that shared and host USM allocations are | ||
| host-accessible and thus accessible from Python via buffer protocol. | ||
| """ | ||
| # USM-shared and USM-host pointers are host-accessible, | ||
| # meaning they are accessible from Python, therefore | ||
| # they implement Python buffer protocol | ||
|
|
||
| # allocate 1K of USM-shared buffer | ||
| ms = dpmem.MemoryUSMShared(1024) | ||
|
|
||
| # create memoryview into USM-shared buffer | ||
| msv = memoryview(ms) | ||
|
|
||
| # populate buffer from host one byte at a time | ||
| for i in range(len(ms)): | ||
| ir = i % 256 | ||
| msv[i] = ir**2 % 256 | ||
|
|
||
| mh = dpmem.MemoryUSMHost(64) | ||
| mhv = memoryview(mh) | ||
|
|
||
| # copy content of block of USM-shared buffer to | ||
| # USM-host buffer | ||
| mhv[:] = msv[78 : 78 + len(mh)] | ||
|
|
||
| print("Byte-values of the USM-host buffer") | ||
| print(list(mhv)) | ||
|
|
||
| # USM-device buffer is not host accessible | ||
| md = dpmem.MemoryUSMDevice(16) | ||
| try: | ||
| memoryview(md) | ||
| except TypeError as e: | ||
| print("") | ||
| print( | ||
| "An expected exception was raised during attempted construction of " | ||
| "memoryview from USM-device memory object." | ||
| ) | ||
| print(f"\t{e}") | ||
|
|
||
|
|
||
| def usm_host_device_copy(): | ||
| """ | ||
| Example demonstrating copying operations using dpctl.memory. | ||
| """ | ||
| ms = dpmem.MemoryUSMShared(32) | ||
| md = dpmem.MemoryUSMDevice(32) | ||
|
|
||
| host_buf = np.random.randint(0, 42, dtype=np.uint8, size=32) | ||
|
|
||
| # copy host byte-like object to USM-device buffer | ||
| md.copy_from_host(host_buf) | ||
|
|
||
| # copy USM-device buffer to USM-shared buffer in parallel using | ||
| # sycl::queue::memcpy. | ||
| ms.copy_from_device(md) | ||
|
|
||
| # build numpy array reusing host-accessible USM-shared memory | ||
| X = np.ndarray((len(ms),), buffer=ms, dtype=np.uint8) | ||
|
|
||
| # Display Python object NumPy ndarray is viewing into | ||
| print("numpy.ndarray.base: ", X.base) | ||
| print("") | ||
|
|
||
| # Print content of the view | ||
| print("View..........: ", X) | ||
|
|
||
| # Print content of the original host buffer | ||
| print("host_buf......: ", host_buf) | ||
|
|
||
| # use copy_to_host to retrieve memory of USM-device memory | ||
| print("copy_to_host(): ", md.copy_to_host()) | ||
|
|
||
|
|
||
| if __name__ == "__main__": | ||
| import _runner as runner | ||
|
|
||
| runner.run_examples("Memory examples for dpctl.", globals()) | ||
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.