반응형
지난 글(#6)에서는 Compute 셰이더를 SPIR-V로 컴파일하고, 이를 기반으로 Compute 파이프라인을 만들고, 디스크립터를 활용해 셰이더에 데이터를 연결하는 방법을 살펴봤습니다. 이제 이 모든 준비 과정을 종합해 실제로 GPGPU 연산을 수행하는 간단한 예제를 만들어보겠습니다. 이번 글에서는 벡터 덧셈(Vector Addition) 예제를 통해, 호스트에서 데이터를 준비하고 GPU로 전달한 뒤, Compute 셰이더를 통해 연산을 수행하고 결과를 다시 가져오는 전체 흐름을 정리해볼 것입니다.CUDA에서 벡터 덧셈은 대략 cudaMalloc, cudaMemcpy, kernel>>, cudaMemcpy라는 단순한 과정을 거치며, 커널 코드도 data[idx] = a[idx] + b[idx];처럼 ..
들어가며이 시리즈에서 우리는 다음과 같은 단계를 거쳐왔습니다.C++ 환경에서 LibTorch 사용법 익히기 (기초 텐서 연산, TorchScript 모델 로드)Python에서 학습한 모델을 C++로 가져와 추론하기pybind11을 통해 C++ 코드를 Python에 바인딩하기C++과 Python 사이에서 텐서를 자유롭게 교환하는 기법 살펴보기이제 여기까지 배운 내용을 종합하여, 하나의 일관된 파이프라인을 구축해봅시다. 최종적으로 다음과 같은 흐름을 구현할 예정입니다.Python에서 텐서(입력 데이터) 준비pybind11로 바인딩된 C++ 함수를 호출해 TorchScript 모델 추론 수행결과 텐서를 Python으로 되돌려 받아 후처리 및 시각화이 과정을 통해 C++ 성능과 Python의 편리함을 동시에 누..
앞선 글에서 우리는 C++에서 PyTorch 텐서를 생성하고 연산하며, TorchScript 모델을 C++에서 로드하는 방법, 그리고 pybind11을 통해 C++ 함수를 Python에서 호출하는 방법까지 살펴보았습니다. 이제 한 단계 더 나아가 C++과 Python 사이에서 텐서를 자유롭게 주고받는 방법을 다뤄보겠습니다.이 과정은 다양한 시나리오에서 유용합니다. 예를 들어,Python에서 전처리한 입력 데이터를 C++ 모델 로직에 전달하고 싶을 때C++에서 계산한 텐서를 Python에서 시각화하거나 후처리하고 싶을 때Python에서 추론 로직 일부를 C++로 구현하여 성능을 향상시키고, 그 결과를 다시 Python으로 반환할 때이 글에서는 pybind11과 LibTorch를 활용해 C++과 Python..
지난 글(#5)에서 우리는 Vulkan에서 GPU 메모리를 관리하고, 버퍼나 이미지를 생성하고, 이를 GPU 메모리에 할당하는 기초를 다뤘습니다. 이제는 GPGPU의 핵심인 Compute 셰이더(Compute Shader)를 사용하기 위한 준비 단계로 넘어가겠습니다. Vulkan에서 Compute 셰이더를 실행하려면, 셰이더 코드를 SPIR-V로 컴파일하고, 이를 Compute 파이프라인(Compute Pipeline)에 등록한 뒤, 디스크립터(Descriptor)를 통해 버퍼, 이미지 등 자원을 셰이더에 연결해야 합니다.CUDA에서는 .cu 파일에 커널 코드를 작성하고 nvcc로 컴파일한 뒤 >> 표기법으로 커널을 호출하는 방식에 익숙할 것입니다. 하지만 Vulkan에서는 셰이더를 GLSL/HLSL로 ..