スカラー ユニットの浮動小数点ハードウェアでは、平方根、逆平方根、逆関数、絶対値、最小値、および最大値がサポートされます。エミュレーションによるほかの浮動小数点演算もサポートされます。エミュレーションを使用するテストベンチとカーネル コード用に softfloat
ライブラリがリンクされている必要があります。数学ライブラリ関数の場合は、単精度浮動小数点バージョンを使用する必要があります。たとえば、exp()
の代わりに expf()
を使用します。
AI エンジン ベクター ユニットには 8 レーンの単精度浮動小数点積和演算があります。このユニットは、固定小数点データパスと同じベクトル レジスタ ファイルおよび並べ替えネットワークを使用します。通常、固定小数点または浮動小数点では、サイクルごとに実行できるベクターは 1 つのみです。
浮動小数点 MAC のレイテンシは 2 サイクルなので、2 つのアキュムレータをピンポン方式で使用すると、コンパイラが各クロック サイクルで MAC をスケジュールできるため、パフォーマンスが向上します。
acc0 = fpmac( acc0, abuff, 1, 0x0, bbuff, 0, 0x76543210 );
acc1 = fpmac( acc1, abuff, 9, 0x0, bbuff, 0, 0x76543210 );
現時点では、除算スカラーやベクター組み込み関数はありませんが、ベクター除算は、次の例に示すように反転および乗算することでインプリメントできます。
invpi = upd_elem(invpi, 0, inv(pi));
acc = fpmul(concat(acc, undef_v8float()), 0, 0x76543210, invpi, 0, 0);
sqrt
、invsqrt
、および sincos
ベクターも同様にインプリメントできます。