Существует ли максимальное количество потоков, которые могут быть созданы в CUDA?
Чтобы уточнить, я имею в виду потоки CUDA, как в потоке, который позволяет выполнять операции с ядрами и памятью.
Ответ 1
Я не видел предела в любой документации, но это не означает, что все потоки будут выполняться одновременно, поскольку это жесткий аппаратный предел (многопроцессоры, регистры и т.д.).
Ответ 2
Не существует реалистичного ограничения количества потоков, которые вы можете создать (не менее 1000). Однако существует ограничение на количество потоков, которые можно эффективно использовать для достижения concurrency.
В Fermi архитектура поддерживает 16-сторонние одновременные запуска ядра, но есть только одно соединение от хоста к GPU. Таким образом, даже если у вас есть 16 потоков CUDA, они в конечном итоге будут перенаправлены в одну очередь HW. Это может создать ложные зависимости данных и ограничить количество concurrency, которое легко получить.
С Kepler количество соединений между Host и GPU теперь составляет 32 (вместо одного с Fermi). Благодаря новой технологии Hyper-Q теперь гораздо проще поддерживать работу GPU с одновременной работой.
Чтобы уточнить, я успешно создал более 16 потоков, но я думаю, что аппаратное обеспечение может поддерживать только 16 параллельных ядер, поэтому избыточные траты теряются в терминах concurrency.