Numba cuda动态共享内存:多类型?



我知道我可以通过将大小作为第四个参数传递给内核调用来为numba编译的CUDA内核创建一个动态共享内存数组:

...
foo_kernel[grid, block, stream, shared_bytes](...)
...
@cuda.jit
def foo_kernel(...) -> None:
a = cuda.shared.array(0, nb.int32)

如果我想将a视为多个数组,我可以从这里对其进行切片。

但是,如果我想有两个不同类型的数组呢?我可以这样做吗:

...
a = cuda.shared.array(0, nb.int32)
b = cuda.shared.array(0, nb.float32)
...

然后切片b,这样我就可以访问与a不重叠的值了?

啊哈——一些谷歌发现:https://curiouscoding.nl/posts/numba-cuda-speedup/#v15-dynamic-shared-memory

这证实了确实支持不同的dtype,使用了我猜测的技巧(如上图所示)。

最新更新