반응형
SYCL 입문 시리즈의 두 번째 글입니다. 지난 글(#1)에서는 SYCL 개념 소개, Conda 및 Windows 환경 설정, CMake 빌드, 그리고 “Hello SYCL!” 예제를 CPU나 가능한 디바이스에서 실행하는 방법을 살펴봤습니다. 이제 한 단계 더 나아가, NVIDIA GPU나 Qualcomm GPU에서 SYCL 코드를 실행하는 전략을 다루겠습니다. 이는 SYCL의 큰 장점 중 하나인 이식성을 체험하기 위한 핵심입니다.이번 글에서는 초보자도 따라 할 수 있도록 구현체(백엔드) 선택, 디바이스 선택 로직, CMake 빌드 옵션 등을 구체적으로 제시하겠습니다. 앞서 구축한 Conda 환경이나 Windows 환경에서도 적용 가능한 형태로 설명하니, OS나 개발자 환경에 맞게 응용해보시기 바랍니다...
SYCL 입문 시리즈의 첫 번째 글입니다. 이번 글에서는 SYCL이란 무엇이며, 왜 SYCL을 사용할 때 NVIDIA GPU나 Qualcomm GPU에서도 동일한 코드를 실행할 수 있는지 기본 개념을 소개합니다. 또한 개발 환경 설정, CMake 빌드 시스템 활용, 그리고 가장 기본적인 “Hello SYCL!” 예제를 통해, 독자가 실제로 코드를 컴파일하고 실행해보는 과정을 안내하겠습니다.이 글은 SYCL에 완전히 처음 입문하는 독자를 대상으로 하며, 모든 단계에 대해 가능한 한 자세히 설명하여, 글을 따라만 해도 실제 코드를 실행할 수 있도록 하였습니다.왜 SYCL인가?SYCL은 Khronos 그룹에서 정의한, C++ 기반의 이식성 높은 병렬 프로그래밍 모델입니다. CUDA는 NVIDIA GPU 전용이..
C++로 작성한 고성능 코드나 라이브러리를 파이썬에서 손쉽게 호출하려면 확장 모듈(extension module)을 만들어 파이썬에 로드할 수 있어야 합니다. pybind11은 이러한 바인딩을 매우 간단하게 해주는 라이브러리이며, CMake를 이용하면 C++ 빌드 과정을 관리하고, pyproject.toml을 통해 현대적 파이썬 패키징 표준에 맞춰 배포까지 할 수 있습니다.이 글에서는 다음과 같은 목표를 가집니다.간단한 C++ 함수(C++11 이상) 정의pybind11로 파이썬 바인딩 코드 작성CMakeLists.txt로 빌드 시스템 설정pyproject.toml 이용해 빌드 백엔드와 메타데이터 정의 → pip install . 명령으로 파이썬 패키지 설치 가능하게 하기사전 준비Python 3.7 이상 ..
이번 글에서는 CMake를 사용하여 SIMD(Single Instruction, Multiple Data) 기반의 응용 프로그램을 구성하고 빌드하는 방법을 더욱 자세히 알아보겠습니다. SIMD는 데이터 병렬 처리를 통해 성능을 향상시키는 기술로, 멀티미디어 처리, 신호 처리, 과학 계산 등 다양한 분야에서 활용됩니다. 이번 글에서는 다양한 운영체제, CPU 아키텍처, 컴파일러에 따른 컴파일러 플래그와 옵션 설정 방법을 자세히 살펴보고, 크로스 빌드 상황에서 필요한 설정과 라이브러리, 툴에 대해서도 알아보겠습니다. 또한, 조건부 빌드의 다양한 사례를 통해 실전에서의 활용 방법을 제시하겠습니다.SIMD와 CMake의 통합SIMD 명령어 집합은 CPU 아키텍처와 세대에 따라 다르며, 이를 활용하기 위해서는 컴..
이번 글에서는 CMake를 사용하여 OpenCL 기반의 응용 프로그램을 구성하고 빌드하는 방법을 알아보겠습니다. OpenCL은 이기종 시스템에서 병렬 프로그래밍을 위한 프레임워크로, CPU, GPU, FPGA 등 다양한 디바이스에서 실행할 수 있는 코드를 작성할 수 있습니다. CMake를 활용하여 OpenCL 프로젝트를 효율적으로 관리하고 빌드 시스템에 통합하는 방법을 살펴보겠습니다.OpenCL과 CMake의 통합OpenCL 프로젝트를 CMake로 빌드하려면 OpenCL 헤더와 라이브러리를 설정하고, CMake에서 이를 올바르게 찾고 링크해야 합니다. OpenCL은 Khronos Group에서 표준을 정의하며, 각 하드웨어 제조사에서 구현체를 제공합니다.OpenCL 설치Intel CPU: Intel Op..
이번 글에서는 CMake를 사용하여 Vulkan 기반의 그래픽스 응용 프로그램을 구성하고 빌드하는 방법을 알아보겠습니다. Vulkan은 차세대 그래픽 및 컴퓨팅 API로, 고성능과 낮은 오버헤드를 제공합니다. CMake를 활용하여 Vulkan 프로젝트를 효율적으로 관리하고 빌드 시스템에 통합하는 방법을 살펴보겠습니다.Vulkan과 CMake의 통합Vulkan 프로젝트를 CMake로 빌드하려면 Vulkan SDK와 라이브러리를 설정하고, CMake에서 이를 올바르게 찾고 링크해야 합니다. Vulkan은 플랫폼에 따라 설치 방법이 다를 수 있으므로, 개발 환경에 맞게 설정해야 합니다.Vulkan SDK 설치Windows: LunarG에서 제공하는 Vulkan SDK를 설치합니다.LunarG Vulkan SD..
이번 글에서는 모던 CMake를 활용하여 재사용 가능한 라이브러리를 패키지화하고, 다른 프로젝트에서 손쉽게 사용할 수 있도록 설정하는 방법을 알아보겠습니다. CMake의 패키지 관리 기능을 통해 라이브러리를 배포하고, find_package()를 이용하여 의존성을 간편하게 관리할 수 있습니다. 이 과정을 통해 프로젝트의 확장성과 유지보수성을 크게 향상시킬 수 있습니다.CMake 패키지 구성의 필요성재사용 가능한 라이브러리를 패키지화하면 다음과 같은 이점을 얻을 수 있습니다:의존성 관리의 단순화: find_package()를 통해 필요한 라이브러리를 손쉽게 찾고 링크할 수 있습니다.버전 관리: 특정 버전의 라이브러리를 요구하고, 호환성을 보장할 수 있습니다.배포의 용이성: 라이브러리를 다른 개발자나 프로젝..
이제까지 우리는 CUDA의 기본 문법, 메모리 계층, 비동기 스트림, 2D 데이터 처리 등 다양한 기초 개념을 다뤄왔습니다. 하지만 이 모든 것이 현업이나 프로젝트에서 활용되기 위해서는 체계적인 빌드 환경과 현대적 C++ 기능과의 자연스러운 결합이 중요합니다. 이번 글에서는 CMake를 통한 빌드 시스템 설정 방법과 C++20/23 기능(Coroutine, Concept, Constexpr, Lambda 개선 등)을 CUDA 코드와 융합하여 더 깔끔하고 유지보수하기 쉬운 코드를 만드는 방법을 살펴보겠습니다.CMake로 CUDA 빌드 환경 현대적으로 관리하기기본 구조 복습이전 글에서 간단히 소개했듯이, CMake는 CUDA를 별도의 언어로 인식하고, project(... LANGUAGES CUDA CXX)..
이번 글에서는 CMake를 사용하여 Qt 기반의 응용 프로그램을 구성하고 빌드하는 방법을 알아보겠습니다. Qt는 크로스 플랫폼 GUI 애플리케이션 개발을 위한 강력한 프레임워크로, CMake와 함께 사용하면 효율적인 빌드 시스템을 구축할 수 있습니다.CMake와 Qt의 통합Qt는 기존에 자체 빌드 시스템인 qmake를 사용했지만, 최근에는 CMake를 공식적으로 지원하고 있습니다. CMake를 사용하면 Qt 애플리케이션의 빌드 설정을 보다 유연하고 강력하게 관리할 수 있습니다.Qt5와 Qt6의 차이점Qt5: CMake에서 find_package()를 통해 Qt 모듈을 찾습니다.Qt6: Qt6부터는 CMake 지원이 더욱 강화되어 더 간단하게 설정할 수 있습니다.간단한 Qt 프로젝트 구성디렉토리 구조my_..
들어가며이 시리즈의 여정을 여기까지 따라와주셔서 감사합니다. 우리는 다음과 같은 단계를 거쳐왔습니다.LibTorch와 PyTorch 개념 이해 (1편)PyTorch의 C++ 배포판인 LibTorch를 소개하고, 왜 C++ 환경에서 PyTorch를 사용하는지, 또 Python과 C++을 함께 활용하는 최종 목표를 살펴보았습니다.LibTorch 환경 셋업 및 CMake 프로젝트 기초 (2편)LibTorch를 다운로드하고, CMake를 통해 간단한 "Hello LibTorch" 프로젝트를 구성하며 C++에서 텐서 연산을 위한 기초를 닦았습니다.C++에서 텐서 다루기 (3편)다양한 텐서 초기화와 연산, 모양 변경, GPU 사용 방법 등을 예제 코드를 통해 습득하며 C++에서도 Python PyTorch와 비슷한..