Заботится ли cuMemcpy о текущем контексте?

Предположим, у меня есть версия графического процессора и драйвера, поддерживающая унифицированную адресацию; два графических процессора, G0 и G1; буфер, выделенный в памяти устройства G1; и что текущий контекст C0 является контекстом для G0.

В этих условиях правомерно лиcuMemcpy()из моего буфера в память хоста, несмотря на то, что он был выделен в другом контексте для другого устройства?

До сих пор я работал, исходя из предположения, что ответ «да». Но я недавно испытал некоторое поведение, которое, кажется, противоречит этому предположению.

1 ответ

ВызовcuMemcpyиз другого контекста разрешено, независимо от того, на каком устройстве был создан контекст. В зависимости от того, в каком случае вы находитесь, я рекомендую следующее:

  • Если это многопоточное приложение, дважды проверьте свою программу и убедитесь, что вы не освобождаете память своего устройства до завершения копирования.
  • Если вы используетеcuMallocAsync/cuFreeAsyncAPI для выделения и/или освобождения памяти, убедитесь, что операции правильно упорядочены по потокам.
  • Запустите Compute-sanitizer в своей программе.

Если после этих шагов у вас не исчезнут проблемы, вы можете сообщить об ошибке NVIDIA здесь .

Другие вопросы по тегам