一次 Dispatch 调用的每个维度最多可以有 65535 个线程组
There can be at most 65535 Thread Groups in each dimension of a Dispatch call
我有一个 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 为我完成工作?
谢谢。
如果您只关心它在您的特定硬件和驱动程序上的工作情况,那很好。如果您关心它是否适用于所有 Direct3D Feature Level 11.0 卡,那么它就不好,因为不能保证它适用于任何其他驱动程序或设备。
有关 DirectCompute 限制的详细信息,请参阅 Microsoft Docs。
If you care about robust behavior, it's important to test DirectCompute applications across a selection of cards & drivers. The same is true of basically any use of DirectX 12. Much of the correctness behavior is left up to the application code.
我有一个 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 为我完成工作?
谢谢。
如果您只关心它在您的特定硬件和驱动程序上的工作情况,那很好。如果您关心它是否适用于所有 Direct3D Feature Level 11.0 卡,那么它就不好,因为不能保证它适用于任何其他驱动程序或设备。
有关 DirectCompute 限制的详细信息,请参阅 Microsoft Docs。
If you care about robust behavior, it's important to test DirectCompute applications across a selection of cards & drivers. The same is true of basically any use of DirectX 12. Much of the correctness behavior is left up to the application code.