Skip to main content
QUICK REVIEW

[논문 리뷰] Early Experiences Migrating CUDA codes to oneAPI

Manuel Costanzo, Enzo Rucci|arXiv (Cornell University)|2021. 05. 27.
Parallel Computing and Optimization Techniques참고 문헌 3인용 수 6
한 줄 요약

이 논문은 oneAPI의 DPC++ 프로그래밍 모델로 CUDA 코드를 마이그레이션하는 데 있어 인텔의 dpct 도구의 효과성을 평가한다. 그 결과, dpct는 마이그레이션의 80–90%를 자동화하지만 고급 CUDA 기능을 위해서는 수동 간섭이 필요하다는 점을 입증한다. 생성된 DPC++ 코드는 NVIDIA 및 인텔 장치를 포함한 다양한 CPU 및 GPU 아키텍처에서 기능적 이식성을 확보하며, 실험적 oneAPI 지원으로 인해 실행에 성공하고 성능 차이가 측정 가능하다.

ABSTRACT

The heterogeneous computing paradigm represents a real programming challenge due to the proliferation of devices with different hardware characteristics. Recently Intel introduced oneAPI, a new programming environment that allows code developed in DPC++ to be run on different devices such as CPUs, GPUs, FPGAs, among others. This paper presents our first experiences in porting two CUDA applications to DPC++ using the oneAPI dpct tool. From the experimental work, it was possible to verify that dpct does not achieve 100% of the migration task; however, it performs most of the work, reporting the programmer of possible pending adaptations. Additionally, it was possible to verify the functional portability of the DPC++ code obtained, having successfully executed it on different CPU and GPU architectures.

연구 동기 및 목표

  • 인텔의 dpct 도구가 oneAPI 생태계 내에서 CUDA 코드를 DPC++로 마이그레이션하는 데 있어 자동화 효과를 평가하는 것.
  • 생성된 DPC++ 코드가 CPU 및 GPU를 포함한 이종 아키텍처에서 기능적 이식성이 얼마나 효과적인지 평가하는 것.
  • 고급 CUDA 기능인 협업 그룹(Cooperative Groups) 및 CUDA 전용 인트린식 기능과 같은 dpct의 번역 능력에 대한 격차를 특정하는 것.
  • 마이그레이션된 코드의 성능 특성을 NVIDIA 및 인텔 하드웨어 플랫폼에서 분석하는 것.
  • 개발자들이 oneAPI를 사용한 CUDA 코드 현대화의 실용성과 한계에 대한 통찰을 제공하는 것.

제안 방법

  • 연구는 oneAPI dpct 도구를 사용하여 CUDA C++로 작성된 두 가지 응용 프로그램인 행렬 곱셈과 감소 연산을 DPC++로 자동으로 변환하였다.
  • 마이그레이션 과정은 커널 실행, 메모리 관리 및 장치별 구성 요소를 변환하였으며, dpct는 완전히 변환되지 않거나 번역이 불가능한 코드 섹션을 표시하기 위해 주석을 삽입하였다.
  • 생성된 DPC++ 코드는 NVIDIA RTX 2070 GPU와 인텔 코어 i9-10920X 프로세서에 탑재된 인텔 아이리스 Xe MAX GPU를 포함한 두 가지 하드웨어 플랫폼에서 컴파일되고 실행되었다.
  • 성능 측정은 행렬 곱셈에 대해 문제 크기(4096, 8192, 16384)를 다양하게 설정하여 CUDA 및 DPC++ 실행 시간을 비교하였다.
  • DPC++ 코드는 비인텔 GPU를 포함한 다양한 아키텍처에서 정확성과 기능적 동등성을 검증하였다. 이는 실험적 oneAPI 지원을 통해 가능했다.
  • NVIDIA GPU에서 DPC++ 실행을 가능하게 하기 위해 빌드 프로세스에 수동 조정을 가했다. 기본적으로는 네이티브 지원이 제공되지 않았기 때문이다.

실험 결과

연구 질문

  • RQ1실제로 dpct 도구가 CUDA 코드를 DPC++로 마이그레이션하는 데 얼마나 자동화되는가?
  • RQ2생성된 DPC++ 코드가 다양한 CPU 및 GPU 아키텍처에서 기능적 이식성이 얼마나 효과적인가?
  • RQ3실험적 oneAPI 지원가 존재하는 상황에서, 마이그레이션된 DPC++ 코드를 NVIDIA GPU에서 실행할 경우 성능에 어떤 영향을 미치는가?
  • RQ4dpct에서 완전히 지원되지 않는 CUDA 전용 기능는 무엇이며, 이를 보완하기 위해 필요한 수동 작업은 무엇인가?
  • RQ5자동 번역 이후 DPC++ 코드를 더 단순화하거나 최적화할 수 있는가? 이 과정에서 정확성은 손상되지 않는가?

주요 결과

  • dpct 도구는 CUDA에서 DPC++로의 마이그레이션의 80–90%를 성공적으로 자동화하여 오래된 CUDA 코드를 이식하는 데 있어 수동 작업을 크게 줄였다.
  • 도구는 변환되지 않는 CUDA 기능, 예를 들어 협업 그룹(Cooperative Groups) 및 __shfl_down_sync와 같은 기능을 표시하기 위해 주석을 삽입하였으며, 이는 수동 적응이 필요했다.
  • DPC++ 코드는 기능적으로 정확했으며, 인텔 CPU 및 GPU뿐만 아니라 NVIDIA RTX 2070 GPU에서도 성공적으로 실행되어 이종 아키텍처 간의 이식성을 확인했다.
  • NVIDIA RTX 2070에서 DPC++ 실행 시간은 작은 행렬에서는 CUDA보다 10–15% 높았고, 문제 크기가 커지면서 성능 격차가 더욱 벌어졌다 (예: 16384×16384 행렬에서 38% 느림). 이는 최적화되지 않은 코드 생성으로 인한 것으로 보인다.
  • NVIDIA GPU에서의 성능 오버헤드는 실험적 oneAPI 지원과 대상 최적화 단계의 부족으로 인한 것으로 분석되며, 향후 컴파일러 개선으로 크게 향상될 잠재력이 있음을 시사한다.
  • 번역 후 코드 복잡도가 증가했음에도 불구하고, DPC++ 코드는 SYCL/DPC++ 관례를 준수하였으며, 수동 리팩터링을 통해 추가로 단순화할 수 있었다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.