Who is vfmaddrnd231pd??
vfmaddrnd231pd는 대체 뭘까요?
Intel 문서에 실렸지만 실제 CPU에서는 실행되지 않는 FMA 명령어 vfmaddrnd231pd를 추적합니다. 작성자는 문서의 설명과 실험 결과를 대조해 명령어가 CPU에 구현되지 않았을 가능성을 제기합니다.
- 주제
에디터 노트
문서에 상세한 표와 의사 코드가 있어도 CPU에서 실행된다는 보장은 없습니다. 작성자는 Haswell에서 #UD를 확인했고, 2024년판에는 있던 항목이 2026년판에서 사라진 점도 제시합니다. 이 근거는 실제 구현 여부와 문서 오류를 구분해야 한다는 의문을 뒷받침하지만, Intel이 기능을 취소했다는 설명은 작성자도 확인하지 못한 가설입니다. 댓글은 x86 명령어 이름과 구현의 복잡성에 반응하지만 vfmaddrnd231pd의 정체를 확인해 주지는 않습니다. 따라서 현재 자료로는 문서에만 남은 명령어라는 점까지가 확인된 사실이며, 왜 문서에 들어갔는지는 미해결로 남습니다.
AI 요약
vfmaddrnd231pd는 FMA 명령어 집합의 다른 명령어와 달리 이름에 rnd가 들어갑니다. Intel Software Development Manual(SDM)은 이 명령어가 packed double-precision 값에 fused multiply-add를 수행하면서 반올림 방식을 제어한다고 설명합니다. 즉시값(immediate byte)으로 반올림 방식과 DAZ, FTZ, 예외 억제를 설정한다는 내용도 있습니다. 전역 반올림 모드를 바꾸는 대신 명령어마다 설정하므로, FMA로 덧셈과 뺄셈, 곱셈을 구현하면 AVX-512 없이도 산술 연산의 반올림을 제어할 수 있다는 설명입니다.
하지만 GNU assembler는 명령어를 인식하지 않고, SDM에 언급된 Intel C/C++ Compiler intrinsics도 Clang과 ICC에서 찾을 수 없습니다. 작성자가 SDM의 opcode를 따라 기계어를 직접 구성해 FMA를 지원하는 Haswell에서 실행하자 #UD, 즉 정의되지 않은 명령어 예외가 발생했습니다. opcode 표기 중 DDS도 의문점으로 남습니다. 한 Stack Overflow 답변은 문서 작성용 표기였다고 설명하지만, SDM에 여전히 남아 있다는 점이 수상하다고 작성자는 말합니다.
문서와 CPU의 불일치
SDM은 vfmaddrnd231pd만 기재하고, 다른 자료형이나 FMA 명령어의 132, 213, 231 변형은 열거하지 않습니다. 이 명령어는 고유한 표와 의사 코드까지 갖춰 단순한 오타처럼 보이지 않지만, Haswell에서는 실행되지 않았습니다. 2024년판 SDM에는 있었던 항목이 2026년판에서는 사라졌습니다. 작성자는 Intel이 vfmaddrnd 계열을 추가하려다 마지막 단계에서 문제를 발견해 CPU 구현을 취소했지만 문서를 제대로 수정하지 못했을 가능성을 가설로 제시합니다. 확인할 방법은 없다고 덧붙입니다.
Lobsters 반응
- @xnacly — 부동소수점 지원을 JIT 컴파일러에 구현하다가 ucomisd도 새로 알게 됐습니다. Unordered Compare Scalar Double Precision Floating-Point Values and Set EFLAGS라는 뜻입니다. x86은 너무 복잡해서 double 상수를 불러오는 것만 구현하는 데도 정말 고생했습니다.
- @david_chisnall — x86의 좋은 점은 매뉴얼이 기대치를 조정해 준다는 겁니다. 목록의 첫 명령어는 AAA입니다. 첫째, BCD를 상상할 수 있는 가장 복잡한 방식으로 다루는 명령어를 발견합니다. 둘째, 그 니모닉은 x86 어셈블리 프로그래머가 내는 소리입니다. 그래도 저는 PowerPC의 EIEIO라는 어셈블리 니모닉을 좋아합니다.
- @marginalia — 난독증이 있는 사람으로서 Intel의 최신 명령어 이름 중 일부는 노골적으로 악의적인 것처럼 느껴집니다.
- @intelfx — 와, 놀랍네요. LOADALL286/LOADALL386 시절 이후로 유령 명령어는 끝난 줄 알았는데요? :-)
- @proctrap — FJCVTZS의 좋은 친구네요.
원문: Purplesyringa / 번역·요약: Trawling