1

私は、2 つの行列 4x4 を受け取り、組み込み関数を使用してそれらを乗算するプログラムを実行しています。私が今まで理解していること:

  • MMX/SSE 命令セットにより、コンピューティングを高速化できます。特に、4 バイトの要素ベクトルを使用します。
  • __m12816 バイトのベクトル (4 バイトの 4 つの要素) を表します。さらに、機能するためには__m128データを整列させる必要があります。

私が迷子になる場所はここにあります:

  • _mm_mul_ps(_m128, _m128)(私が読んだように)4バイトの4つのflotatの16バイトの2つのベクトルを取る関数。2 つのベクトルを「1 対 1」で乗算し、 を返します_m128。しかし、その_m128ベクトルには正確に何が含まれていますか (の結果)?
  • 関数_mm_hadd_ps(_m128, _m128)は、2 つの 16 バイトのベクトル (それぞれ 4 バイトの float) を追加します。このように「水平に追加」します。
    vectorA(a1, a2, a3,a4) + vectorB(b1, b2, b3, b4) = vectorResult(a1 + a2, a3 + a4, b1 + b2, b3 + b4)

私がやろうとしていること:

// Stores the result of multiply on row of A by one column of B
    _declspec (align(16)) __m128 aux; 

        // Horizontal add
        for(int i = 0; i < 4; i++){
            for (int j = 0; j < 4; j++){
                aux= _mm_mul_ps(vectorA[i], vectorB[j]);
                // Add results
                aux = _mm_hadd_ps(aux, aux);
                aux = _mm_hadd_ps(aux,aux);
            }
        }

機能がどのように機能するかわかりません (「心的イメージ」がありません)。

4

0 に答える 0