반응형
SYCL 입문 시리즈의 네 번째 글입니다. 지난 글(#3)에서 SYCL의 메모리 모델과 커널 작성 패턴, 워크아이템/워크그룹 개념을 다뤄봤습니다. 이제 한 걸음 더 나아가, SYCL에서 ND-Range(nd_range) 구성을 활용하고, 더 복잡한 메모리 관리 기법(예: 다양한 메모리 속성, USM(United Shared Memory) 소개) 등 성능 최적화 전략의 기초를 살펴보겠습니다. 이 글은 여전히 입문자를 대상으로 하며, 모든 단계를 가능한 한 자세히 설명하므로, 독자가 직접 따라 해볼 수 있습니다.다만, USM 등 일부 개념은 SYCL 1.2.1 표준 이후 확장된 기능으로, 구현체(예: oneAPI DPC++, hipSYCL)마다 지원 상황이 다를 수 있으므로, 실습 전에 구현체 문서를 참고하..
SYCL 입문 시리즈의 세 번째 글입니다. 이전 글(#2)에서 NVIDIA GPU나 Qualcomm GPU를 대상으로 SYCL 코드를 실행하기 위한 백엔드 선택, 디바이스 셀렉터 사용 방법을 살펴봤습니다. 이제 한 단계 더 나아가, SYCL의 메모리 모델과 커널 작성 패턴을 자세히 다루겠습니다. 이 글은 여전히 입문자를 대상으로 하며, 가능한 한 모든 단계를 구체적으로 설명하여, 독자가 직접 따라 할 수 있도록 합니다.SYCL에서 메모리와 커널(디바이스 코드) 작성은 SYCL이 제공하는 추상화 덕분에 C++ 람다 표기법을 활용하고, 버퍼(buffer)와 액세서(accessor)를 통해 호스트-디바이스 데이터를 쉽게 관리할 수 있습니다. 또한 워크아이템(work-item), 워크그룹(work-group),..
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 전용이..
강화학습(RL)을 다루다 보면, 다양한 알고리즘(DQN, PPO, SAC 등)을 일일이 직접 구현하고, 하이퍼파라미터를 조정하며, 환경을 실행하는 과정이 만만치 않다는 걸 실감하게 됩니다. 이전 시리즈에서는 PyTorch로 직접 RL 알고리즘을 구현해봤지만, 실제 실험 단계에선 이런 구현 부담을 덜어주는 라이브러리가 큰 도움이 됩니다.Ray RLlib는 그런 니즈에 부합하는 강력한 분산 강화학습 프레임워크입니다. RLlib은 다음과 같은 장점을 갖습니다.다양한 알고리즘 내장: DQN, PPO, SAC, A3C/A2C, IMPALA 등 대표적인 알고리즘을 기본 지원간단한 Config 기반 설정: 하이퍼파라미터, 환경 설정, 알고리즘 변형을 Config 딕셔너리로 쉽게 제어분산/병렬 학습 지원: Ray의 멀..
이전 글에서는 러스트를 활용해 간단한 CLI 유틸리티를 만들며, 명령행 인자 파싱, 파일 시스템 접근, 에러 처리, 테스트, 패키징 등을 체험해보았습니다. 이번에는 CLI 범위를 벗어나, 웹 서버 애플리케이션을 직접 구현해보며 러스트 생태계가 제공하는 네트워크 프로그래밍의 강점을 살펴보겠습니다. 이번 프로젝트의 주요 목표는 다음과 같습니다.간단한 HTTP 서버 구현: 기본적인 HTTP 요청을 받아 “Hello, world!” 혹은 간단한 JSON 응답을 반환하는 서버를 만들어봅니다.Actix-web 프레임워크 사용: 러스트 생태계의 대표적인 웹 프레임워크 중 하나인 Actix-web을 통해 라우팅, 핸들러 작성, 응답 처리 방법을 익힙니다.비동기/async 지원 이해: 비동기 IO 모델을 활용해 효율적인..
1. Throw It Over the Wall이번에 소개할 표현은 "Throw It Over the Wall"입니다. 이 표현은 작업을 완료하지 않고 다음 팀이나 담당자에게 넘기며 책임을 회피하는 행동을 비유적으로 표현합니다. 소프트웨어 개발에서는 팀 간 협업과 책임감을 강조할 때 자주 사용됩니다.2. 의미"Throw It Over the Wall"는 "벽 너머로 던지다"라는 뜻으로, 작업이 충분히 준비되지 않았거나 제대로 완료되지 않았음에도 불구하고, 다음 단계의 팀에게 전달하거나 책임을 넘기는 행동을 나타냅니다.예:"개발팀이 문제를 해결하지 않고 QA팀에 넘겨버렸어요."→ "The development team threw it over the wall to QA without resolving the..
모던 Vulkan (C++ 버전) 시리즈의 아홉 번째 글입니다. 지금까지 인스턴스 생성, 디바이스/큐 확보, 커맨드 버퍼, 메모리 관리, Compute 파이프라인 및 디스크립터 구성, 벡터 덧셈 예제, 디버깅/프로파일링 전략까지 모든 단계를 Modern C++와 Vulkan-HPP를 활용해 재정비했습니다. 이번 글에서는 지금까지 다룬 내용을 정리하고, 앞으로 Intermediate/Advanced 주제로 나아갈 때 고려할 만한 확장 방향성을 소개하겠습니다.여기까지 다룬 내용 요약이 시리즈에서는 기존 입문 시리즈에서 C 스타일 Vulkan 코드를 사용해 다루었던 주제들을 모두 C++17 이상과 Vulkan-HPP, RAII 패턴, 예외 처리를 활용해 Modern C++ 스타일로 다시 구현했습니다.인스턴스 ..
모던 Vulkan (C++ 버전) 시리즈의 여덟 번째 글입니다. 지금까지 RAII와 Vulkan-HPP를 활용해 인스턴스부터 디바이스, 파이프라인, 커맨드 버퍼, 메모리 관리, 벡터 덧셈 예제까지를 Modern C++ 스타일로 재정비했습니다. 이제 개발 과정에서 필수적인 디버깅, Validation Layer, 그리고 성능 프로파일링에 대해 다시 한번 점검해보겠습니다.입문 시리즈에서 Validation Layer와 RenderDoc, Nsight Graphics, Nsight Systems 등의 툴을 간단히 언급한 바 있습니다. 이번에는 RAII 코드 기반으로 디버깅할 때 어떤 장점이 있는지, 그리고 Modern C++ 예외 처리와 결합해서 에러나 경고 메시지를 더 명확하게 처리하는 방법, 성능 프로파일..
모던 Vulkan (C++ 버전) 시리즈의 일곱 번째 글입니다. 이제까지 인스턴스 생성, 디바이스/큐 확보, 커맨드 버퍼, 메모리 관리, 버퍼 생성, Compute 파이프라인 및 디스크립터 구성까지 모두 C++ RAII 패턴과 Vulkan-HPP를 활용해 재정비했습니다. 이제 드디어 실제 GPGPU 연산을 수행하는 벡터 덧셈 예제를 Modern C++ 스타일로 완성해봅시다.입문 시리즈에서 C 스타일로 구현했던 벡터 덧셈 과정(Host에서 A, B를 준비한 뒤 GPU로 올리고, Compute 셰이더로 A+B를 C에 기록, 다시 Host로 결과를 가져오는 과정)을 이제 Vulkan-HPP 기반 C++ RAII 패턴, 예외 처리, STL 컨테이너와 함께 사용해 깔끔하게 재작성하겠습니다.목표호스트에서 std::..