SSE1使用divps内在xmmintrin.h划分四个32位浮点,并使用printf
SSE1 Using divps intrinsic xmmintrin.h to divide four 32-bit floats and using printf?
作为一个例子,我需要帮助划分四个数字并打印它们。我使用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;
}
我已经修复了一些问题,我认为现在可以满足您的要求:
#include <xmmintrin.h>
#include <stdio.h>
void print128_num(const char * label, __m128 var)
{
float *val = (float *) &var;
printf("%s: %f %f %f %fn",
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;
}
测试:
$ 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
$
相关文章:
- 是否可以使用 Wojciech Mula 算法将 __m256i 个 32 位字而不是 4 个 64 位字存储为弹出计数和结果?
- 对 32 位整数进行哈希处理比对 3 个 16 位整数的哈希进行按位运算慢?
- 如何在 C++ 中将 2 个数字存储在 32 位数字中
- 获取两个无符号整数 C++ 乘积的高 32 位的有效方法
- 使用 SSE 内部函数存储四个 16 位整数
- 在 C 语言中将 32 位 int 块连接在 16 个字符数组中
- 在32位整数中编码4个值
- 使用 Python 编程的 32 位整数中有多少个'1'
- 如何将 2 个 16 位向量相乘并将结果存储在 SSE 中的 32 位向量中
- 如何创建一个32位int和四个8位char类型的并集,每个类型都引用32位int的差分片
- 将 32 个 0/1 值打包到单个 32 位变量的位中的最快方法是什么?
- SSE1使用divps内在xmmintrin.h划分四个32位浮点,并使用printf
- 为什么堆栈上对齐的整数之间有 8 个字节的"0xcc"填充?C++ 32位视窗7
- OpenCV将3个通道连接到32位值
- 4个有符号字节打包成32位无符号字节
- 将64位循环拆分为整数上的几个32位循环
- 如何将unsigned long int(32位)分割成8个小块
- 为32位纹理(R11F_G11F_B10F)的每个像素存储3个带符号浮点(从-4到4)
- 来自 32 个 8 位比较的 32 位汉明字符串形成
- 在c++中是否正确地将两个无符号32位整数合并为一个无符号64位整数?