• CUDA程序如何选择最优的grid和block size


    CUDA程序如何选择最优的grid和block size

    0.0762020.07.26 00:32:15字数 435阅读 940

    疑问

    之前一直不太明白的一点:在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的要求。

    转自https://www.jianshu.com/p/11e75686892a

  • 相关阅读:
    Oracle简介
    Python 新建程序
    HTML 标记 3 —— CSS
    Dreamweaver 2
    Dreamweaver 1 网页制作
    has-a关系——多重私有继承
    has-a关系——包含对象成员的类
    《使用wxWidgets进行跨平台程序开发》chap02——一个简单的应用程序
    抽象基类(ABC),纯虚函数
    普通类继承
  • 原文地址:https://www.cnblogs.com/yuyuanbaobei521/p/14272270.html
Copyright © 2020-2023  润新知