Есть ли максимальное количество потоков в CUDA? - PullRequest
20 голосов
/ 25 августа 2010

Существует ли максимальное количество потоков, которое может быть создано в CUDA?

Для пояснения я имею в виду потоки CUDA, как в потоке, который позволяет выполнять ядра и операции с памятью.

Ответы [ 3 ]

20 голосов
/ 08 сентября 2012

Нет реалистичного ограничения на количество потоков, которые вы можете создать (не менее 1000).Тем не менее, существует ограничение на количество потоков, которые вы можете эффективно использовать для достижения параллелизма.

В Fermi архитектура поддерживает одновременные 16-сторонние запуски ядра, но существует только одно соединение хоста с GPU,Таким образом, даже если у вас есть 16 потоков CUDA, они в конечном итоге попадут в одну очередь HW.Это может создать ложные зависимости данных и ограничить количество параллелизма, которое можно легко получить.

В Kepler количество соединений между хостом и графическим процессором теперь составляет 32 (вместо одного с Fermi).С новой технологией Hyper-Q теперь гораздо проще загружать графический процессор параллельной работой.

12 голосов
/ 26 августа 2010

Я не видел ограничения ни в одной документации, но это не означает, что все потоки будут выполняться одновременно, поскольку это жесткое аппаратное ограничение (многопроцессорные, регистры и т. Д.).

10 голосов
/ 07 сентября 2012

Согласно этой презентации NVIDIA, максимум составляет 16 потоков (по Fermi). http://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf

Чтобы уточнить, я успешно создал более 16 потоков, но я думаю, что аппаратное обеспечение может поддерживать только 16 одновременно работающих ядер, поэтому избыточные из них теряются с точки зрения параллелизма.

Кеплер, вероятно, другой.

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