[CUDA] cudaFree nie zwalnia pamięci
Ostatnio zmodyfikowano 2017-10-28 21:23
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: void launch_kernel( double3 ** arr ) { for( unsigned int index = 0; index < 2; index++ ) { check_for_cuda_error( cudaFree(( void * ) arr[ index ] ), __LINE__ ); } delete[] arr; } Funkcja kopiująca pamięć: C_Vector ** C_Analysis::gpu_mem_copy( ) { 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 ], ), __LINE__ ); } check_for_cuda_error( cudaMemcpy( arr[ 0 ], ), __LINE__ ); check_for_cuda_error( cudaMemcpy( arr[ 1 ], ), __LINE__ ); return arr; } Wywołanie obu w kodzie: launch_kernel( gpu_mem_copy( ) ); Funkcja check_for_cuda_error: 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. |
|
« 1 » |