Настройка cudaMalloc errno несмотря на возвращение cudaSuccess

В настоящее время по какой-то причине cudaMalloc устанавливает errno в 17, несмотря на возврат cudaSuccess. Я искал в интернете, но мой Google Foo не принес мне никакого просветления, поэтому я решил попросить людей переполнить стек.

Вот мой вывод

ERROR: What is not going down, ERRSTR: Success, ERRNO 0
ERROR: What is going on here?, ERRSTR: File exists, ERRNO 17

А вот и мой код (хотя бы часть)

//headers
#define CheckError(MESSAGE) do { fprintf(stderr,"ERROR: %s, ERRSTR: %s, ERRNO %i\n",MESSAGE,strerror(errno),errno); } while(0);
#define CudaSafeCall( err ) __cudaSafeCall( err, __FILE__, __LINE__ )
#define ARRAY_LENGTH ( 1000000 )
#define ARRAY_ELEMENT_SIZE ( sizeof(int) )
#define ARRAY_SIZE ( (size_t)ARRAY_ELEMENT_SIZE * ARRAY_LENGTH )

inline void __cudaSafeCall( cudaError err, const char *file, const int line )
{
if ( cudaSuccess != err )
{
fprintf( stderr, "cudaSafeCall() failed at %s:%i : %s\n",
file, line, cudaGetErrorString( err ) );
exit( -1 );
}
return;
}

int main(int argc,char* argv[])
{
..... Other Code ......

int *device_array;
CheckError("What is not going on here.");
CudaSafeCall(cudaMalloc((void**)&device_array,ARRAY_SIZE));
CheckError("What is going on here?");

..... Other Code ......
}

Кто-нибудь знает, что здесь происходит? Прямо сейчас ARRAY_SIZE установлен в 4 миллиона, но та же самая проблема обнаруживается, когда это 400.

-2

Решение

Вы, кажется, предполагаете, что errno должен быть равен нулю, если предыдущая функция не вернула ошибку.

Это не вариант.

errno не требуется устанавливать в ноль, если предыдущая функция была успешной.

От Страница man linux:

Его значение имеет значение только тогда, когда возвращаемое значение вызова указывает на ошибку

а также

функция, которая завершается успешно, может измениться errno.

В вашем случае предыдущая функция (какой бы она ни была, в этом случае, вероятно, cudaMalloc или какая-то системная функция, вызываемая cudaMalloc рутина библиотеки) прошла успешно. Поэтому содержание errno переменные не значимы.

1

Другие решения


По вопросам рекламы [email protected]