google/highway

Performance-portable, length-agnostic SIMD with runtime dispatch

해결하는 문제

Highway는 SIMD(Single Instruction, Multiple Data) 및 벡터 프로그래밍을 실용적이고 이식 가능하게 만들기 위해 설계된 C++ 라이브러리입니다. 개발자는 각 플랫폼에 대해 별도의 아키텍처별 인트린직을 작성할 필요 없이, 다양한 아키텍처에서 CPU 벡터 명령을 활용하는 고성능 코드를 작성할 수 있습니다.

작동 원리

Highway는 CPU 명령에 직접 매핑되는 일련의 이식 가능한 벡터 인트린직을 제공합니다. 이는 다양한 명령 세트(x86 AVX, Arm NEON, RISC-V RVV 등) 간의 하드웨어 차이를 추상화하여 동일한 애플리케이션 코드가 여러 플랫폼을 대상으로 할 수 있도록 합니다. 정적 디스패치(컴파일 시 특정 명령 세트를 대상으로 함)와 동적 디스패치(런타임에 최적의 명령 세트를 감지함)를 모두 지원합니다.

대상

이미지 처리, 선형 대수, 암호학, 비디오 분석 및 압축과 같은 분야에서 CPU 성능의 한계를 넓혀야 하는 소프트웨어 엔지니어를 대상으로 합니다.

주요 특징

  • 폭넓은 아키텍처 지원: x86, Arm, RISC-V, IBM Z, LoongArch, POWER 및 WebAssembly에 걸쳐 27개의 타겟을 지원합니다.
  • 성능 이식성: 실행되는 명령 수를 줄임으로써 5~10배의 속도 향상과 상당한 에너지 절감을 가능하게 합니다.
  • 유연한 배포: 동적 디스패치를 통해 런타임에 최적의 명령 세트를 감지하는 것을 지원합니다.
  • 예측 가능한 결과: CPU 명령에 잘 매핑되는 함수를 제공하여 컴파일러 자동 벡터화에 의존하는 것보다 더 견고한 코드를 만듭니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트