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