Intel APX의 일부 요소가 Nova Lake / Diamond Rapids에서 이점이 없는 것으로 나타남
INTEL
Intel의 컴파일러 엔지니어 Hongyu Wang은 오늘 이 저명한 오픈 소스 컴파일러(open-source compiler)의 기존 Nova Lake 및 Diamond Rapids 타겟에 대한 추가 튜닝을 위해 두 개의 패치를 업스트림(upstream)했습니다. 흥미롭게도, 이 튜닝은 성능 면에서 성과가 나지 않는 부분에 대해 새로운 APX 기능의 일부 속성을 피하기 위한 것입니다. APX는 이러한 차세대 프로세서와 함께 데뷔하는 x86 명령어 세트(instruction set)의 대대적인 업그레이드입니다. 범용 레지스터(general purpose registers)의 수를 두 배로 늘리는 것과 일부 새로운 명령어와 같은 영역은 확실한 승리가 되겠지만, 오늘날의 컴파일러 튜닝을 고려할 때 초기 출시가 완벽한 성공(slam dunk)은 아닌 것으로 보입니다.
이 패치는 결과적으로 Nova Lake에 대한 Intel APX의 메모리 형식 NDD를 비활성화합니다:
"벤치마크 결과 NDD 명령어의 메모리 형식은 Nova Lake에서 유익하지 않은 것으로 나타났습니다. preferred_for_speed 속성을 통해 메모리 소스 피연산자(memory source operands)를 가진 NDD 대안의 우선순위를 낮추기 위해 X86_TUNE_ENABLE_NDD_MEM 튜닝(기본값 off)을 추가합니다. rm 제약 조건(constraint)을 가진 단일 대안이 있는 순수 NDD 패턴의 경우, r,m 대안으로 분리하고 메모리 대안에 preferred_for_speed를 적용합니다. NDD 대안이 있는 레거시(legacy) 패턴의 경우에도 NDD rm 제약 조건을 별도의 r 및 m 대안으로 분리하여 우선순위가 낮아지는 대상이 메모리 형식에만 국한되도록 합니다."
New Data Destination (NDD)은 일부 2-피연산자(two-operand) 정수 명령어를 3-피연산자(three-operand)로 업그레이드하기 위한 Intel APX의 새로운 기능입니다. 하지만 언급된 바와 같이, NDD 명령어의 메모리 형식은 "Nova Lake에서 유익하지 않으며", 따라서 기본적으로 비활성화됩니다.
오늘 GCC Git에 병합된 또 다른 Intel 튜닝 패치는 Nova Lake 및 Diamond Rapids에서 SETcc.ZU 생성을 비활성화합니다. SETcc.ZU 인코딩은 기존의 SETcc 명령어와 비교하여 Intel APX에 의해 강화된 명령어입니다. SETcc.ZU는 SETcc를 실행한 뒤 MOVZX를 실행하는 것보다 더 효율적으로 작동하도록 설계되었습니다. 하지만 이번 패치를 통해 SETcc.ZU가 Nova Lake 및 Diamond Rapids에서는 이점을 제공하지 않는다는 사실이 밝혀졌습니다:
"NovaLake/DiamondRapids에서의 마이크로벤치마크(Microbenchmark) 성능 결과, 이 코어들에서는 SETcc.ZU 인코딩을 통한 이점이 없는 것으로 나타났습니다. 다른 APX 지원 타겟들에 대해서는 활성화 상태를 유지하면서, DMR/NVL에 대해서만 setzucc 생성을 억제하기 위해 X86_TUNE_DISABLE_SETZUCC를 추가합니다."
이상이 오늘 GCC 컴파일러를 위해 병합된 Intel 튜닝 패치들입니다. Nova Lake를 대비하여 GCC와 LLVM/Clang 모두를 위한 추가적인 튜닝 작업이 오늘 또는 향후 며칠 내에 더 나올지 지켜보는 것은 흥미로운 일이 될 것입니다.