Jetson에서 이미 확보한 CPU 버퍼를 CUDA가 사용할 페이지 잠금 영역으로 등록한다.
원래 메모리를 할당하는 동작과 별개다. Jetson의 플랫폼별 지원 조건이 있어 모든 보드에서 된다고 가정하지 않는다.
#include <cuda_runtime.h>
#include <cstdio>
#include <cstdlib>
#define CHECK(call) do { \
cudaError_t cuda_status_ = (call); \
if (cuda_status_ != cudaSuccess) { \
fprintf(stderr, "%s\n", cudaGetErrorString(cuda_status_)); \
exit(1); \
} \
} while (0)
int main() {
void *p = nullptr;
if (posix_memalign(&p, 4096, 4096) != 0)
return 1;
{
CHECK(cudaHostRegister(p, 4096, cudaHostRegisterDefault));
CHECK(cudaHostUnregister(p));
free(p);
}
return 0;
}CHECK는 이 예제에 정의한 오류 검사 매크로다. CUDA 호출이 실패하면 설명을 출력하고 종료하므로 실패한 메모리나 핸들을 계속 사용하지 않는다.
Jetson에서 빌드하기
nvcc -std=c++17 main.cu -o main
./main
답글 달기