Intrinsics函数踩坑,感觉用Intrinsics函数,最重要的是不能想当然,只有想不到。。还是得参考官方文档来

一系列乘法MUL——_mm256_mul_epi32


这个乘法会把32位的两个整数扩展为64位再相乘,最后结果竟然存成64位!!如果要存为32位的数,应该用下面的函数_mm256_mullo_epi32

一系列set——_mm256_set_epi32

set函数的都是这样,参数顺序是反的。而且似乎性能巨差

看汇编可以发现,set是调用了多轮insertf指令,一点点构建向量。

整数load——_mm512_load_epi32

第一次做把int数组加载到zmm寄存器中的时候,想当然的用了_mm512_load_epi32这个函数,结果编译的时候报错,找不到对应的函数,才发现load一个int类型的数组要用这个函数_mm512_loadu_si512

一看到这个函数,我就发现自己格局小了,,反正是load连续512位的内存,何必区分位数呢。
进一步想,为什么浮点数类型就要区分精度了呢?推测是__mm512i和__mm512两个结构的区别。

loadu和load

区别很明显,load要求内存对齐,而loadu不要求,似乎是在汇编层面上做了什么操作?
内存地址对齐的方法:
1.利用struct,挺多博客讲的,不过似乎不同编译器对齐原则稍有差别(需要考证),附一篇写的很好的博客
2.#pragma pack预编译指令
3._mm_free与_mm_malloc
4.手动对齐,下面的代码通过先开辟空间再手动对齐的方式,完成了对pvbQueryProf、pvsQueryProf、pvH1、pvH2、pvE空间的分配

pSwData->pData = (unsigned char *) calloc (nCount, sizeof (__m256i));if (!pSwData->pData) {fprintf (stderr, "Unable to allocate memory for SW data buffers\n");exit (-1);}/* since we might port this to another platform, lets align the data *//* to 16 byte boundries ourselves */aligned = ((size_t) pSwData->pData + 15) & ~(0x0f);//对齐pSwData->pvbQueryProf = (__m256i *) aligned;pSwData->pvsQueryProf = pSwData->pvbQueryProf + lenQryByte * ALPHA_SIZE;pSwData->pvH1 = pSwData->pvsQueryProf + lenQryShort * ALPHA_SIZE;pSwData->pvH2 = pSwData->pvH1 + lenQryShort;pSwData->pvE  = pSwData->pvH2 + lenQryShort;

shift

_mm128_slli_si128函数是将128位的xmm寄存器整体左移n个byte,而_mm256_slli_si256是将两个256位的ymm寄存器按128位为一个整体左移。

可以通过如下的形式实现了256位寄存器的整体左移与右移操作,其中A为源寄存器,N为移动的字节数:
左移:
_mm256_alignr_epi8(A, _mm256_permute2x128_si256(A, A, _MM_SHUFFLE(0, 0, 2, 0)), 16 - N)
右移:
_mm256_alignr_epi8(_mm256_permute2x128_si256(A, A, _MM_SHUFFLE(2, 0, 0, 1)), A, N)

不规则内存读写——gather和scatter

非常牛的两种CPU特性,gather和scatter,一个读一个写,具体看图

类型转换

最有用的是cvt系列的指令,比如_mm256_cvtepi16_epi32

还有extractf,可以用来提取向量中的一部分

一个了解向量化指令的方法

从一位学长那学来的,可以写一个方便自动向量化的简单循环,看一下这个循环的汇编即可

