Han*_*Han 0 cuda bank-conflict
我是学习CUDA并行编程的新手.现在我对设备的全局内存访问感到困惑.这是关于扭曲模型和合并.
有一些要点:
据说一个块中的线程被分成了warp.在每个warp中最多有32个线程.这意味着同一warp的所有这些线程将与同一处理器同时执行.那么半翘曲的感觉是什么?
当谈到一个块的共享内存时,它将被分成16个库.为了避免银行冲突,多个线程可以同时读取一个银行而不是写入同一个银行.这是正确的解释吗?
提前致谢!
"半翘曲"的主要用法在Fermi生成之前应用于CUDA处理器(例如"特斯拉"或GT200代,以及原始的G80/G92代). 这些GPU采用SM(流式多处理器 - GPU内部的硬件模块)构建,其中少于32个线程处理器.warp的定义仍然相同,但实际的HW执行一次发生在"半warp"中.实际上,粒度细节比这更复杂,但足以说执行模型导致根据半warp的需要发出内存请求,即warp中的16个线程.因此,针对内存事务的完整warp将为该事务生成总共2个请求.
Fermi和更新的GPU每个SM至少有32个线程处理器.因此,在整个warp中立即可以看到内存事务.结果,内存请求以每个warp级别发出,而不是每半个warp.但是,完整内存请求一次只能检索128个字节.因此,对于每个事务每个线程大于32位的数据大小,存储器控制器仍然可以将请求分解为半经线大小.
我的观点是,特别是初学者,没有必要详细了解半翘曲.通常,理解它指的是一组16个线程一起执行并且它对内存请求有影响.
归档时间: |
|
查看次数: |
902 次 |
最近记录: |