Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[CUDA] cudaFree nie zwalnia pamięci

Ostatnio zmodyfikowano 2017-10-28 21:23
Autor Wiadomość
Kinexity
Temat założony przez niniejszego użytkownika
[CUDA] cudaFree nie zwalnia pamięci
» 2017-10-28 21:23:04
Kod funkcji tworzącej kernel:

C/C++
void launch_kernel( double3 ** arr ) {
    /* Kod wywołujący kernel */
    for( unsigned int index = 0; index < 2; index++ ) {
        check_for_cuda_error( cudaFree(( void * ) arr[ index ] ), __LINE__ );
    }
    delete[] arr;
    /* Pozostały kod */
}

Funkcja kopiująca pamięć:

C/C++
C_Vector ** C_Analysis::gpu_mem_copy( /* argumenty */ ) {
    C_Vector
    ** arr = new C_Vector *[ 2 ];
    for( unsigned int arr_ord = 0; arr_ord < 2; arr_ord++ ) {
        check_for_cuda_error( cudaMalloc(( void ** ) & arr[ arr_ord ], /* pozostałe argumenty */ ), __LINE__ );
    }
    check_for_cuda_error( cudaMemcpy( arr[ 0 ], /* pozostałe argumenty */ ), __LINE__ );
    check_for_cuda_error( cudaMemcpy( arr[ 1 ], /* pozostałe argumenty */ ), __LINE__ );
    return arr;
}

Wywołanie obu w kodzie:

launch_kernel( gpu_mem_copy( /* argumenty */ ) );


Funkcja check_for_cuda_error:

C/C++
void check_for_cuda_error( cudaError_t state, int line ) {
    if( state != cudaSuccess ) {
        cout << "Cuda error - linia " << line << " - " << cudaGetErrorString( state ) << endl;
    }
}

Szczegóły techniczne:
IDE: VS 2017
v. CUDA: 9

Problem: Pamięć na karcie zostaje zaalokowana prawidłowo, lecz po przekazaniu do launch_kernel nie zostaje usunięta pomimo wywołania funkcji cudaFree. Żaden błąd nie jest wyrzucany (do czasu, gdy jest jeszcze dostępna pamięć). Czy jest to może związane, z tym że pamięć na karcie nie może być alokowana z innego miejsca, niż jest usuwana (dziwna teoria, ale ja już się poddałem i nie wiem co jest przyczyną)? Byłbym wdzięczny za wszelką pomoc.


EDIT: W sumie problem sam rozwiązałem, ale zostawiam rozwiązanie dla przyszłych pokoleń - po utworzeniu strumienia na GPU zapominałem go usunąć na koniec.
P-166160
« 1 »
  Strona 1 z 1