我有一个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 功能级别 11.0 卡,那么它就不好了,因为不能保证它可以在任何其他驱动程序或设备上工作。
有关 DirectCompute 限制的详细信息,请参阅Microsoft文档。
如果你关心可靠的行为,则跨一系列卡和驱动程序测试 DirectCompute 应用程序非常重要。基本上任何使用 DirectX 12 的情况也是如此。大部分正确性行为都留给应用程序代码。