SSE一些指令集

0、变量类型

01. __m128i(以下内容来源于 此处

// data_types__m128i.cpp
#include <emmintrin.h>
int main() {
   __m128i x;
}

SSE2中的指令集指令,定义在 emmintrin.h 中。__m128i 类型变量映射到XMM[0-7]寄存器,它的地址会自动对齐到16字节的边界, 即__m128i类型的变量的起始地址总是16的整数倍。

1、函数接口

01. _mm_load_si128

__m128i _mm_load_si128 (__m128i *p);

加载128位值。返回加载在代表寄存器的变量中的值,地址p必须为16字节对齐。

02. _mm_loadu_si128

__m128i _mm_loadu_si128 (__m128i *p);

加载128位值。返回值代表寄存器的变量中的相同值,地址p不需要16字节对齐。

03. _mm_set_epi8

__m128i _mm_set_epi8 (char b15, char b14,    char b13, char b12,   char b11, char b10,   char b9, char b8,   char b7, char b6,   char b5, char b4,   char b3, char b2,   char b1, char b0);

设置16个带符号的8位整数值。

03. _mm_setr_epi8

__m128i _mm_setr_epi8 (char b0, char b1,    char b2, char b3,   char b4, char b5,   char b6, char b7,   char b8, char b9,   char b10, char b11,   char b12, char b13,   char b14, char b15);

以相反的顺序设置16个带符号的8位整数值。

04. _mm_shuffle_epi8

__m128i __mm_shuffle_epi8(
	__m128i a,
	__m128i mask
);

该指令将128位参数中的16字节参数改写。
头文件:tmmintrin.h
示例:

#include <stdio.h>
#include <tmmintrin.h>

int main ()
{
    __m128i a = _mm_setr_epi8(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

    __m128i mask =
            _mm_set_epi8(5, -1, -1, 4, -1, -1, 3, -1, -1, 2, -1, -1, 1, -1, -1, 0);

    __m128i p = _mm_shuffle_epi8(a, mask);

    int8_t  *res = (int8_t *) &p;

    printf("Result res:\t%2d\t%2d\t%2d\t%2d\n\t\t\t%2d\t%2d\t%2d\t%2d\n",
             res[0], res[1], res[2],
             res[3], res[4], res[5],
             res[6], res[7]);
    printf("\t\t\t%2d\t%2d\t%2d\t%2d\n\t\t\t%2d\t%2d\t%2d\t%2d\n",
             res[8],  res[9], res[10],
             res[11], res[12], res[13],
             res[14], res[15]);

    return 0;
}

打印结果:

Result res:	10	 0	 0	11
			 0	 0	12	 0
			 0	13	 0	 0
			14	 0	 0	15

05. _mm_or_si128

 __m128i _mm_and_si128 ( __m128i a, __m128i b);

将a中128 bits数值与b中的128bits数值对应位按位做"或(OR)"运算。

06. _mm_storeu_si128

void _mm_storeu_si128 (__m128i *p, __m128i a);

地址p不需要16字节对齐。
头文件: emmintrin.h

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中提到了MMX/SSE指令集的由来。MMX指令集使用8个64位寄存器MM0~MM7,并借用8个80位寄存器ST。而SSE架构是由MMX指令集发展而来的。引用中提到,在TensorFlow运行时,出现了一条信息,表示工作站支持SSE4.1指令集,但在编译时并没有加入对该指令集的支持。这些指令集可以加速CPU计算。引用中给出了在完成后执行CPU版本编译的命令,其中包括了SSE-SSE4指令集。 综上所述,SSE-SSE4指令集是一组指令集,它们是从MMX指令集发展而来的,并用于加速CPU计算。在TensorFlow中,可以通过编译时加入对SSE-SSE4指令集的支持来提高计算速度。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [(6.6)--MMX及SSE指令集1](https://download.csdn.net/download/weixin_35792236/86309458)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [重新编译TensorFlow1.4源代码支持SSE-AVX-FMA指令集 (Python3.5版本)](https://blog.csdn.net/keith_bb/article/details/79139482)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值