Странная ошибка при использовании cudaMemcpy: cudaErrorLaunchFailure

У меня есть код 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 после предыдущих вызовов ядра ¿? Проблема в том, что я должен копировать эти данные сюда на каждом шаге, потому что они могут меняться на каждом шаге «пока».

Заранее большое спасибо!!

5
задан horstmann 24 April 2012 в 20:43
поделиться