AWS Graviton3 기반 SVE를 사용한 NVIDIA HPC 소프트웨어 가속화

Reading Time: 3 minutes

최근 NVIDIA HPC SDK 업데이트로 이식성이 확장되면서 이제는 Arm 기반 AWS Graviton3 프로세서까지 지원됩니다. 이번 게시글에서는 NVIDIA 컴파일러를 사용해 Scalable Vector Extension(SVE) 자동 벡터화를 활성화하여 AWS Graviton3 CPU 기반 HPC 애플리케이션의 성능을 극대화하는 방법에 대해서 알아보겠습니다.

NVIDIA HPC SDK

NVIDIA HPC SDK에는 개발자 생산성을 극대화하고, GPU, CPU 또는 클라우드에 사용할 HPC 애플리케이션을 개발하는 데 필요할 뿐만 아니라 성능까지 검증된 컴파일러, 라이브러리 및 소프트웨어 도구가 포함되어 있습니다.

NVIDIA HPC 컴파일러는 NVIDIA GPU를 비롯한 멀티코어 Arm, OpenPOWER 또는 x86-64 CPU를 대상으로 크로스 플랫폼 C, C++ 및 Fortran 프로그래밍을 지원합니다. 이 컴파일러는 OpenMP, OpenACC 및 CUDA가 탑재되고, C, C++ 또는 Fortran으로 작성된 HPC 모델링 및 시뮬레이션 애플리케이션에 이상적입니다. 

Speedup (추정)비율 (추정)초 (추정)
NVHPCGCC 12.1NVHPCGCC 12.1
64 Copy FPRate1.04263254501519
64 Thread FPSpeed1.1718816173.685.9
표 1. SPEC CPU 2017 추산 결과

또한 컴파일러는 최적의 NVIDIA Math 라이브러리, 통신 라이브러리, 성능 튜닝 및 디버깅 도구와 완벽한 상호운용성을 자랑합니다. 이러한 가속 Math 라이브러리가 일반 HPC 알고리즘에 대한 성능을 극대화하고, 최적의 통신 라이브러리가 표준을 기반으로 스칼라 시스템 프로그래밍을 지원합니다.

이렇게 성능 프로파일링과 디버깅이 통합된 도구들은 HPC 애플리케이션을 손쉽게 이식하고 최적화하고, 컨테이너화 도구들은 온프레미스 또는 클라우드 환경에서 HPC 애플리케이션을 배포하는 데 용이합니다.

Arm과 AWS Graviton3

AWS Graviton3는 2022년 5월에 AWS의 Arm 기반 CPU로 출시되었습니다. Arm 아키텍처는 이전 세대부터 이어지는 전력 효율을 바탕으로 높은 메모리 대역폭까지 지원하여 클라우드 및 데이터 센터 컴퓨팅에 이상적입니다. Amazon 보고서:

최신 AWS Graviton3 프로세서가 탑재된 Amazon EC2 C7g 인스턴스는 컴퓨팅 집약적인 워크로드를 대상으로 Amazon EC2에서 최고의 가성비를 자랑합니다. C7g 인스턴스는 HPC, 배치 프로세싱, 회로 설계 자동화(EDA), 게이밍, 비디오 인코딩, 과학 모델링, 분산 분석, CPU 기반 머신 러닝(ML) 추론, 광고 게재에 이상적입니다. 6세대 AWS Graviton2 기반 C6g 인스턴스와 비교해도 최대 25% 높은 성능을 발휘합니다.

AWS Graviton2와 비교한 ANSYS 벤치마크에서는 AWS Graviton3의 성능이 35% 높은 것으로 나타났습니다. Formula 1 시뮬레이션 역시 40% 빠릅니다. Arm 기반 CPU는 Arm Neoverse 제품 라인 출시 이후 성능을 크게 높이는 혁신을 이루었습니다. Neoverse N1 코어는 성능을 30%까지 높여 기대 이상의 성과를 거두었습니다.

언제나 경쟁사보다 먼저 새로운 컴퓨팅 기술을 지원하는 Arm의 행보를 귀감 삼아 AWS Graviton3 역시 DDR5 메모리와 Arm 아키텍처에 탑재되는 SVE를 도입하였습니다.

Amazon EC2 C7g 인스턴스는 DDR5 메모리를 클라우드에 처음 도입하면서 DDR4 메모리 대비 50% 높은 메모리 대역폭을 제공하여 메모리에 저장된 데이터에 빠르게 액세스할 수 있습니다. 메모리 대역폭을 빠짐없이 이용하려면 최신 벡터화 기술인 Arm SVE를 사용하는 것이 가장 효과적입니다.

SVE 아키텍처

AWS Graviton3는 처음으로 DDR5를 제공하는 클라우드 호스팅 CPU입니다. 또한, 최초로 SVE를 클라우드에 도입하기도 했습니다.

SVE가 처음 도입된 것은 RIKEN Fugaku 슈퍼컴퓨터에 탑재되는 Fujitsu A64FX CPU였습니다. Fugaku가 처음 공개되었을 때 당시 HPC CPU 벤치마크 기록을 모두 깨뜨리면서 2년 동안 TOP500 슈퍼컴퓨터 순위에서 1위를 굳건하게 지켰습니다.

SVE와 고대역폭 메모리는 A64FX 설계에서 가장 돋보일 뿐만 아니라 A64FX가 HPC에 이상적인 이유를 잘 보여줍니다. 이제 이 두 가지 기능이 AWS Graviton3 프로세서에 탑재되었습니다.

