当前位置:网站首页>将SSE指令转换为ARM NEON指令
将SSE指令转换为ARM NEON指令
2022-08-02 14:09:00 【虹夭】
相关资料
● sse指令集:sse指令解释
● sse2neon仓库:可以在sse2neon.h中寻找对应的neon指令转换方法
注意事项
● 将sse指令转换为arm neon指令往往很难起到优化作用,甚至可能产生负优化,因此该部分优化仅供参考。
__mm_shuffle_ps转换
__mm_shuffle_ps的作用是将m1中取出两个元素放到m3的低位,根据的是_MM_SHUFFLE(i3,i2,i1,i0)的后两个数组,从m2中取出两个元素放到m3的高位,根据的是_MM_SHUFFLE(i3,i2,i1,i0)的前两个数字。

针对__mm_shuffle_ps的转换,sse2neon中大多使用load and store指令和type conversion操作进行组合,比如下面这个代码,对应__mm_shuffle_ps(a,b,__MM_SHUFFLE(2,2,0,0))。
FORCE_INLINE __m128 _mm_shuffle_ps_2200(__m128 a, __m128 b)
{
float32x2_t a00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(a)), 0);
float32x2_t b22 =
vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(b)), 0);
return vreinterpretq_m128_f32(vcombine_f32(a00, b22));
}
直接使用类似上面的转换一定会造成性能的不升反降,最好的方法是在neon中寻找类似的操作,这部分操作主要集中在permutation,比如vtrn,vrev,vzip,vuzp等
比如上面的例子中:如果需要同时获取__mm_shuffle_ps(a,a,__MM_SHUFFLE(2,2,0,0))和__mm_shuffle_ps(a,a,__MM_SHUFFLE(3,3,1,1))时,可以使用vtrnq_32f(a,a)来获取,结果为float32x4x2_t类型,val[0]对应2200,val[1]对应3311。
边栏推荐
猜你喜欢
随机推荐
实战美团Nuxt +Vue全家桶,服务端渲染,邮箱验证,passport鉴权服务,地图API引用,mongodb,redis等技术点
“非图灵完备”到底意味着什么
Win10上帝模式干嘛的?Win10怎么开启上帝模式?
机器学习和深度学习中的梯度下降及其类型
“自主可控”的正确姿势
LLVM系列第九章:控制流语句if-else
FP7195转模拟恒流调光芯片在机器视觉光源的应用优势
boost库智能指针
[论文阅读] ACT: An Attentive Convolutional Transformer for Efficient Text Classification
设备驱动框架简介
arm push/pop/b/bl汇编指令
GPT2计算流程详解
循环神经网络RNN 之 LSTM
LORA芯片ASR6601支持M4内核的远距离传输芯片
PyTorch①---加载数据、tensorboard的使用
How to add a one-key shutdown option to the right-click menu in Windows 11
神经网络的设计过程
【我的电赛日记(三)】STM32学习笔记与要点总结
CS4398音频解码替代芯片DP4398完全兼容DAC解码
FP7195降压恒流PWM转模拟调光零压差大功率驱动方案原理图









