首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态编译numba jit

动态编译numba jit
EN

Stack Overflow用户
提问于 2021-03-17 15:06:58
回答 1查看 240关注 0票数 0

我有许多功能来支持单线程和多线程执行,这使得我需要双行代码,从而产生冗余的重复:

代码语言:javascript
复制
@jit(nopython=True, cache=True)
def fn1(x):
    for i in range(len(x)):
        # [code body]

@jit(nopython=True, cache=True, parallel=True)
def fn1_par(x):
    for i in prange(len(x)):
        # [code body]

两者的代码体完全相同,唯一不同的是@jit(parallel=True)range -> prange。是否有一种方法可以在一个函数中表达这个逻辑,同时保留cache=True的优点?

注意:使用“包装器包装器”(osvil的答案)的解决方法在cache=True中失败;第一个调用的信任持续存在(例如,第一个函数的parallel=False将覆盖第二个的parallel=True)。更改包装函数的__name__没有帮助。打开问题

EN

回答 1

Stack Overflow用户

发布于 2021-03-17 19:22:35

numba.jit只是个装潢师。您可以定义函数一次,然后在同一函数上多次应用装饰符“手动”。

从我的脑海里看上去会是这样的:

代码语言:javascript
复制
def python_function(x):
   ...

numba_nopython_function = numba.jit(nopython=True)(python_function)
numba_nopython_parallel_function = numba.jit(nopython=True, parallel=True)(python_function)

通过numba_nopython_function使用该函数将使用普通的numba版本。使用numba_nopython_parallel_function将使用numba并行函数。如果您愿意,还可以通过python_function本身访问原始python函数。它符合干燥原则。按你的意愿命名,因为我的名字太冗长了,太不切实际了。

不过,我不知道这将如何与函数的缓存进行交互。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66675817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档