SVE는 Arm 아키텍처에 탑재되는 차세대 SIMD 확장 기능입니다. CPU 구현 시 값이 광범위하기 때문에 벡터 길이를 유연하게 구성할 수 있습니다. 벡터 길이는 최소 128비트에서 최대 2,048비트까지 128비트씩 증가합니다.

예를 들어 Fujitsu A64FX는 SVE를 512비트에서 구현하는 반면 AWS Graviton3는 256비트에서 구현합니다. 다른 SIMD 아키텍처와 달리 두 CPU 모두 하드웨어 벡터 비트 폭은 다르지만 실행되는 어셈블리 코드가 동일합니다. 이것을 VLA(Vector-Length Agnostic) 프로그래밍이라고 합니다.

VLA 코드는 이식성이 뛰어날 뿐만 아니라, 컴파일러로 하여금 어셈블리 코드를 더욱 정확하게 생성할 수 있도록 합니다. 하지만 컴파일러가 타겟 CPU의 하드웨어 벡터 비트 폭까지 알고 있다면 해당 아키텍처에 따라 더욱 효율적인 최적화가 가능합니다. 이것이 VLS(Vector Length Specific) 프로그래밍입니다.

SVE는 VLA와 VLS에 동일한 어셈블리 언어를 사용합니다. 코드를 생성하면서 데이터 레이아웃, 루프 트립 카운트, 기타 관련 기능에 대한 어설션을 자유롭게 만들어 추가할 수 있다는 점만 다릅니다. 따라서 타겟에 따라 최적화된 코드를 생성하여 CPU를 효과적으로 이용할 수 있습니다.

또한 SVE는 HPC와 ML 애플리케이션에 강력하고 이상적인 고급 기능을 다양하게 선보이고 있습니다. 예를 들면 다음과 같습니다.

  • gather-load 및 scatter-store 명령어를 사용해 구조체 배열과 기타 비연속 데이터에 대한 연산으로 벡터화가 가능합니다.
  • 추측 벡터화 기능으로 문자열 조작 함수와 제어 흐름 루프의 SIMD 가속화가 가능합니다.
  • 수평적 직렬화 벡터 연산 기능으로 데이터 축소가 용이할 뿐만 아니라 대규모 데이터 세트에 대한 처리 루프의 최적화도 지원합니다.

SVE는 NEON 명령어 세트를 확장하거나 대체하는 것이 아닙니다. NEON 명령어 세트 역시 AWS Gravition3에서 사용 가능합니다. SVE는 HPC 및 ML에 따라 데이터 병렬 처리를 개선하기 위해 새롭게 설계되었습니다.

NVIDIA HPC 컴파일러를 통한 Graviton3 성능 극대화

컴파일러 자동 벡터화는 SVE를 가장 쉽게 이용할 수 있는 방법 중 하나이며, NVIDIA HPC 컴파일러는 22.7 릴리스부터 SVE 자동 벡터화 기능이 지원합니다.

컴파일러는 성능을 극대화할 목적으로 분석을 실행하여 어떤 SIMD 명령어를  생성할지 결정합니다. SVE 자동 벡터화는 타겟별 정보를 사용해 CPU 코어의 벡터 비트 폭을 기준으로 최적화된 VLS 코드를 생성합니다.

SVE 자동 벡터화를 활성화하려면 다음과 같이 타겟 CPU에 해당하는 -tp 아키텍처 플래그를 지정하면 됩니다. -tp=neoverse-v1. -tp 옵션을 지정하지 않으면 애플리케이션이 해당 컴파일 시스템에서 실행됩니다.

Graviton3를 기반으로 NVIDIA HPC 컴파일러를 사용해 컴파일된 애플리케이션은 CPU의 256비트 SVE SIMD 유닛을 자동으로 활용합니다. Graviton3은 -tp=neoverse-n1 옵션을 사용해 하위 호환도 가능하지만 벡터 코드는 128비트 NEON SIMD 유닛에서만 실행됩니다.

NVIDIA HPC SDK 시작하기

NVIDIA HPC SDK는 포괄적이고 검증된 소프트웨어 스택을 제공합니다. HPC 개발자들은 NVIDIA 플랫폼, AWS Graviton3 같은 고성능 시스템을 기반으로 애플리케이션을 개발하고, 성능을 최적화할 수 있습니다.

프로그래밍 모델, 라이브러리 및 개발 도구가 광범위하게 제공되기 때문에 NVIDIA GPU나 AWS Graviton3 같이 SVE를 지원하는 프로세서 같은 시스템에서 최신 성능을 지원하는 하드웨어에 따라 애플리케이션을 효율적으로 개발할 수 있습니다.

자세한 내용은 다음 리소스를 참조하세요.

  • HPC SDK에서 컴파일러 지원이나 기타 게시글에 대해 자세히 알아보세요.
  • HPC SDK 소프트웨어를 무료로 다운로드하세요.

이 블로그에 열거된 SDK의 대부분의 독점 액세스, 얼리 액세스, 기술 세션, 데모, 교육 과정, 리소스는 NVIDIA 개발자 프로그램 회원은 무료로 혜택을 받으실 수 있습니다. 지금 무료로 가입하여 NVIDIA의 기술 플랫폼에서 구축하는 데 필요한 도구와 교육에 액세스하시고 여러분의 성공을 가속화 하세요.

Discuss (0)

Tags

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다