Я хотел бы скопировать данные с хоста на устройство и запустить несколько ядер параллельно. Кажется, существует противоречивая информация о том, будет ли запуск вызова функции cublasSetMatrixAsync блокировкой потока по умолчанию?Является ли cublasSetMatrixAsync блокировкой потока по умолчанию?
Я вижу, что он блокирует выполнение, и мне интересно, как правильно его использовать. Должен ли cublasSetMatrixAsync быть в потоке, отличном от стандартного? Если это так, есть ли простой способ для потока по умолчанию блокировать, если в будущем ему понадобится матрица на устройстве для некоторого ядра?
Не могли бы вы указать на соответствующие части документации NVIDIA, которые, по вашему мнению, находятся в конфликте? – njuffa
Более или менее образованная догадка заключается в том, что она будет показывать то же поведение, что и обычные функции memopy CUDA, так как я уверен, что внутри функции CUBLAS просто используют обычные функции CUDA. Поведение последнего подробно объяснялось в http://developer.download.nvidia.com/compute/cuda/4_1/rel/toolkit/docs/online/sync_async.html (к сожалению, этот обзорный раздел, похоже, уже не содержащиеся в более поздних документах ...) – Marco13
@njuffa Я смотрю на pg. 269 в «Профессиональном программировании CUDA» Чэн, Гроссман и Мкерчер. Авторы говорят, что «Если вы хотите пересечь различные операции CUDA, вы должны использовать ненулевые потоки». но затем на этой странице предполагается, что cudaMemcpyAsync может использоваться с потоком по умолчанию. – user3487187