我知道我可以通过将大小作为第四个参数传递给内核调用来为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,使用了我猜测的技巧(如上图所示)。