CUDA软硬件的基本理解

 

1、软件层

  CUDA从软件层分为流、线程格、线程块、线程。在一次Kernel调用时,需要指定一个grid下划分的block的布局和数量,以及一个block下thread的布局和数量。

  cuda stream(流)对应一个任务,存储了一个执行序列,如内存数据交换、执行kernel函数、内存数据交换。如果是多任务(不同kernel函数),则可以使用cuda stream,每个流携带一个kernel函数。(仿佛能并行???)

 

2、硬件层

  GPU由多个SM组成,每个SM下包含 多个SP(执行单元)、共享内存、指令单元等。每个SM以block为单位执行任务(每个SM分配一个block),故block个数最好为SM的倍数,所以block下的线程可以通过共享内存进行通信,block之间无法通过shared memory通信。

  GPU应该是划分为一个内存拷贝引擎和一个kernel执行引擎,所以使用cuda stream可以在一定程度上并行。

  注:关于不同的kernel函数能否同时并行执行,好像是不行,但是为啥每个SM都有指令单元,那SM之间为啥不能执行不同的kernel并行呢???

 

posted @ 2020-08-17 07:59  茶飘香~  阅读(494)  评论(0编辑  收藏  举报