arrayfire-python
arrayfire-python copied to clipboard
Backend choice reset inside of threads
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 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.