Максимальное количество блоков CUDA? - PullRequest
0 голосов
/ 20 апреля 2019

Я хочу реализовать алгоритм в CUDA, который принимает входные данные размера N и использует N ^ 2 потоков для его выполнения (это способ, которым слова конкретного алгоритма).Меня попросили сделать программу, которая может обрабатывать до N = 2 ^ 10.Я думаю, что для моей системы данный блок потоков может иметь до 512 потоков, но для N = 2 ^ 10 наличие N ^ 2 потоков будет означать наличие N ^ 2/512 = 2 ^ 20/512 блоков.Я прочитал по этой ссылке (http://www.ce.jhu.edu/dalrymple/classes/602/Class10.pdf), что у вас количество блоков «может достигать 65 535 (или больше 2 ^ 31 - 1)».

Мои вопросы:

1) Как узнать фактическое максимальное количество блоков?Я не уверен, что имела в виду ^^, когда говорилось «65 535 (или больше 2 ^ 31 - 1)», потому что это явно очень разные числа.

2) Возможно ли запустить алгоритм, который требует 2 ^ 20/512 потоков?

3) Если число нужных мне потоков (2 ^ 20/512) больше, чем может CUDAпредставьте, что происходит?Заполняет ли он все доступные потоки, а затем переназначает эти потоки дополнительным задачам ожидания после завершения вычислений?

4) Если я хочу использовать максимальное числопотоков в каждом блоке, я должен просто установить количество потоков на 512, например <<<number, 512>>>, или есть преимущество в использовании значения dim3?

Если вы можете предоставить какое-либо понимание любого из этих^^ вопросы, я был бы признателен.

1 Ответ

1 голос
/ 20 апреля 2019
  1. Как узнать фактическое максимальное количество блоков? Я не уверен, что имела в виду ^^, когда говорилось «65 535 (или больше 2 ^ 31 - 1)», потому что это явно разные цифры.

Прочтите соответствующую документацию или соберите и запустите утилиту devicequery . Но в любом случае предел намного больше, чем 2048 (что равно 2 ^ 20/512). Также обратите внимание, что ограничение размера блока на всем поддерживаемом в настоящее время оборудовании составляет 1024 потока на блок, а не 512, поэтому вам может потребоваться всего 1024 блока.

  1. Можно ли запустить алгоритм, требующий 2 ^ 20/512 потоков [sic]?

Да

  1. Если число потоков [sic], которое мне нужно .... больше, чем может обеспечить CUDA, что произойдет?

Ничего. Ошибка во время выполнения.

  1. Заполняет ли он все доступные потоки, а затем переназначает эти потоки дополнительным задачам ожидания после завершения вычислений?

Нет. Вы должны были бы явно реализовать такую ​​схему самостоятельно.

  1. Если я хочу использовать максимальное количество потоков в каждом блоке, я должен просто установить количество потоков на 512, как <<<number, 512>>>, или есть преимущество в использовании значения dim3?

Разницы нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...