CUDA cudaMalloc - PullRequest
       9

CUDA cudaMalloc

3 голосов
/ 29 июня 2011

Я начал писать новое приложение CUDA.Однако я попал в забавный обходной путь.Вызов первого cudaMalloc для переменной x завершается неудачно в первый раз.Однако, когда я вызываю его во второй раз, он возвращает cudaSuccess.Недавно обновленный до CUDA 4.0 SDK, это действительно странная ошибка.

Я даже провел некоторое тестирование, и кажется, что первый вызов cudaMalloc завершился неудачей.

Ответы [ 2 ]

4 голосов
/ 29 июня 2011

Самый первый вызов любой из функций библиотеки cuda запускает процедуру инициализации. Может случиться так, что как-то не получится инициализация, а не сам cudaMalloc. (Руководство по программированию CUDA, раздел 3.2.1)

Как-то позже, однако, похоже, что это работает, несмотря на первоначальный сбой. Я не знаю ваши настройки и ваш код, поэтому я не могу вам помочь. Проверьте руководство по программированию!

2 голосов
/ 29 июня 2011

I настоятельно рекомендует с использованием макроса CUDA_SAFE_CALL, если нет - для принудительной синхронизации потоков, по крайней мере, во время отладки кода:

CUDA_SAFE_CALL(cudaMalloc((void**) &(myVar), mem_size_N ));

Обновление: Согласно @talonmies, вам не нужна библиотека cutil. Итак, давайте перепишем решение:

/*  Allocate Data  */
cudaMalloc((void**) &(myVar), mem_size_N );

/*  Force Thread Synchronization  */
cudaError err = cudaThreadSynchronize();

/*  Check for and display Error  */
if ( cudaSuccess != err )
{
    fprintf( stderr, "Cuda error in file '%s' in line %i : %s.\n",
             __FILE__, __LINE__, cudaGetErrorString( err) );
}

И, как отмечено в другом ответе, вы можете включить синхронизацию и проверку перед выделением памяти, чтобы убедиться, что API инициализирован правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...