У меня есть код CUDA, который работает, как показано ниже:
cpyDataGPU --> CPU
while(nsteps){
cudaKernel1<<<,>>>
function1();
cudaKernel2<<<,>>>
}
cpyDataGPU --> CPU
И function1 выглядит следующим образом:
function1{
cudaKernel3<<<,>>>
cudaKernel4<<<,>>>
cpyNewNeedDataCPU --> GPU // Error line
cudaKernel5<<<,>>>
}
Согласно документации cudaMemcpy, эта функция может выдавать 4 разных кода ошибки: "cudaSuccess", «cudaErrorInvalidValue», «cudaErrorInvalidDevicePointer» и «cudaErrorInvalidMemcpyDirection».
Однако я получаю следующую ошибку: «cudaErrorLaunchFailure»: «Исключение произошло на устройстве при выполнении ядра. Общие причины включают разыменование недопустимого указателя устройства и доступ к общей памяти за пределами границ. Устройство нельзя использовать до тех пор, пока cudaThreadExit( ). Все существующие распределения памяти устройства недействительны и должны быть реконструированы, если программа должна продолжать использовать CUDA».
Кто-нибудь знает, почему я получаю эту ошибку¿? Что я делаю неправильно?
Имеет ли смысл копировать данные CPU-->GPU после предыдущих вызовов ядра ¿? Проблема в том, что я должен копировать эти данные сюда на каждом шаге, потому что они могут меняться на каждом шаге «пока».
Заранее большое спасибо!!