Максимальное количество потоков, которые могут использоваться в cuda [duplicate]

Я столкнулся с аналогичной проблемой.

Caused by: java.lang.NoSuchMethodError: com.abc.Employee.getEmpId()I

Наконец, я определил, что основной причиной было изменение типа данных переменной.

  1. Employee.java -> Содержит переменную (EmpId), тип данных которой изменен с int на String.
  2. ReportGeneration.java - -> Извлекает значение с помощью getter, getEmpId().

Мы должны отменить банку, включив только измененные классы. Поскольку изменений в ReportGeneration.java не было, я включил только файл Employee.class в Jar. Мне пришлось включить файл ReportGeneration.class в банку, чтобы решить проблему.

9
задан Mark 17 November 2016 в 02:56
поделиться

1 ответ

Для ядра CUDA мы можем запустить не более 65536 блоков. Каждый запущенный блок может содержать до 1024 потоков. Поэтому в принципе я могу запустить до 65536 * 1024 (= 67108864) потоков.

Нет, это неверно. Вы можете запустить сетку до 65535 x 65535 x 65535 блоков, и каждый блок имеет максимум 1024 потока на блок, хотя ограничение потока потоков может ограничить общее количество потоков на блок меньше этого максимума.

Что делать, если мой поток использует много регистров? Будет ли мы до сих пор иметь возможность достичь этого теоретического максимума числа потоков?

Нет, вы не сможете достичь максимального количества потоков на блок в этом случае. Каждый выпуск инструментария NVIDIA CUDA включает таблицу калькулятора занятости, которую вы можете использовать, чтобы увидеть влияние давления регистра на размер предельного блока.

Кроме того, после написания и запуска ядра CUDA, как сделать Я знаю, что количество потоков и блоков, которые я запускал, действительно было создано. Я имею в виду, что я не хочу, чтобы графический процессор вычислял некоторый барахло или странно наблюдал, если бы я случайно создал больше потоков, чем это возможно для этого конкретного ядра.

Если вы выберете неправильную конфигурацию выполнения (так что неправильный размер блока или размер сетки) ядро ​​не запускается, и среда выполнения выдаст сообщение об ошибке cudaErrorInvalidConfiguration. Вы можете использовать стандартные cudaPeekAtLastError() и cudaGetLastError(), чтобы проверить статус запуска ядра.

17
ответ дан Nabin 16 August 2018 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: