nv-legate/legate.core

[BUG] Resource scoping: get_machine().only() gives length = 0

CharlelieLrt opened this issue · 3 comments

Software versions

Python : 3.10.13 | packaged by conda-forge | (main, Oct 26 2023, 18:09:17) [Clang 16.0.6 ]
Platform : macOS-12.6.7-arm64-arm-64bit
Legion : v23.11.00.dev-37-g08f0ce8
Legate : 23.11.00.dev+37.g08f0ce8
[0 - 100a44580] 0.000068 {4}{threads}: reservation ('CPU proc 1d00000000000003') cannot be satisfied
Cunumeric : 23.11.00.dev+28.gfd46f051.dirty
Numpy : 1.26.2
Scipy : 1.11.4
Numba : 0.58.1
CTK package : (failed to detect)
GPU driver : (nvidia-smi missing)
GPU devices : (nvidia-smi missing)

Expected behavior

Running the following script:

from legate.core import get_machine

machine = get_machine()

OMPs = machine.only("OMP")
GPUs = machine.only("GPU")
CPUs = machine.only("CPU")

print(f"# OMPs = {len(OMPs)}")
print(f"# GPUs = {len(GPUs)}") 
print(f"# CPUs = {len(CPUs)}")

with legate --cpus 2 --omps 1 --ompthreads 2 should print the number of GPUs, CPUs, and OMP procs returned by the resource scoping.

Observed behavior

Instead, the length of OMPs, GPUs and CPUs is zero.

Looks like Python's weak typing rules bit us here. The following works for me, can you confirm that it works on your machine as well?

from legate.core import get_machine
from legate.core.machine import ProcessorKind

machine = get_machine()

OMPs = machine.only(ProcessorKind.OMP)
GPUs = machine.only(ProcessorKind.GPU)
CPUs = machine.only(ProcessorKind.CPU)

print(f"# OMPs = {len(OMPs)}")
print(f"# GPUs = {len(GPUs)}")
print(f"# CPUs = {len(CPUs)}")

Was there an example somewhere that used strings? If so, we should update it.

Indeed that works, the call to machine.only() was just silently failing. I didn't realize it could only be called with a ProcessorKind argument. Thanks!

(I didn't see any example using strings directly)

I would normally put a TODO item to add an input check on machine.only() and similar functions, but that component is being redesigned, and the new version shouldn't have this issue. So closing for now.