Intrinsics函数Tips与踩坑相关推荐

  1. 【pthread_cancel函数:避免踩坑】

    文章目录 pthread_cancel()函数是什么? 1.pthread_cancel() 函数生效,代码演示: 2.pthread_cancel() 函数不生效,代码演示 总结 pthread_c ...

  2. mysql 使用sum limit_mysql踩坑记录之limit和sum函数混合使用问题

    问题复盘 本次复盘会用一个很简单的订单表作为示例. 数据准备 订单表建表语句如下(这里偷懒了,使用了自增ID,实际开发中不建议使用自增ID作为订单ID) CREATE TABLE `order` ( ...

  3. Spark踩坑填坑-聚合函数-序列化异常

    Spark踩坑填坑-聚合函数-序列化异常 一.Spark聚合函数特殊场景 二.spark sql group by 三.Spark Caused by: java.io.NotSerializable ...

  4. Vue踩坑之旅(一)—— 数组、对象的监听

    作为一个接触 vue 才一个多月的小白,马上就接手基于 vue 的大型商城项目,其间真是跌跌撞撞踩了好多坑(o(╥﹏╥)o).在此写下自己的踩坑之旅,希望给跟我一样还在自学 vue 的同学一些帮助,另 ...

  5. mybatis学习与踩坑记录

    mybatis resultmap高级映射 应用场景:如果sql查询的列名和pojo的属性名不一致,可以使用resultMap将列名和pojo的属性名作一个对应关系,就可以映射成功了.(如果返回值为i ...

  6. iOS 入门开发踩坑实录

    其实人生也没有什么道理可讲,但是我们不必丧气,还是要期待,人生有奇遇. 前言 苹果开发者:iOS Developer 最近因为工作需要要开始搞iOS了,简单记录下我收集和学习的过程. 学习资料准备 组 ...

  7. 踩坑之 java微信wifi 配网airkiss

    最近在负责微信WiFi连接硬件设备的需求 只想说 坑 坑 坑 配网过程中一直重复报两个错 1.config:fail,Error: 系统错误,错误码:40048,invalid url domain ...

  8. wangEditor的基本使用及踩坑记录

    前言 最近写项目用到了富文本编辑器,在同事的建议下,采用了wangEditor3,在此记录下使用wangEditor3的基本步骤以及遇到的一些问题 基本使用 基本使用步骤原作者已讲的非常详细,如有需要 ...

  9. 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)

    目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...

最新文章

  1. 【linux】ARM开发板上设置RTC时间,断电重启后,设置失效的原因分析
  2. API接口自动化之2 处理http请求的返回体,对返回体做校验
  3. JSP页面元素的解析顺序
  4. 如何设计网站权限系统(转载)
  5. 怎样才能快速批量绑定MAC与IP地址
  6. 大数据谋定农业发展路径-丰收节贸易会:全球十大经典案例
  7. 大咖分享会 | 百度首次揭秘如何构建用户画像与移动统计
  8. linux安装minikube(Ubuntu/deepin)
  9. Uva572(DFS+联通集)
  10. 批量ping脚本shell_30个Linux Shell脚本经典案例(上)
  11. C语言 · 前10名
  12. 信息学奥赛一本通C++语言——1127:图像旋转
  13. mysql -数据库
  14. HCDA day1
  15. php与jpython-在python中复数怎么表示
  16. 自我复盘-20210820
  17. 360浏览器怎么导入html,360浏览器收藏夹导入/导出方法详解
  18. 【编程语言】Python 从菜鸟到高手
  19. [POI2005]DWU-Double-row(图论?)
  20. Linux系统下rar软件的安装以及如何解压文件

热门文章

  1. 粉丝福利!Matlab自动配色神器ColorForFans
  2. SQL*Loader-704: 内部错误: ulconnect: OCIServerAttach [0] SQL*Loader-704: Internal error ulconnect: OCI
  3. mac的系统语言怎么设置为中文
  4. windows编译 zlib
  5. HCIP-DATACOM H12-831(41-60)
  6. 以一元及二元函数为例,通过多项式的函数图像观察其拟合性能;以及对用多项式作目标函数进行机器学习时的一些理解。
  7. www.us258.com 这家主机商相当无耻,用着不到一个月给我停了,连用户名都删了。...
  8. 前端学习——17——获取窗口属性,dom尺寸,让滚动条滚动
  9. 推荐一些助你看透世界本质的书
  10. 怎么正确理解股票量化的概念?