Pulse 게시 ·

Java Vector API 성능 최적화, 벤치마크·어셈블리 분석 사례 소개

Daniel Lemire가 10월 7일 서평에서 『Mastering SIMD with Java Vector API』의 최적화 사례를 소개했다. 배열 합산·중복 제거 등을 SIMD로 바꾸고 벤치마크와 어셈블리로 효과를 살핀다. JDK 16부터 제공된 Vector API는 아직 인큐베이터 모듈이며, 하드웨어에 따라 효과가 달라진다고 설명했다.

Vector API는 jdk.incubator.vector 모듈에 있으며 --add-modules=jdk.incubator.vector 옵션으로 활성화한다.

책은 배열 합산, 평균·표준편차 계산, 중복 제거, 정렬된 배열 병합의 일반 구현을 Vector API로 다시 작성하는 과정을 다룬다.

루프 펼치기, 비대칭 루프, 구조적 위험, 의존성 등을 살피며 데이터 병렬화가 성능 개선으로 이어지지 않는 사례도 다룬다.

Lemire는 이 책의 기술 검토자로 참여했으며, Vector API의 정식 기능 편입은 그의 전망이다.

중복 제거에 쓰는 compress처럼 하드웨어 영향을 받는 연산은 실제 배포할 CPU에서 성능을 비교할 필요가 있다.

원문