Intel 8087의 탄젠트 알고리듬 역공학: CORDIC만으로는 설명되지 않는 구현

6 hours ago 3

Intel 8087의 FPTAN 은 CORDIC과 유리 다항식 근사를 결합해 정확도와 속도를 확보함. 회로와 마이크로코드 분석으로 두 방식의 결합 과정과 하드웨어 최적화를 확인함 CORDIC 16단계로 입력 각도를 줄인 뒤, 작은 잔여 각도에 Padé 근사 3x/(3-x²) 를 적용함. CORDIC만으로 64비트 정확도를 얻기 위해 64단계를 수행하는 비용을 피함 명령은 탄젠트 자체가 아니라 분자 Y와 분모 X를 별도로 반환함. 당시 느렸던 나눗셈을 생략해 일부 계산에서 최적화할 여지를 남김 내부 계산은 부동소수점 대신 64비트 정수 연산과 암묵적 지수를 활용함. 단계별 시프트로 유효 비트를 유지하고, 작은 회전부터 적용해 반올림 오차를 줄임 탄젠트 계산 시간은 8086의 소프트웨어 구현에서 13,000마이크로초, 8087에서 90마이크로초였음. 이후 Pentium은 빨라진 곱셈 회로를 바탕으로 CORDIC 대신 다항식 근사로 전환함 회로와 마이크로코드로 확인한 8087의 구조 1980년 출시된 Intel 8087은 IBM PC 등의 부동소수점 연산을 크게 가속함 Intel의 성능 비교 문서에서 명령별 속도 향상은 다르지만 일반적으로 거의 100배에 달함 CAD와 스프레드시트 같은 수치 계산 응용에서 특히 유용했음 칩 뚜껑을 끌로 열고 현미경으로 고해상도 이미지를 촬영해 회로와 마이크로코드 ROM을 분석함 다이 중앙의 ROM은 칩을 제어하는 마이크로명령 1,648개를 저장함 ROM은 트랜지스터 크기 네 종류로 트랜지스터당 2비트를 저장해 일반 ROM의 두 배 밀도를 얻음 ROM 셀 분류와 마이크로코드 추출에는 머신러닝 알고리듬을 사용했으며, 관련 자료는 8087 저장소에 있음 데이터패스에는 지수 ROM, 상수 ROM, 시프터, 가산기, 스택 및 임시 레지스터가 있음 지수 ROM은 알고리듬에 필요한 고정 지수를, 상수 ROM은 CORDIC 각도 등을 저장함 가산기는 덧셈과 뺄셈뿐 아니라 반복 연산을 통한 곱셈, 나눗셈, 제곱근 계산에도 쓰임 B 레지스터가 가산기 입력 하나를 제공하고, 다른 입력은 여러 경로에서 들어오며, 결과는 합 레지스터에 저장됨 별도의 16비트 시프트 레지스터가 CORDIC의 회전 선택 정보를 저장함 CORDIC의 원리와 두 가지 회전 방식 CORDIC은 곱셈과 나눗셈 없이 시프트, 덧셈, 테이블 조회로 초월함수를 계산하는 알고리듬임 1956년 Jack Volder가 마하 2 비행이 가능한 ...

Read Entire Article