cudaMemcpy неверный аргумент - PullRequest
       7

cudaMemcpy неверный аргумент

6 голосов
/ 11 апреля 2011

Моя программа запускает 2 потока - поток A (для ввода) и B (для обработки).У меня также есть пара указателей на 2 буфера, так что, когда поток A завершит копирование данных в буфер 1, поток B начинает обработку буфера 1, а поток A начинает копирование данных в буфер 2. Затем, когда буфер 2 заполнен, поток A копируетданные в буфер 1, а поток B обрабатывает буфер 2 и т. д.

Моя проблема возникает, когда я пытаюсь cudaMemcpy Buffer [] в d_Buffer (который ранее был cudaMalloc для основного потока, т. е. до создания потока)Буфер [] также был malloc'd основным потоком).Я получаю ошибку «неверный аргумент», но понятия не имею, что является недопустимым аргументом.

Я сократил свою программу до однопоточной, но все еще использую 2 буфера.То есть копирование и обработка происходит один за другим, а не одновременно.Строка cudaMemcpy точно такая же, как и двухпоточная.Однопоточная программа работает нормально.

Я не уверен, в чем заключается ошибка.

Спасибо.

С уважением, Рэйн

1 Ответ

5 голосов
/ 11 апреля 2011

Если вы делаете это с CUDA 3.2 или более ранней, причина в том, что контексты GPU привязаны к определенному потоку.Если многопоточная программа выделяла память на одном и том же графическом процессоре из разных потоков хоста, выделения заканчиваются установлением разных контекстов, а указатели из одного контекста не переносятся в другой контекст.Каждый контекст имеет свое собственное «виртуализированное» пространство памяти для работы.

Решение состоит в том, чтобы либо использовать API переноса контекста для передачи одного контекста из потока в поток, когда они работают, либо попробовать новую общедоступную CUDAВыпуск 4.0rc2, который должен поддерживать то, что вы пытаетесь делать без использования контекстной миграции.Недостатком является то, что 4.0rc2 является тестовой версией и требует определенного драйвера бета-версии.Этот драйвер не будет работать на всех устройствах (например, на ноутбуках).

...