在 iOS Metal 中,文档说 single threadgroup can only be associated with a single compute unit .所以我很好奇选择线程组的数量是否应该取决于可用计算单元的数量?拥有比计算单元更多的线程组是否会受到惩罚?如果将计算单元的数量与线程组相匹配很重要,那么如何确定给定设备上可用计算单元的数量?
最佳答案
这是我目前对其工作原理的理解。我主要基于 Metal 文档结合 this awesome video from NVIDIA 想出了这个心智模型。 .
- 您的网格中需要最少数量的线程组(NVIDIA 的“线程 block ”)才能完成您的工作。是的,如果线程组多于可以并发执行的线程组,则需要更长的时间,但这并不等同于使用更多线程组的“惩罚”。这只是意味着您的问题需要大量处理。
- 一个计算单元可以同时处理的线程组数量因所需内存和可用内存而异。您不能假设有多少线程组可能同时执行。
我目前在设计内核函数时唯一明确的规则是线程组代表线程执行宽度(NVIDIA 的“warp granularity”)的倍数。
除了以最容易思考和编写代码的方式使用线程组之外,我还没有明确的规则来使用线程组和设备内存,因为计算单元的利用率是概率性的。
关于ios - 有多少个线程组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35841043/