2017-01-23 18 views
0

학문적 이유로 AArch64에서 sqrt 함수의 성능을 사용하고 있습니다. 단일 플로트 sqrtf 기능 코드 : 더블 플로트 SQRT에 대한AArch64에서 sqrt 함수의 성능

fsqrt s0, s0 
ret 

코드 기능 : 여기에서 FSQRT에 대한 이론적 대기 시간을 말하는 겁니다

fsqrt d0, d0 
ret 

: http://infocenter.arm.com/help/topic/com.arm.doc.uan0015b/Cortex_A57_Software_Optimization_Guide_external.pdf

latencies of FSQRT

단일 sqrt는 배의 2 배인 것 같습니다.

하지만, 프로파일 링 동안 나는이 번호를 받고 있어요 : 나는 사이클 같은 수의 시간을 가져 갈께요

326 ms sqrt 
82 ms sqrtf 

. 그 숫자에서 보면 sqrtf는 4 배 더 좋습니다.

왜 적절한 이유를 찾을 수 없습니까? 실제로 인터넷에서이 지침이 실제로 어떻게되는지에 대한 적절한 설명을 찾을 수 없습니다.

일부 정보 또는 방향이 유용 할 것입니다.

+0

지침의 정렬을 변경하고 다시 측정해야하므로 필요에 따라 반복하십시오. 명령의 단일 인스턴스를 측정하려는 경우 성공할 가능성은 거의 없습니다. –

+0

@old_timer 루프에서 백만 건의 함수 호출에 대한 성능을 측정하고 있습니다. 그것은 문제가되어서는 안됩니다. –

답변

1

Cortex-A57 최적화 안내서의 FSQRT 명령에 대한 테이블 항목에 첨부 된 메모를 보면 "FP 나누기 및 제곱근 연산이 반복 알고리즘을 사용하여 수행된다"고되어 있습니다.

즉, 명령 입력에 따라 대기 시간이 달라질 수 있습니다. 그것이 표의 "7-17"및 "7-32"대기 시간 수의 의미입니다. 입력에 따라 단 정밀도 FSQRT는 7 ~ 32 사이클을 완료하는 반면 배정 밀도 변형은 7 ~ 32 사이클이 걸릴 수 있습니다.

따라서 특정 단 정밀도 계산이 7 사이클 걸리지 만 배정도 계산에 28 배속이 걸리면 4x 디스 패리티가 발생합니다.