NUMBA 中 CPU 和 GPU 函数的数组分配

菲利普·埃勒

我正在尝试用 numba 编写一些函数,我可以将它们交替用于不同的目标(cpu、cuda、并行)。我遇到的问题是新数组的分配对于 cuda 设备代码是不同的,例如:

cuda.local.array(shape, dtype)

与为 CPU 功能做类似的事情,即

np.empty(shape, dtype)

有没有一种聪明的方法来处理这个而不必编写单独的函数?

菲利普·埃勒

我找到了一个解决这个问题的肮脏的方法。这是我让它工作的唯一方法。使用@myjit装饰,而不是@jit@cuda.jit和分配所有数组作为cuda.local.array

def myjit(f):
'''
f : function
Decorator to assign the right jit for different targets
In case of non-cuda targets, all instances of `cuda.local.array`
are replaced by `np.empty`. This is a dirty fix, hopefully in the
near future numba will support numpy array allocation and this will
not be necessary anymore
'''
if target == 'cuda':
    return cuda.jit(f, device=True)
else:
    source = inspect.getsource(f).splitlines()
    assert '@myjit' in source[0]
    source = '\n'.join(source[1:]) + '\n'
    source = source.replace('cuda.local.array', 'np.empty')
    exec(source)
    fun = eval(f.__name__)
    newfun = jit(fun, nopython=True)
    # needs to be exported to globals
    globals()[f.__name__] = newfun
    return newfun

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CPU和GPU的差异

来自分类Dev

在TensorFlow中分配GPU和CPU资源的最佳实践

来自分类Dev

在CPU和GPU之间同步静态分配的结构实例

来自分类Dev

如何使用Python和Numba获取GPU中CUDA内核的数量?

来自分类Dev

numba是否在功能之间将数据从GPU传递到CPU

来自分类Dev

CPU SIMD和GPU SIMD?

来自分类Dev

GPU和CPU之间的区别

来自分类Dev

异步CPU读取和GPU + CPU计算

来自分类Dev

numba中的int数组

来自分类Dev

numba中的int数组

来自分类Dev

Python:并行化GPU和CPU工作

来自分类Dev

CPU和GPU生成的结果不匹配

来自分类Dev

Hugin,多核CPU和可选GPU

来自分类Dev

CPU和GPU是否符合要求?

来自分类Dev

Theano对CPU和GPU的不同结果

来自分类Dev

为什么cpu和gpu的结果不同?

来自分类Dev

在CPU和GPU的两个单独的Juypter笔记本中训练Keras模型

来自分类Dev

如何在Windows 10中监控CPU-GPU温度和负载?

来自分类Dev

使用glsl的现代OpenGL中的最佳矩阵结构和CPU / GPU通信

来自分类Dev

在numba函数中创建新的列表/数组

来自分类Dev

如何在Octave中为数组分配匿名函数?

来自分类Dev

数组分配在python函数中如何工作?

来自分类Dev

使用numba jitclass作为numba jit函数中的参数

来自分类Dev

Python中的数组分配

来自分类Dev

结构中的数组分配

来自分类Dev

如何在特定行和列中为numpy数组分配值

来自分类Dev

在C ++中,数组分配的new和new []之间有什么区别

来自分类Dev

如何在特定行和列中为numpy数组分配值

来自分类Dev

cuda cpu函数-gpu内核重叠