0

我有一个 DirectCompute 应用程序对图像进行计算(比如计算平均像素值、应用过滤器等等)。对于某些计算,我只是将图像视为整数数组并像这样调度计算机着色器:

FImmediateContext.Dispatch(PixelCount, 1, 1);

结果正是预期值,因此计算是正确的。尽管如此,在运行时,我在调试日志中看到以下消息:

D3D11 ERROR: ID3D11DeviceContext::Dispatch: There can be at most 65535 Thread Groups in each dimension of a Dispatch call.  One of the following is too high: ThreadGroupCountX (3762013), ThreadGroupCountY (1), ThreadGroupCountZ (1) [ EXECUTION ERROR #2097390: DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW]

此错误仅显示在调试日志中,其他一切都正确,包括计算结果。这让我认为 GPU 以某种方式管理非常大的线程组,可能会将其分解为按顺序执行的较小组。

我的问题是:我应该关心这个错误还是可以保留它并让 GPU 为我完成工作?

谢谢。

4

1 回答 1

1

如果您只关心它在您的特定硬件和驱动程序上的工作,那很好。如果您关心它在所有 Direct3D Feature Level 11.0 卡上的工作,那么它并不好,因为不能保证它可以在任何其他驱动程序或设备上工作。

有关DirectCompute 限制的详细信息,请参阅Microsoft Docs 。

如果您关心稳健的行为,那么跨一系列卡和驱动程序测试 DirectCompute 应用程序非常重要。基本上任何使用 DirectX 12 的情况都是如此。大部分正确性行为取决于应用程序代码。

于 2020-01-27T17:48:22.750 回答