英特尔内在函数问题

chi

大家好,我正在尝试像这样使用intel内在函数

void test()
{
    uint16_t n1 = 5;
    uint16_t n2 = 2;
    __m64 vec1, vec2, res;

    vec1 = _mm_set_pi16(n1, n1, n1, n1);
    vec2 = _mm_set_pi16(n2, n2, n2, n2);

    res = _mm_add_pi16(vec1, vec2);

    printf("%u %u %u %u \n", vec1[0], vec1[1], vec1[2], vec1[3]);
    printf("%u %u %u %u \n", vec2[0], vec2[1], vec2[2], vec2[3]);
    printf("%u %u %u %u \n", res[0], res[1], res[2], res[3]);
}   

但是我得到这个结果很奇怪:

327685 327685 131074 131074 
131074 131074 458759 458759 
458759 458759 327685 327685 

我正在使用月食火星...并且包括mmintrin.hxmmintrin.hemmintrin.h

请有人可以解释这是怎么回事

红色的

引用__m64数组是非标准的。
我不知道您的编译器如何处理它。
我在Visual Studio中使用“英特尔编译器”,但出现编译错误。uint16在打印之前,应将元素从MMX寄存器提取到ALU寄存器。
使用_mm_extract_pi16内在函数来提取值。

不要忘记_mm_empty()在退出函数之前调用内部函数。

请参见以下代码示例:

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

#include <mmintrin.h>
#include <xmmintrin.h>
#include <emmintrin.h>

static void Test()
{
    uint16_t n1=5;
    uint16_t n2=2;
    __m64 vec1,vec2,res;

    vec1 = _mm_set_pi16 (n1 ,n1 ,n1 ,n1);
    vec2 = _mm_set_pi16 (n2 ,n2 ,n2 ,n2);

    res = _mm_add_pi16 (vec1, vec2);

    //uint16_t res0 = _mm_extract_pi16(res, 0);
    //uint16_t res1 = _mm_extract_pi16(res, 1);
    //uint16_t res2 = _mm_extract_pi16(res, 2);
    //uint16_t res3 = _mm_extract_pi16(res, 3);

    printf("%u %u %u %u \n",_mm_extract_pi16(vec1, 0),_mm_extract_pi16(vec1, 1),_mm_extract_pi16(vec1, 2),_mm_extract_pi16(vec1, 3));
    printf("%u %u %u %u \n",_mm_extract_pi16(vec2, 0),_mm_extract_pi16(vec2, 1),_mm_extract_pi16(vec2, 2),_mm_extract_pi16(vec2, 3));
    printf("%u %u %u %u \n",_mm_extract_pi16(res, 0),_mm_extract_pi16(res, 1),_mm_extract_pi16(res, 2),_mm_extract_pi16(res, 3));

    _mm_empty();
}

int main()
{
    Test();

    return 0;
}

输出:

5 5 5 5
2 2 2 2
7 7 7 7

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

英特尔/ ARM内在等效性

来自分类Dev

英特尔SSE内在函数_mm_load_si128分段错误,

来自分类Dev

英特尔SSE内在函数:si64 si64x之间的区别

来自分类Dev

英特尔SSE内在函数_mm_load_si128分段错误,

来自分类Dev

英特尔内在支持Atom cloverview处理器

来自分类Dev

英特尔OpenMP安装问题

来自分类Dev

英特尔软件安装中的问题

来自分类Dev

英特尔软件安装中的问题

来自分类Dev

英特尔加载固有问题

来自分类Dev

英特尔OpenCL Beignet问题

来自分类Dev

为什么英特尔的某些内在函数采用const立即数,而另一些则为非const?

来自分类Dev

在英特尔编程?

来自分类Dev

英特尔内部函数-加载/存储的函数指针

来自分类Dev

英特尔Fortran外部库链接问题

来自分类Dev

英特尔快速存储/智能响应SSD缓存问题

来自分类Dev

英特尔高清显卡530性能问题+闪烁

来自分类Dev

英特尔WebRTC 2.1.1服务器连接问题

来自分类Dev

英特尔显卡的Chrome / ium渲染问题

来自分类Dev

我在安装英特尔 HAXM 时遇到问题

来自分类Dev

英特尔显卡的Chrome / ium渲染问题

来自分类Dev

在英特尔内部函数(AVX)中使用混合指令

来自分类Dev

英特尔Edison模块

来自分类Dev

英特尔XDK + jsPDF

来自分类Dev

英特尔SSD术语

来自分类Dev

英特尔Nextbook降级

来自分类Dev

英特尔XDK信息

来自分类Dev

是否建议针对英特尔GMA-500问题安装“ LTS硬件启用堆栈”?

来自分类Dev

使用英特尔的数学内核库进行特征分解的运行时问题

来自分类Dev

大黄蜂+英特尔高清显卡+ GeForce GT 555M + Unity / compiz问题