먼저 cuda에 복사 할 데이터를 저장할 포인터를 정의해야합니다. 위의 예제에서 우리는 array original_cpu_array를 cuda 전역 메모리로 복사합니다.
int original_cpu_array[array_size];
int *array_cuda;
차지할 크기를 정의하십시오.
int size = array_size * sizeof(int);
CUDA는 메모리 할당 :
msg_erro[0] = cudaMemcpy(original_cpu_array,array_cuda,size,cudaMemcpyDeviceToHost);
:
msg_erro[0] = cudaMemcpy(array_cuda, original_cpu_array,size,cudaMemcpyHostToDevice);
는 CPU에 GPU에서 커넬
복사를 실행합니다 GPU를 CPU에서
msg_erro[0] = cudaMalloc((void **)&array_cuda,size);
복사 0
가능한 메모리 : 디버그
cudaFree(array_cuda);
내가 정상적으로 배열 기능의 상태를 저장 (cudaError_t msg_erro [VAR]을). 그러나 이것은 반드시 필요한 것은 아니지만 할당이나 메모리 전송 중에 오류가 발생하면 시간을 절약 할 수 있습니다.
그리고
오류는 내가 좋아하는 뭔가를 사용하는 것보다 인쇄가 발생 한 경우 :
void printErros(cudaError_t *erros,int size, int flag)
{
for(int i = 0; i < size; i++)
if(erros[i] != 0)
{
if(flag == 0) printf("Alocacao de memoria");
if(flag == 1) printf("CPU -> GPU ");
if(flag == 2) printf("GPU -> CPU ");
printf("{%d} => %s\n",i ,cudaGetErrorString(erros[i]));
}
}
플래그가 나에게 발생의 나 코드의 일부를 나타 내기 위해 기본적으로. 예를 들어 메모리 할당 후 :
msg_erro[0] = cudaMalloc((void **)&array_cuda,size);
printErros(msg_erro,msg_erro_size, 0);
당신은 당신의 CUDA 호출에 확인 오류거야? –