








通讯模式:多个线程合作解决一个问题,常见的合作模式称为Communication Patterns

cuda编程的特点:
对线程块在何处、何时运行不做保证

共享内存是在SM(Streaming Multiprocessor)内部的,一个线程块(block)在启动时,申请的共享内存不能超过 SM 上剩余的共享内存。通常CUDA编译器默认给一个block最多分配48KB,超过就launch失败!如果想要大共享内存,通常要指定 extern shared 的方式动态申请,并且调整launch参数。
获取每个SM和线程块最大共享内存大小
#include <stdio.h>
int main(int argc, char** argv) {
cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, 0);
printf("Shared memory per block: %d bytes\n", prop.sharedMemPerBlock);
printf("Shared memory per SM: %d bytes\n", prop.sharedMemPerMultiprocessor);
}
Shared memory per block: 49152 bytes
Shared memory per SM: 102400 bytes
每个block申请多少共享内存 | 一个SM最多能并行多少block?
48KB | 大概2个block(因为48KB×2=96KB,还剩一点点)
24KB | 大概4个block
8KB | 大概12个block
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。