2

いくつかのコードを超最適化しようとしていますが、高速化したい場所は次のとおりです。

_m128 であるドット積演算 (_mm_dp_ps) の答えを取得し、その答えをレジスタに直接保存したいと思います。ただし、_mm_store を使用すると、128 ビット全体を配列に書き込んでから、その配列の最初のエントリをロードする必要があります。

私の _m128 変数を「ベクトル」と呼びます。

float ans = *((float *)&vector) はできますか?

これが機能する場合、それが役立つかどうかという問題が残ります. ans はレジスタにロードされますか、それとも L1 からロードする必要がありますか?

ありがとうございました!!!

4

2 に答える 2

3

結果は実際にはすでに登録されています。ベクトルではなくスカラーとして解釈するようにコンパイラに指示するだけです。_mm_cvtss_f32あなたは組み込みを探しています:

float result = _mm_cvtss_f32(vector_result);
于 2013-11-03T23:28:09.383 に答える
0

単一の値のみを使用している場合は、使用可能な場合は ps の代わりに ss 組み込み関数を使用する必要があることを指摘するだけの価値があります。この場合、_mm_store_ssを使用せずに低い値を単精度浮動小数点数に格納するのに完全に有効です_mm_cvtss_f32

于 2015-02-17T19:42:02.643 に答える