2つの関連する質問があります。SSE:__m128と__m128iを2つの__m128dに変換します。
これは私のコードがかなり大量のデータで行う必要があるものです。それは内部のループの内部で行われ、パフォーマンスは重要です。
- __int32をダブルに変換(または__m128iを2つの__m128dに変換)します。
- floatをdouble型に変換(または__m128を2つの__m128dに変換)します。
基本的に、私は次のシグネチャを持つ関数が必要になります。
void convert_int_to_double(__int32 const * input, double * output);
void convert_float_to_double(float const * input, double * output);
入出力ポインタが整列し、要素数が4の倍数であるされている主な問題は、迅速に__m128を解凍する方法です2つの__m128d。
なぜ、正確に?つまり、intとfloatの二重バージョンを事前に計算することにはどんな利点があるのか分かりません。最終的には、移動するデータが増えているため、FPUの浮動小数点数は浮動小数点数または整数倍よりも遅くなります。 – Skizz
なぜ内部ループの内部でコンバージョンを行っていますか?すべてのデータを線形時間の前に 'double 'に変換し、ネストされたループ内で' double'だけを使用し(変換は必要ありません)、再び線形時間で結果の型に変換します。 –