- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我编写了一个 CUDA 程序,与 40 的串行版本(2600k 对比 GTX 780)相比,它已经获得了加速。现在我正在考虑使用多个流来并行运行多个内核。现在我的问题是:如何测量我的 GPU 上的空闲资源(因为如果我的 GPU 上没有空闲资源,那么使用流就没有意义,对吗?),在什么情况下使用流有道理吗?
如果被问到我当然可以提供我的代码,但目前我认为这个问题不需要它。
最佳答案
并发运行内核只有在资源可用时才会发生。正如您已经指出的那样,“耗尽”GPU 的单个内核调用将阻止其他内核以有意义的方式执行,直到该内核完成执行。
最初要考虑的关键资源是 SM、寄存器、共享内存和线程。其中大部分还与占用相关,因此研究现有内核的占用(理论的,即占用计算器,以及测量的)将使您对通过并发获得额外 yield 的机会有一个很好的总体了解内核。
在我看来,只有在启动大量非常小的内核时,并发内核才可能在您的应用程序中显示出很多整体优势,即仅包含一个或少量线程 block 的内核,并且它们非常有限使用共享内存、寄存器和其他资源。
最好的优化方法(在我看来)是分析驱动优化。这往往会避免过早或可能被误导的优化策略,例如“我听说过并发内核,我想知道我是否可以用它让我的代码运行得更快?”分析驱动的优化首先询问基本的利用率问题,使用探查器回答这些问题,然后将您的优化工作集中在改进指标上,例如内存利用率或计算利用率。并发内核或各种其他技术是您可以用来处理代码分析结果的一些策略。
您可以通过 this one 等演示开始分析驱动的优化.
关于c - 何时使用多个流在 CUDA 中获益?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24491019/
我是一名优秀的程序员,十分优秀!