macos - Metal中的线程和线程组
问题描述
我对每个线程组的线程和线程组的数量有一些疑问。
因为,我们有
maxTotalThreadsPerThreadgroup
和threadExecutionWidth
,length * width * height
线程组的 应该等于maxTotalThreadsPerThreadgroup
。那么,如果我有maxTotalThreadsPerThreadgroup = 1024
, 和threadExecutionWidth = 32
,那么如果我创建一个大小为(1024 * 1 * 1)
或的线程组有什么区别32 * 32 * 1
呢?总 GPU 执行时间有什么额外的好处吗?或者这只是为了更有效的管理?如果我想运行更多线程,
maxTotalThreadsPerThreadgroup
我将创建多个线程组。假设ThreadGroup1
将在之前执行是否安全ThreadGroup2
?
解决方案
我不是 Metal 计算的权威来源,并且没有记录很多诸如此类的细节,因此请谨慎对待以下内容:
将线程组组织成 1、2 或 3 维对作为开发人员的您来说主要是一种方便。如果您的问题是三维的,请使用具有 3 维的线程组。如果您的问题是一维的,请使用一维的线程组。金属并不真正关心一种或另一种方式。
我认为您无法假设线程组中 GPU 线程的调度顺序。
例如,如果您安排 10 个线程组,每个线程组计算一个中间结果(例如总和),那么您可能不应该依赖第 10 个线程组来收集这些结果并将它们组合成一个最终结果(最终总和)。相反,您必须启动一个新的计算内核来执行此操作。
(我很高兴被证明是错误的,但我还没有读到任何金属保证这种事情的地方。)
推荐阅读
- svg - 根据数据集,圆圈未显示在 svg 上
- java - DOM W3c XML 元素解析空属性
- javassist - 如何定义一个新方法并拦截和委托对该方法的调用?
- mysql - mysql中的有线子查询
- python-3.x - 如何在 Mac 上安装 python pdal?
- ios - Swift iOS背景颜色视图动画作为计时器
- c++ - 如何让我的代码从矩阵中输出非零元素?
- apache-tika - Apache Tika 无法从 PDF 中正确提取印度语言的文本
- javascript - JQUERY:从 URL 获取 JSON 数据
- laravel - 如何在 elequent 模型的验证规则上使用配置变量?