2017-01-23 23 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

命令のアラインメントを変更して再度測定し、必要に応じて繰り返します。命令の1つのインスタンスを測定しようとしている場合、成功する可能性は低いです。 –

+0

@old_timerループで100万回の関数呼び出しのパフォーマンスを測定しています。それは問題ではありません。 –

答えて

1

Cortex-A57最適化ガイドのFSQRT命令のテーブルエントリに添付されている注釈を参照すると、「FP分周および平方根演算は反復アルゴリズムを使用して実行される」と記載されています。

これは、命令への入力に応じて、レイテンシが変化することを意味します。これは、表の「7-17」および「7-32」レイテンシ数の意味です。入力に応じて、単精度FSQRTは7〜32サイクルで終了しますが、倍精度バリアントでは7〜32サイクルが必要です。

したがって、特定の単精度計算では7サイクルかかるが、倍精度計算ではたとえば28サイクルで4倍のディスパリティが必要になります。

関連する問題