在 MTLComputePipelineState 上,什么决定 maxTotalThreadsPerThreadgroup?

TJe*_*Jez 5 macos shader ios metal metalkit

在 iOS 或 MacOS 上使用金属着色器/计算内核时...

MTLComputePipelineState有一个限制maxTotalThreadsPerThreadgroup.

该限制可以在管道状态创建后查询。此限制取决于 GPU 硬件特性、操作系统版本和 Metal 内核代码。

  • Metal 内核代码的哪些方面影响 MTLComputePipelineState 的 maxTotalThreadsPerThreadgroup?
  • 在给定固定硬件/操作系统组合的情况下,可以采取哪些措施来增加价值?

例如:

  • 注册使用?
  • 代码长度?
  • 强制内联?

(问题不是如何计算最佳大小,而是如何修改代码以实现最大线程组。)

链接到Apple的文档MTLComputePipelineStatehttps://developer.apple.com/documentation/metal/mtlcomputepipelinestate/1414927-maxtotalthreadsperthreadgroup

链接到 Apple 文档“计算线程组和网格大小”: https: //developer.apple.com/documentation/metal/calculate_threadgroup_and_grid_sizes ?language=objc