CUDA 프로그램의 작동 원리는 3가지로 나뉘어 집니다.
첫 번째로 호스트에서 디바이스 데이터로 데이터가 복사됩니다.
두 번째는 GPU 연산입니다.
세 번째는 디바이스에서 호스트로 데이터를 복사하는 과정입니다.
cudaError_t cudaMalloc (void** ptr, size_t size)
여기에서 cudaError_t는 enum cudaError 안에 명세되어 잇습니다.
enum cudaError
CUDA error types Values
cudaSuccess = 0The API call returned with no errors. In the case of query calls, this also means that the operation being queried is complete (see cudaEventQuery() and cudaStreamQuery()).
This error return is deprecated as of CUDA 5.0. It is no longer an error to attempt to enable/disable the profiling via cudaProfilerStart or cudaProfilerStop without initialization.
This error return is deprecated as of CUDA 5.0. It is no longer an error to call cudaProfilerStart() when profiling is already enabled.
This error return is deprecated as of CUDA 5.0. It is no longer an error to call cudaProfilerStop() when profiling is already disabled.
디바이스 메모리 할당/초기화/해제 예제
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
void checkDeviceMemory(void)
{
size_t free, total;
cudaMemGetInfo(&free, &total);
printf("Device memory (free/total) = %lld/%lld bytes\n", free, total);
}
int main(void)
{
int* dDataPtr;
cudaError_t errorCode;
checkDeviceMemory();
errorCode = cudaMalloc(&dDataPtr, sizeof(int)*1024*1024); //4*1024*1024=4MB
printf("cudaMalloc - &s\n", cudaGetErrorName(errorCode));
checkDeviceMemory();
errorCode = cudaMemset(dDataPtr, 0, sizeof(int)*1024*1024);
printf("cudaMemset - %s\n", cudaGetErrorName(errorCode));
errorCode = cudaFree(dDataPtr);
printf("cudaFree - %s\n", cudaGetErrorName(errorCode));
checkDeviceMemory();
}
'lesson > CUDA Pararrel Programming' 카테고리의 다른 글
CUDA 툴킷 설치 방법 (0) | 2024.06.18 |
---|
댓글