반응형
SYCL 입문 시리즈의 여섯 번째 글입니다. 지금까지 SYCL 기초 개념(메모리 모델, 커널 작성), 다양한 디바이스(NVIDIA, Qualcomm GPU) 지원 전략, ND-Range와 로컬 메모리, USM 등 최적화 개념까지 살펴보았습니다. 이번 글에서는 이제까지 익힌 내용을 기반으로 간단한 벤치마크를 수행하고, 성능 차이를 관찰하는 방법을 소개합니다. 또한, 디버깅/프로파일링 도구(RenderDoc, Nsight Graphics, Intel VTune 등)를 간단히 연계해, SYCL 코드의 성능 분석 기초를 다뤄보겠습니다.목표이전 글에서 만든 매트릭스 곱(또는 벡터 연산) 예제를 반복 실행하며 시간 측정ND-Range 워크그룹 크기 변화, 로컬 메모리 사용 여부에 따라 성능 차이 관찰간단한 타이머(..
SYCL 입문 시리즈의 다섯 번째 글입니다. 이전 글(#4)에서 ND-Range 활용, USM(United Shared Memory) 소개, 로컬 액세서 등 성능 최적화의 기초 개념을 다뤄보았습니다. 이제는 지금까지 습득한 개념을 종합해 조금 더 실용적인 예제를 만들어보겠습니다. 이번 글에서는 매트릭스 곱(Matrix Multiplication) 연산을 SYCL로 구현하고, ND-Range 설정, 로컬 메모리(로컬 액세서), USM 혹은 버퍼 기반 접근을 통해 성능을 개선하는 아이디어를 제시합니다.목표매트릭스 곱(행렬 A( MxK ) × B( KxN ) = C( MxN ))를 SYCL 커널로 구현ND-Range 설정을 통해 워크그룹 크기, 워크아이템 분배 조정로컬 액세서(local_accessor) 활용..
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),..