Dispatch调用的每个维度中最多可以有65535个线程组

问题描述 投票:0回答:1

我有一个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为我完成工作?

Thx。

directx directx-11 directcompute
1个回答
0
投票

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

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

如果您关心可靠的行为,则必须跨一系列卡和驱动程序测试DirectCompute应用程序,这一点很重要。基本上任何DirectX 12的使用都一样。许多正确性行为取决于应用程序代码。

© www.soinside.com 2019 - 2024. All rights reserved.