numba用户手册
numba线程
------------------------------------------------------------------------------------------------------------------------------------------------------
7.1说明:
1)并行执行通过parallelCPU 发生的即:
@jit(parallel=True). and @njit(parallel=True).
@vectorize(target='parallel' ) and @guvectorize(target='parallel' ).
2)如不用threading或multiprocessing ,则numba附带线程的默认设置会很好工作,无需采取进一步措施!
7.2.线程层:
1)tbb - Intel TBB支持的线程层(需要存在英特尔的TBB库conda install tbb)
2)omp -OpenMP支持的线程层(与linux1兼容移植性在PyPI上numba二进制轮子中禁用OpenMP线程层 )($ conda install intel-openmp)
3)workqueue -一个简单的内置工作共享任务计划程序(保证存在的唯一线程层)
7.3.设置线程层
通过环境变量 设置线程层 numba.config.THREADING_LAYER
编程方式设置线程层必须在逻辑上发生,后再针对并行目标进行任何基于numba的编译.
7.4.选择线程层
有两种方法,一种是通过选择在各种并行执行形式下安全的线程层,第二种是通过线程层名称(例如tbb)进行显式选择.
default 没有提供具体的安全保证,并且是默认设置.
safe 线程和线程都是安全的,这需要安装tbb软件包(Intel TBB库)
forksafe 提供一个fork安全库.
threadsafe 提供线程安全库.
------------------------------------------------------------------------------------------------------------------------------------------------------
7.5.实例:
from numba import config, njit, threading_layer
import numpy as np
config.THREADING_LAYER = 'threadsafe' # 在任何并行目标编译之前设置线程层
@njit(parallel=True)
def foo(a, b):
return a + b
x = np.arange(10.)
y = x.copy()
# 这将强制编译函数,选择一个线程层,然后并行执行
foo(x, y)
# 演示所选的线程层
print("Threading layer chosen: %s" % threading_layer()) # 查看所选的线程层
# Threading layer chosen: omp
------------------------------------------------------------------------------------------------------------------------------------------------------
7.6.other:
numba诊断命令的一节 报告了当前环境中线程层的可用性.
numba -s__Threading Layer Information__
------------------------------------------------------------------------------------------------------------------------------------------------------