线程模型
block:同一个block内共享内存,同一block中的thread可以彼此进行通信。
block:block-local synchronization。同一个块内的线程可以同步。
线程,可以根据blockIdx和threadIdx唯一的指定。
作者:不会code的程序猿
链接:https://www.jianshu.com/p/0afb1305b1ae
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Warp资源分配
➤ 程序计数器
➤寄存器
➤ 共享内存
每个warp的上下文都是全部保留在SM上的,所以warp之间的切换没有什么消耗。每个SM上的寄存器和共享内存分配给线程块,根据寄存器的多上和共享存储器的大小可以决定同时驻留在一个SM上的warp数目和线程块数目。
一个SM上同时驻留的线程越多,则每个线程占用的寄存器数量越少。
可扩展性Scalability
可扩展:当计算量增大时可以通过增加CUDA core来解决。
参考在不同数量的计算核心上执行相同应用程序代码的能力
作为透明的可扩展性。 透明可扩展的平台拓宽了现有用例
应用程序,并减轻开发人员的负担,因为它们可以避免对新的更改或不同的硬件。 可扩展性比效率更重要。 一个可扩展但效率低的系统可以通过简单地添加硬件核心来处理更大的工作负载。 效率很高但不可扩展系统可能快速达到可实现性能的上限。
C. 编程模型
软硬件概念对应(GPU 硬件层次和调度方式 - 知乎 (zhihu.com))
- Thread -> CUDA Core
- Block -> SM
- Grid -> Device
logical view and hardware view
Warp的执行方式
当创建了一个kernel时,从逻辑上理解为kernel中的所有线程都在并行,但是从硬件物理条件上看同一时刻并不是所有的线程都在执行。。
Warp和线程块