美文网首页
关于CUDA程序的grid和block size选择

关于CUDA程序的grid和block size选择

作者: fantasy5328 | 来源:发表于2020-07-26 00:32 被阅读0次

    疑问

    之前一直不太明白的一点:在thread总数确定的情况下,grid size(block number) 和block size(thread number per block)如何组合?
    比如说想在8个SM上跑10248个thread,那可以81024,也可以16512,或32256,如何选择最佳?

    Background

    首先明确GPU软硬件的一些情况:

    • 计算engine中有很多SM,每个SM有很多core。
    • cuda程序中的每个block是跑在GPU中的一个SM上的,一个SM可以同时跑多个block。
    • 由于GPU的SIMT架构,每个core都采用流水线机制,处理多个thread才能隐藏延迟,达到最大性能。
    • 所以一个SM处理的thread数量往往大于core的数量。
    • 每个SM有最大thread数量限制,每个block也有最大block数量。
    • thread以warp(32个thread)为单位跑在SM上。
    • 在硬件限制条件下,跑越多thread,Occupancy()越高,吞吐量应该就越高。
    • 硬件限制包括线程数、维度、共享内存、寄存器等。

    一些发现

    • GPU中一般SM的最大thread数量限制会大于每个block的最大block数量。
    • 根据网上的一些帖子,满足SM最大thread数量的条件下,block数量少一些比较好。

    总结

    在需要满足最高的吞吐量时,尽量满足SM的最大thread数量,同时block数量尽量少。
    举例:SM最大thread:2048;block最大thread:1024.
    这时就尽量安排每个SM 2个block,每个block1024个线程。当然还要满足register、shared memory的要求。

    附:

    最大寄存器限制

    相关文章

      网友评论

          本文标题:关于CUDA程序的grid和block size选择

          本文链接:https://www.haomeiwen.com/subject/fasplktx.html