vfmaddrnd231pd는 누구인가?

1 hour ago 3

Intel SDM에 문서화된 vfmaddrnd231pd 는 명령어별 반올림 제어를 지원하는 FMA 명령어지만, 도구 지원과 실제 실행을 확인하는 과정에서 존재 여부에 의문이 생김 문서대로라면 전역 반올림 설정을 바꾸지 않고 연산별 반올림을 제어할 수 있어, AVX-512 없이도 반올림에 의존하는 일부 알고리듬을 크게 가속할 수 있었음 GNU assembler는 이 명령어를 인식하지 않으며, SDM에 적힌 관련 인트린식도 Clang과 Intel C/C++ Compiler 모두에 없음 SDM의 연산 코드를 바탕으로 직접 인코딩해 FMA 지원 Haswell에서 실행한 결과, #UD 예외가 발생함 이 명령어는 2024년판 SDM에는 있지만 2026년판에는 없음. Intel이 추가하려다 철회하고 문서를 제대로 수정하지 않았을 가능성은 확인되지 않은 가설임 문서에 있는 반올림 제어 FMA 명령어 vfmaddrnd231pd 는 일반적인 vfmadd231pd와 달리 이름에 rnd가 들어가며, Intel Software Development Manual(SDM)은 이를 반올림 제어가 가능한 패킹된 배정밀도 부동소수점 융합 곱셈-덧셈 명령어로 정의함 즉시값 바이트의 비트 필드로 반올림, DAZ, FTZ, 예외 억제를 제어하며, 구체적인 필드는 표 5-3을 참조하도록 되어 있음 대부분의 x86 부동소수점 명령어는 전역 반올림 모드와 설정을 사용하고, 이를 바꾸는 작업은 상당히 느림 문서대로라면 vfmaddrnd231pd는 명령어 단위로 반올림 모드를 지정할 수 있음 FMA로 덧셈, 뺄셈, 곱셈을 구현할 수 있으므로, AVX-512 없이도 이들 연산의 반올림을 제어하고 반올림에 의존하는 일부 알고리듬을 크게 가속할 수 있었음 도구와 CPU에서 확인되지 않는 명령어 GNU assembler는 명령어를 인식하지 않으며, SDM에 적힌 _mm_fmaddround_pd와 _mm256_fmaddround_pd 인트린식은 Clang과 ICC 모두에 없음 SDM의 연산 코드(opcode) 표기는 VEX.DDS.128.66.0F3A.W1 B8 /r /ib 이지만, DDS는 SDM 전체에서 이 연산 코드에만 등장함 Stack Overflow 답변에 따르면 DDS는 문서 표기용으로만 쓰였고 이후 SDM 버전에서 제거됐지만, 이 항목에는 여전히 남아 있었음 연산 코드 목록을 바탕으로 직접 인코딩한 명령어를 FMA 지원 Haswell에서 실행한 실험에서...

Read Entire Article