Каков максимальный размер блока в CUDA?

Теоретически вы можете иметь 65535 блоков на каждое из сеток, до 65535 * 65535 * 65535.

Мой вопрос: если вы вызываете ядро ​​вроде kernel<<< BLOCKS,THREADS >>>() (без объектов dim3), какое максимальное количество доступно для BLOCKS?

В моем приложении я установил его до 192000 и, казалось, работал нормально... Проблема в том, что ядро, которое я использовал, меняет содержимое огромного массива, поэтому, хотя я проверил некоторые части массива и, казалось, было хорошо, я не могу быть уверенным, что ядро ​​вел себя странно в других частях.

Для записи у меня есть 2.1 GPU, GTX 500 ti.

Ответ 1

С вычислительной способностью 3.0 или выше вы можете иметь до 2 ^ 32 - 1 блоков в x-размерности и не более 65535 блоков в измерениях y и z. См. Таблицу H.1. Поддержка функций на каждую вычислительную способность CUDA C Руководство по программированию Версия 9.1.

Как отметил Паван, если вы не предоставите конфигурацию сетки dim3, вы будете использовать только x-меру, поэтому здесь применяется ограничение на размер.

Ответ 2

Если кто-то приземлится здесь на основе поиска Google (как я только что сделал):

Nvidia изменила спецификацию, так как был задан этот вопрос. С вычислительной способностью 3.0 и более новой версией x-размерности сетки блоков потоков допускается до 2'147'483'647 или 2 ^ 31 - 1.

См. Текущий: Техническая спецификация

Ответ 3

65535 в одном измерении. Здесь полная таблица

Ответ 4

Я вручную проверил на своем ноутбуке (MX130), программа вылетает, когда #blocks> 678 * 1024 + 651. Каждый блок с 1 потоком, добавив еще один блок, дает SegFault. Кернальный код не имел сетки, только линейной структуры.