【问题标题】:Can you call the numba.cuda.random device function in user-created numba CUDA device functions?可以在用户创建的 numba CUDA 设备函数中调用 numba.cuda.random 设备函数吗?
【发布时间】: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 代码已添加

标签: python cuda numba


【解决方案1】:

错误在这里:

@cuda.jit('void(float32[:,:])', device=True) 
def device(rng_states):  

那个签名是不正确的,也是不必要的。据我所知,没有理由认为 rng_states 是或应该是二维 float32 数组。

这样做:

@cuda.jit(device=True) 
def device(rng_states):  

我注意到的其他几件事不是最近的问题:

内核启动首先指定每个网格的块,然后是每个块的线程。因此,如果您将来修改某些内容,这可能是不正确的:

kernel[TPB, BPG](rng_states)

在我看来,最好写成:

kernel[BPG, TPB](rng_states)

最后,你的问题是:

当我尝试调用 xoroshiro128p_uniform_float32

但您的代码反映了:

probability = xoroshiro128p_uniform_float64(

关于这个问题:

之前有没有人在 numba 上的 CUDA 设备函数中成功调用过导入函数?

在一般情况下,来自 python 导入的函数可能在 CUDA 设备代码中可用,也可能不可用。 (大多数是not usable。)这个由numba 提供的随机数生成器可以称为“特例”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-11
    • 2012-08-26
    • 2020-03-30
    • 1970-01-01
    • 2015-05-22
    • 2014-03-28
    • 2013-06-20
    • 2014-08-04
    相关资源
    最近更新 更多