C++ SSE1使用divps内在xmmintrin.h划分四个32位浮点,并使用printf?

C++ SSE1使用divps内在xmmintrin.h划分四个32位浮点,并使用printf?,c++,g++,sse,intrinsics,C++,G++,Sse,Intrinsics,我需要帮助划分四个数字作为示例并打印它们。我使用g++作为我的编译器。下面的代码确实是使用-msse3-mmmx标志编译的,我甚至不确定我是否需要这些标志,但它可以工作。我知道我必须在除法之前使用函数调用来计算数字,但我不确定要调用哪个函数(我认为该链接只有int的设置函数)。如果有一种方法可以使用std::cout打印结果,那会更好,但是printf可以很好地实现这一点(我不确定print128_num对于这种情况是否正确,它最初是为int编写的)。这是密码 #include <emmi

我需要帮助划分四个数字作为示例并打印它们。我使用g++作为我的编译器。下面的代码确实是使用
-msse3-mmmx
标志编译的,我甚至不确定我是否需要这些标志,但它可以工作。我知道我必须在除法之前使用函数调用来计算数字,但我不确定要调用哪个函数(我认为该链接只有
int
的设置函数)。如果有一种方法可以使用
std::cout
打印结果,那会更好,但是
printf
可以很好地实现这一点(我不确定
print128_num
对于这种情况是否正确,它最初是为
int
编写的)。这是密码

#include <emmintrin.h>
#include <xmmintrin.h>
#include <stdio.h>
#include <stdint.h>

void print128_num(__m128i var)
{
    uint16_t *val = (uint16_t*) &var;
    printf("Numerical: %i %i %i %i %i %i %i %i \n",
       val[0], val[1], val[2], val[3], val[4], val[5],
       val[6], val[7]);
}
__m128 divide_4_32_bit_values(__m128 __A, __m128 __B)
{
    return _mm_div_ps (__A, __B);
}
int main(void)
{


    return 0;
}
#包括
#包括
#包括
#包括
无效打印128个字符(uuum128i变量)
{
uint16_t*val=(uint16_t*)和var;
printf(“数字:%i%i%i%i%i%i%i%i\n”,
val[0],val[1],val[2],val[3],val[4],val[5],
val[6],val[7]);
}
__m128除以4位32位值(uum128\uuuu A,uuuum128\uu B)
{
返回分区(A、B);
}
内部主(空)
{
返回0;
}

我已经解决了一些问题,我认为现在这可以满足您的要求:

#include <xmmintrin.h>
#include <stdio.h>

void print128_num(const char * label, __m128 var)
{
    float *val = (float *) &var;
    printf("%s: %f %f %f %f\n",
       label, val[0], val[1], val[2], val[3]);
}

__m128 divide_4_32_bit_values(__m128 __A, __m128 __B)
{
    return _mm_div_ps (__A, __B);
}

int main(void)
{
    __m128 v1 = _mm_set_ps(4.0f, 3.0f, 2.0f, 1.0f);
    __m128 v2 = _mm_set_ps(1.0f, 2.0f, 3.0f, 4.0f);
    __m128 v = divide_4_32_bit_values(v1, v2);

    print128_num("v1", v1);
    print128_num("v2", v2);
    print128_num("v ", v);

    return 0;
}

你是否有意将4
float
s打印为8
int16
s?不,我不是,这是我在文章末尾写的,可能是错误的。我需要修正4个浮点数的问题?等等,你是在问如何更改
printf()
打印4
float
s,而不是您所拥有的吗?是的,以及如何在调用
除以4\u 32位\u值之前使用正确的
设置
函数。此代码确实是wtf。我是否总是将
\u ps
放在
\u mm\u set
之后,以获得正确的设置函数,以便在整个过程中使用函数假设两个操作的值的数量正确放置,则
\u mm\u div\u ps
行?是的,
\u ps
后缀可在所有单精度(浮点)内部函数上找到-它代表“(p)已确认(s)单精度”。
$ gcc -Wall -msse3 m128_print.c 
$ ./a.out
v1: 1.000000 2.000000 3.000000 4.000000
v2: 4.000000 3.000000 2.000000 1.000000
v : 0.250000 0.666667 1.500000 4.000000
$