【发布时间】:2022-01-08 12:19:48
【问题描述】:
我在 numba 中有一个 cuda 内核和几个设备函数用于一个项目。当我尝试从
拨打xoroshiro128p_uniform_float32
numba.cuda.random 模块。每当我尝试调用它时,我都会得到:
import numba
from numba import cuda
from numba.cuda.random import create_xoroshiro128p_states
from numba.cuda.random import xoroshiro128p_uniform_float64
@cuda.jit('void(float32[:,:])', device=True)
def device(rng_states):
thread_id = cuda.grid(1)
probability = xoroshiro128p_uniform_float64(rng_states, thread_id)
@cuda.jit()
def kernel(rng_states):
device(rng_states)
BPG = 10
TPB = 10
rng_states = create_xoroshiro128p_states(BPG * TPB, seed=42069)
kernel[TPB, BPG](rng_states)
TypingError: Failed in cuda mode pipeline (step: nopython frontend) Untyped global name 'xoroshiro128p_uniform_float32': Cannot determine Numba type of <class 'function'>
之前有没有人在 numba 上成功调用过 CUDA 设备函数中的导入函数?
【问题讨论】:
-
不,你不能。 numba documentation 描述了您可以在 CUDA 内核代码中执行/使用的操作。但是,如果您想要随机数,则可以使用 example numba code 来执行此操作(基本上是一种特殊情况)。
-
@RobertCrovella 这就是我想要做的...... xoroshiro128p_uniform_float32 是我试图调用的函数。它只是抛出上述错误
-
@RobertCrovella 编辑标题以使其更具描述性
-
我链接的代码给出了一个例子。如果您遇到问题,请提供minimal reproducible example
-
@RobertCrovella 代码已添加