1

2 つの配列があり、内積を取得したいと考えています。vek と vec の値を xmm0 と xmm1 に取得するにはどうすればよいですか? そして、「printf」に使用できるように、xmm1 (??) に立っている値を取得するにはどうすればよいですか?

#include <stdio.h>
main(){

float vek[4] = {4.0, 3.0, 2.0, 1.0};

float vec[4] = {1.0, 2.0, 3.0, 4.0};

asm(

"DPPS $0xFF, %xmm0, %xmm1"

??

);

printf( "Result: %f\n, ??)
}
4

1 に答える 1

2

当然のことながら、@Mysticial生のアセンブラーではなく組み込み関数を使用してください。

#include <stdio.h>
#include <smmintrin.h> // SSE 4.1

int main()
{

    __m128 vek = _mm_set_ps(4.0, 3.0, 2.0, 1.0);
    __m128 vec = _mm_set_ps(1.0, 2.0, 3.0, 4.0);

    __m128 result = _mm_dp_ps(vek, vec, 0xff);

    printf("result = { %vf }\n", result);

    return 0;
}

すべてのコンパイラが SIMD 値の書式指定子をサポートしているわけではないことに注意してください。コンパイラがサポートし%vていない場合は、結果を出力するための適切なメソッドを実装する必要があります。たとえば、共用体を使用します。

于 2011-11-18T14:15:28.443 に答える