Я хочу реализовать алгоритм в 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
?
Если вы можете предоставить какое-либо понимание любого из этих^^ вопросы, я был бы признателен.