2013-02-16 3 views
2

인텔 아키텍쳐 참조 설명서 http://www.cs.princeton.edu/courses/archive/spr12/cos217/reading/ia32opt.pdf을 통해 부담없이 읽었으며 명령 대기 시간과 처리량 부록을 통해 읽었을 때 대기 시간 (클럭 사이클 수는 실행 코어에 대해 이 명령을 구성하는 모든 μops의 실행을 완료하는 데 필요합니다. sqrt 명령의 경우 divide (C-28 페이지의 경우) 명령의 대기 시간과 동일합니다. - 적어도 일부 마이크로 아키텍처의 경우 . 이 수치는 단일, 이중 및 확장 정밀도 각각 30, 40 및 44 클럭 사이클이었습니다.sqrt 및 div 명령어가 동일한 속도로 실행됩니다.

제 질문은 sqrt 명령어가 div 명령어와 마찬가지로 대규모의 프로세서 싱크 일 수 있습니까? 나는 sqrt 지침이 모든 언어로 비용이 많이 든다는 인상을 받았다.

+0

그들은 아마 어딘가에 룩업 테이블을 사용합니다. 아마도 프로세서에 하드 코딩 된 64 비트의 주소가 관리 가능한 룩업 테이블을 만들 것이라고는 생각하지 않지만 어쩌면 – James

+0

을 사용할 것입니다. –

답변

4

이론적으로 나눗셈은 제곱근을 포함하여 많은 함수와 같은 순서로 점근 적으로 점차적으로 나타나며 http://en.wikipedia.org/wiki/Newton%27s_method을 통해 계산할 수 있습니다. 매번 정확한 숫자의 수가 두 배이기 때문에 Newton의 방법의 반복 횟수는 적습니다. 초기 정밀도는 완전 정밀도로 수행 할 필요가 없기 때문에 저렴합니다. 반복의 정확도 만 필요합니다. 결과적으로 모든 것이 전체 정밀도 단일 분할만큼 비쌉니다. http://en.wikipedia.org/wiki/Computational_complexity_of_mathematical_operations

을 참조하십시오.

칩에서는 두 가지 모두에 대해 고도로 튜닝 된 특수 목적의 방법을 사용하는 것이 일반적이지만, 비용에 가장 큰 기여를하는 것이 칩의 다중 파이프 라인을 통과하여 전체를 얻는 것이면 동일한 비용이 될 수 있습니다 -predision 결과는 빠른 table-lookup이나 다른 approximate solution 후에 나온다.

3

그것은 잘 알려져 있지 않지만 시프트 연산으로 나누는 것만 큼 빠르게 제곱근을 계산하는 알고리즘이 있습니다. 이것들은 뉴턴 근사치가 아닙니다.

(Sqrt in) Binary numeral system (base 2)을 참조하십시오. Knuth의 Seminumerical Algorithms 책에서 이것을 처음 보았고 1970 년대 초반에 16 비트 미니 컴퓨터의 sqrts를 나누기와 같은 속도로 코딩하는 데 사용했습니다. 루프의 핵심은 2 비트 밖으로 이동하고, 제곱근 비트를 계산하고 반복합니다. 그래서, 총 교대 == 비트의 수, 고전적인 나누기에 대해 동일합니다.

칩에서 shift-and-compare 메서드로 나누면 꽤 쉽게 제곱근을 구현할 수 있습니다.

관련 문제