CUDA 中动态分配的共享内存。执行配置
Dynamically allocated shared memory in CUDA. Execution Configuration
by thisNvidia 是什么意思?
Ns
is of type size_t
and specifies the number of bytes in shared
memory that is dynamically allocated per block for this call in
addition to the statically allocated memory; this dynamically
allocated memory is used by any of the variables declared as an
external array as mentioned in __shared__
; Ns
is an optional
argument which defaults to 0;
我的 GPU 中共享内存的大小是 48kB。
例如我想同时 运行 4 个内核,每个内核使用 12kB 的共享内存。
为了做到这一点,我应该这样调用 kernek
kernel<<< gridSize, blockSize, 12 * 1024 >>>();
或者第三个参数应该是 48 * 1024 ?
Ns 以字节为单位。如果你想保留 12kB
的共享内存,你会做 12*1024*1024
.
我怀疑你想这样做。 Ns 值为 PER BLOCK
。所以它是在设备上执行的每个块的共享内存量。我猜您想围绕 12*1024*1024/number_of_blocks;
行做一些事情
以并发方式启动的内核:
如果如评论中所述,您正在使用流,则内核启动中有第四个输入,即 cuda 流。
如果你想在没有任何共享内存的情况下在另一个流上启动内核,它看起来像:
kernel_name<<<128, 128, 0, mystream>>>(...);
但并发性是一个完全不同的问题。
by thisNvidia 是什么意思?
Ns
is of typesize_t
and specifies the number of bytes in shared memory that is dynamically allocated per block for this call in addition to the statically allocated memory; this dynamically allocated memory is used by any of the variables declared as an external array as mentioned in__shared__
;Ns
is an optional argument which defaults to 0;
我的 GPU 中共享内存的大小是 48kB。 例如我想同时 运行 4 个内核,每个内核使用 12kB 的共享内存。
为了做到这一点,我应该这样调用 kernek
kernel<<< gridSize, blockSize, 12 * 1024 >>>();
或者第三个参数应该是 48 * 1024 ?
Ns 以字节为单位。如果你想保留 12kB
的共享内存,你会做 12*1024*1024
.
我怀疑你想这样做。 Ns 值为 PER BLOCK
。所以它是在设备上执行的每个块的共享内存量。我猜您想围绕 12*1024*1024/number_of_blocks;
以并发方式启动的内核: 如果如评论中所述,您正在使用流,则内核启动中有第四个输入,即 cuda 流。
如果你想在没有任何共享内存的情况下在另一个流上启动内核,它看起来像:
kernel_name<<<128, 128, 0, mystream>>>(...);
但并发性是一个完全不同的问题。