arrayfire-python icon indicating copy to clipboard operation
arrayfire-python copied to clipboard

Backend choice reset inside of threads

Open hexane360 opened this issue 2 years ago • 1 comments

Inside a new thread, Arrayfire uses the default backend rather than the backend set by the parent thread:

>>> import arrayfire as af
>>> af.get_available_backends()
('cpu', 'cuda', 'opencl')
>>> af.get_active_backend()
'cuda'
>>> af.set_backend('opencl')
>>> af.get_active_backend()
'opencl'
>>> from threading import Thread
>>> Thread(target=lambda: print(af.get_active_backend())).start()
cuda

Is this expected behavior and/or documented anywhere? I would think that the active backend should be process local rather than thread local.

If it matters, here's my version info: OS: Ubuntu 20.04 arrayfire: 3.9.0 (commit 955152b6) arrayfire-python: 3.8.10

cuda: 11.4.0-1 ocl-icd-libopencl1: 2.2.11-1 intel-mkl: 2020.0.166-1

hexane360 avatar Jul 07 '21 06:07 hexane360

@hexane360 set_device, set_backend these are all per thread states, they are not inherited automatically. So I would say, it is not reset, but rather it is left to default value in another thread, hence you are not seeing the values you are setting on main thread.

@umar456 @syurkevi Can you please redirect me to the location in our docs regarding threads in ArrayFire if we have it - I can't recollect it unfortunately.

9prady9 avatar Jul 07 '21 09:07 9prady9