Каков максимальный размер блока в 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. Кернальный код не имел сетки, только линейной структуры.