В каждом измерении Диспетчерского вызова может быть не более 65535 групп потоков. - PullRequest
0 голосов
/ 27 января 2020

У меня есть приложение 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.

1 Ответ

1 голос
/ 27 января 2020

Если вы заботитесь только о том, чтобы это работало на вашем конкретном оборудовании и драйвере, тогда это нормально. Если вы заботитесь о том, чтобы он работал на всех картах Direct3D Feature Level 11.0, то это не очень хорошо, поскольку нет гарантии, что он будет работать на любом другом драйвере или устройстве.

Подробнее см. Документы Microsoft . ограничения для DirectCompute.

Если вы заботитесь о надежном поведении, важно протестировать приложения DirectCompute на нескольких картах и ​​драйверах. То же самое относится в основном к любому использованию DirectX 12. Большая часть поведения корректности остается за кодом приложения.

...