[CUDA] C++ with CUDA
Computer Vision 2026. 4. 28. 17:35 |반응형
C++ 프로젝트에 CUDA 파일을 추가해 병렬 프로그래밍 코드를 빌드해 보자.
우선 일반적인 C++ 프로젝트를 만들고 C++ 소스 파일(Source.cpp), 헤더 파일(Header.h), 그리고 CUDA 소스 파일(File.cu)을 생성한다.




File.cu 코드
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "Header.h"
#include <stdio.h>
__global__ void cudaFunc()
{
printf("Hello World from GPU!\n");
}
// 외부(.cpp)에서 호출할 수 있는 래퍼 함수
extern "C" void callCudaFunc() {
// 블록과 스레드 설정
dim3 blocks(1);
dim3 threads(5);
// 내부에서 CUDA 커널 호출
cudaFunc <<<blocks, threads>>> ();
// 디바이스 동기화 (필요시)
cudaDeviceSynchronize();
}
Header.h 코드 (.cpp 파일과 .cu 파일 양쪽에서 include 된다)
#pragma once
// C++ 네임 맹글링(Name Mangling) 문제를 방지하려면 extern "C"를 사용할 수 있다.
#ifdef __cplusplus
extern "C" {
#endif
// cpp 파일에서 호출할 래퍼 함수의 선언
void callCudaFunc();
#ifdef __cplusplus
}
#endif
Source.cpp 코드
#include <iostream>
#include "Header.h"
int main() {
std::cout << "Hello World from CPU!" << std::endl;
callCudaFunc();
return 0;
}
다른 파일(예: .cpp 파일)에서 .cu 파일에 정의된 CUDA 함수(cudaFunc())를 호출하려면, C++ 컴파일러가 CUDA 특화 문법(<<<...>>> 등)을 이해하지 못하기 때문에 래퍼(Wrapper) 함수 패턴을 사용해야 한다.
.cpp에서는 커널(__global__)을 직접 호출할 수 없기 때문에 .cu 파일에 일반 C/C++ 래퍼 함수를 만드는 것이다.

반응형
'Computer Vision' 카테고리의 다른 글
| [CUDA] Device Properties 디바이스 정보 확인 (0) | 2026.04.29 |
|---|---|
| [OpenCV] OpenCV and memcpy (feat.CUDA) (0) | 2026.04.27 |
| [OpenCV] CPU, GPU Image Processing Comparison 이미지 처리 속도 비교 (0) | 2026.04.26 |
| [OpenCV] OpenCV with CUDA Build (0) | 2026.04.26 |
| [OpenCV] Image Resize 영상 리사이즈 (feat.LogLevel) (0) | 2026.04.23 |
