GPU 并行结构层次

GPU 并行结构层次

从程序上,GPU的并行层次依次为 grid  block  wrap

每个kernel对应一个grid。wrap内的线程可以通过调度器来控制运行,一个wrap内的线程同时执行。wrap 的大小为32,所有指定block 的大小时,最好是32的大小,以免造成资源的浪费。

每个线程有自己的local memory,一个block 内的线程共享share memory。启动的block 越多,每个block 能分到内存越小,也会影响程序的执行效率,所以并不是block 启动的越多越好。同样的,线程越多,每个线程的local memory 也就越少,也会影响程序的并行性。

有内置的变量,blockIdx  threadIdx 来获取grid和 block 的 维度,其维度分别可以一二三维,每个维度的大小,会随着gpu架构的不同而不同。可以定义一个宏来获取 thread 或者是block 的全局id。GPU的代码异步执行,需要根据程序,显式指定是否同步,cudasynchronize.