Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
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
4 changes: 2 additions & 2 deletions .github/workflows/conda-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -522,7 +522,7 @@ jobs:
runs-on: ${{ matrix.runner }}
strategy:
matrix:
python: ['3.11']
python: ['3.14']
experimental: [false]
runner: [ubuntu-latest]
continue-on-error: ${{ matrix.experimental }}
Expand Down Expand Up @@ -682,7 +682,7 @@ jobs:
conda activate "${{ env.EXAMPLES_ENV_NAME }}"
while IFS= read -r script; do
echo "Executing ${script}"
python "${script}" || exit 1
python "${script}" --run all || exit 1
done < <(find . \( -not -name "_*" -and -name "*.py" \))

cleanup_packages:
Expand Down
14 changes: 11 additions & 3 deletions examples/python/subdevices.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,11 @@ def subdivide_root_cpu_device():
"cpu_d is "
+ ("a root device." if is_root_device(cpu_d) else "not a root device.")
)
sub_devs = cpu_d.create_sub_devices(partition=4)
try:
sub_devs = cpu_d.create_sub_devices(partition=4)
except dpctl.SyclSubDeviceCreationError:
print("Device partitioning was not successful.")
return
print("Sub-device #EU: ", [d.max_compute_units for d in sub_devs])
print("Sub-device is_root: ", [is_root_device(d) for d in sub_devs])
print(
Expand All @@ -70,7 +74,7 @@ def subdivide_by_affinity(affinity="numa"):
f"{len(sub_devs)} sub-devices were created with respective #EUs "
f"being {[d.max_compute_units for d in sub_devs]}"
)
except Exception:
except dpctl.SyclSubDeviceCreationError:
print("Device partitioning by affinity was not successful.")


Expand All @@ -82,7 +86,11 @@ def create_subdevice_queue():
"""
cpu_d = dpctl.SyclDevice("cpu")
cpu_count = cpu_d.max_compute_units
sub_devs = cpu_d.create_sub_devices(partition=cpu_count // 2)
try:
sub_devs = cpu_d.create_sub_devices(partition=cpu_count // 2)
except dpctl.SyclSubDeviceCreationError:
print("Device partitioning was not successful.")
return
multidevice_ctx = dpctl.SyclContext(sub_devs)
# create a SyclQueue for each sub-device, using common
# multi-device context
Expand Down
41 changes: 0 additions & 41 deletions examples/python/usm_memory_allocation.py

This file was deleted.

59 changes: 0 additions & 59 deletions examples/python/usm_memory_host_access.py

This file was deleted.

51 changes: 0 additions & 51 deletions examples/python/usm_memory_operation.py

This file was deleted.

140 changes: 140 additions & 0 deletions examples/python/usm_operations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
# Data Parallel Control (dpctl)
#
# Copyright 2020-2025 Intel Corporation
Comment thread
ndgrigorian marked this conversation as resolved.
#
# 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 Exception as e:
Comment thread
ndgrigorian marked this conversation as resolved.
Outdated
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())
Loading