환경 설정
이전 글(#1)에서 Vulkan을 GPGPU용으로 활용할 수 있다는 개념적 소개를 했습니다. 이제 실제 코드를 다루려면 환경이 제대로 갖춰져야 합니다. Ubuntu를 예로 들어 Vulkan SDK 설치, 드라이버 설정, CMake 및 기타 툴 설치 방법을 정리하고, Windows 사용자를 위한 간단한 가이드도 제공하겠습니다.
또한 CUDA 경험자들이 Vulkan 환경 구축을 이해하기 쉽도록 CUDA와의 차이점도 다시 상기시켜드리겠습니다.
Ubuntu에서 Vulkan 환경 설정
1. GPU 드라이버 설치:
NVIDIA의 경우:
sudo apt update
sudo ubuntu-drivers devices
sudo ubuntu-drivers autoinstall
AMD/Intel의 경우에는 Mesa 드라이버가 기본적으로 제공되며 mesa-utils 설치 후 glxinfo로 상태를 확인할 수 있습니다.
2. Vulkan SDK 설치:
기본 패키지:
sudo apt update
sudo apt install vulkan-utils libvulkan-dev
이것만으로도 헤더, 기본 유틸이 설치되지만, 최신 Validation Layer나 추가 툴 활용을 위해서는 LunarG Vulkan SDK를 추천합니다.
LunarG Vulkan SDK에서 Linux용 SDK 다운로드 후:
tar -xvf vulkansdk-linux-x86_64-<version>.tar.gz
cd vulkan-sdk-<version>/
source setup-env.sh
이렇게 환경 변수를 설정하면 헤더, 라이브러리, Validation Layer 등을 활용할 수 있습니다. .bashrc나 .zshrc에 추가해두면 매번 설정할 필요가 없습니다.
3. CMake, Git, SPIR-V 툴 설치:
sudo apt install cmake git
SPIR-V 관련 툴(glslc 등)은 LunarG SDK에 포함되어 있습니다.
설치 후 vulkaninfo 명령을 통해 GPU 디바이스 정보가 정상적으로 출력된다면 환경이 제대로 갖춰진 것입니다.
CUDA와 비교하면 CUDA는 NVIDIA GPU에 특화된 툴킷 하나로 정리되는 반면, Vulkan은 GPU 벤더 중립적이므로 드라이버, SDK를 따로 세팅해야 하지만, 그만큼 다양한 하드웨어 지원이 가능합니다.
Windows 사용자 가이드 (간략)
- GPU 드라이버 업데이트: NVIDIA, AMD, Intel 공식 사이트에서 Vulkan 지원 드라이버 설치
- LunarG Vulkan SDK for Windows 설치: 인스톨러 실행 후 환경 변수 자동 설정
- Visual Studio나 VSCode에서 CMake 프로젝트로 빌드 가능
- vulkaninfo.exe로 환경 확인
CUDA 환경에서 Windows 셋업은 NVIDIA 인스톨러 하나로 대부분 해결되는 반면, Vulkan은 Khronos 표준 기반이라 드라이버, SDK를 따로 챙겨야 합니다.
가장 단순한 Hello Vulkan 예제 (C++ 코드)
이제 정말 최소한의 예제를 통해 Vulkan 인스턴스를 생성하고, 성공적으로 Vulkan 함수를 호출할 수 있는지 확인해봅시다. 이 코드는 아무 연산도 하지 않고, 인스턴스 생성에 성공하는지만 체크하는 수준입니다.
hello_vulkan.cpp 예제:
#include <iostream>
#include <vulkan/vulkan.h>
int main() {
VkInstanceCreateInfo createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
VkInstance instance;
VkResult result = vkCreateInstance(&createInfo, nullptr, &instance);
if (result != VK_SUCCESS) {
std::cerr << "Failed to create Vulkan instance!" << std::endl;
return 1;
}
std::cout << "Hello Vulkan! Instance created successfully." << std::endl;
vkDestroyInstance(instance, nullptr);
return 0;
}
이 코드는 인스턴스를 만들고 성공 여부를 출력한 뒤 인스턴스를 파괴합니다. 성공 시 “Hello Vulkan!” 메시지를 확인할 수 있습니다.
CMake를 이용한 빌드 설정
위 예제를 빌드하기 위해서는 Vulkan 라이브러리를 링크해야 합니다. 간단한 CMakeLists.txt를 작성해봅시다.
CMakeLists.txt 예제:
cmake_minimum_required(VERSION 3.10)
project(hello_vulkan)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Vulkan REQUIRED)
add_executable(hello_vulkan hello_vulkan.cpp)
target_link_libraries(hello_vulkan Vulkan::Vulkan)
이렇게 하면 find_package(Vulkan REQUIRED)를 통해 Vulkan 라이브러리를 찾고, target_link_libraries를 통해 hello_vulkan 실행파일에 Vulkan 라이브러리를 연결합니다. CMake는 LunarG SDK나 시스템에 설치된 Vulkan 패키지를 인식할 수 있습니다.
이제 빌드 과정은 다음과 같습니다.
mkdir build
cd build
cmake ..
make
빌드가 성공하면 ./hello_vulkan을 실행해 “Hello Vulkan!” 메시지를 확인하세요.
CUDA와 비교하면, CUDA는 NVCC를 사용하는 독자적 빌드 파이프라인을 갖추는 경우가 많으며, find_package(CUDA) 등을 활용하거나 CMake의 CUDA 언어 모드를 설정하는 식으로 접근합니다. Vulkan은 Khronos 표준을 이용해 시스템에 설치된 라이브러리를 찾는 접근을 하므로, 조금 더 일반적인 CMake 패턴에 가깝습니다.
정리
- Ubuntu에서 드라이버, Vulkan SDK 설치 및 CMake 환경 구축
- Windows에서도 비슷한 접근 가능
- 가장 단순한 Hello Vulkan 예제(C++ 코드) 및 CMake 설정 예시 제시
- CUDA와 달리 멀티벤더 환경에 맞춰 Vulkan SDK와 드라이버를 조합
이 과정을 통해, Vulkan API 호출이 가능한 환경과 빌드 시스템을 마련했습니다. 이제 다음 글에서 인스턴스 이후의 단계, 즉 물리 디바이스 선택, 로지컬 디바이스 및 큐 확보 과정을 살펴봄으로써 실제 GPU에 접근하는 발판을 마련할 것입니다.
다음 글 예고
다음 글(#3)에서는 Vulkan 인스턴스 이후 과정인 물리 디바이스(Physical Device) 선택, 로지컬 디바이스(Logical Device) 생성, 큐(Queue) 확보를 다루며, 왜 CUDA보다 단계가 긴지, 그만한 가치가 있는지 함께 고민해보겠습니다.
유용한 링크 & 리소스
- LunarG Vulkan SDK
- Khronos Vulkan GitHub
- Vulkan Tutorial
- CUDA 공식 문서 - CUDA 환경 설정과 비교 시 참고
'개발 이야기 > Vulkan' 카테고리의 다른 글
[Vulkan으로 GPGPU 시작하기] #6: Compute 셰이더, 파이프라인 구성, 디스크립터 사용법 (0) | 2024.12.09 |
---|---|
[Vulkan으로 GPGPU 시작하기] #5: 메모리 관리와 버퍼/이미지 객체 기초 (1) | 2024.12.09 |
[Vulkan으로 GPGPU 시작하기] #4: 큐와 커맨드 버퍼로 명령 관리하기 (0) | 2024.12.09 |
[Vulkan으로 GPGPU 시작하기] #3: 물리 디바이스 선택, 로지컬 디바이스, 그리고 큐 준비하기 (0) | 2024.12.09 |
[Vulkan으로 GPGPU 시작하기] #1: Vulkan 소개와 시리즈 개요 (0) | 2024.12.09 |