simd相关内容

在CUDA中使用SIMD实现位旋转运算符

我知道StackOverflow并不是要向其他人询问代码,而是让我讲话. 我正在尝试在CUDA C ++设备代码中实现一些AES功能.在尝试实现左字节旋转运算符时,我感到不安,因为它没有本机的SIMD本征.所以我开始一个幼稚的实现,但是....它很大,虽然我还没有尝试过,但是由于拆包/打包的昂贵,它不会很快...所以,有没有办法做每字节位轮换操作至少有点有效吗? 如果您不想看的话,这里 ..
发布时间:2021-04-15 20:05:02 C/C++开发

浮点运算(FLOPs)的定义是什么

我正在尝试使用SIMD(在ARM CPU上)优化代码,并想知道其算术强度(触发器/字节,AI)和FLOPS. 为了计算AI和FLOPS,我必须计算浮点运算(FLOP)的数量.但是,我找不到FLOP的任何精确定义. 当然, mul , add , sub , div 显然是FLOP,但是移动操作,随机操作如何?(例如 _mm_shuffle_ps ),设置操作(例如 _mm_set1_ps ..
发布时间:2021-04-15 19:22:35 其他开发

SIMD何时更快的一些经验法则是什么?(SSE2,AVX)

我有一些代码可以一次处理3个对称集合,每个对称集合包含3个非对称整数值.有大量的条件代码和许多常量. 这已成为性能瓶颈,我正在寻找一些经验法则,以了解64位Intel/AMD CPU上的SIMD何时能获得性能优势.代码很长,而且我以前从未使用过SSE2或AVX,所以在我花时间之前,先了解一下是否有可能赢得性能,这将是很高兴的. 如果您愿意列出经验法则或指向此方面的现有白皮书,我将不胜感 ..
发布时间:2021-04-12 20:55:27 其他开发

使用SIMD double-> float转换将2个double数组快速交织到具有2个float和1个int(循环不变)成员的结构数组中?

我有一段代码是在x86处理器上运行的C ++应用程序中的瓶颈,在这里我们从两个数组中获取双精度值,强制转换为float并存储在结构数组中.之所以成为瓶颈,是因为它被称为非常大的循环或成千上万次. 有没有一种更快的方法来进行此复制&使用SIMD Intrinsics进行投射操作?我已经看到在更快的memcpy上的答案,但没有解决演员表问题. 简单的C ++循环情况如下 int _iN ..
发布时间:2021-04-12 20:54:48 C/C++开发

使用AVX2指令向左移128位数字

我正在尝试在AVX2中向左旋转128位数字.由于没有这样做的直接方法,因此我尝试使用左移和右移来完成任务. 这是我的代码的摘要. l = 4;r = 4;targetrotate = _mm_set_epi64x(l,r);targetleftrotate = _mm_sllv_epi64(target,targetrotate); 上面的code代码片段将目标向左旋转4. 当我使 ..
发布时间:2021-04-12 20:54:45 C/C++开发

使用simd在双打数组中找到nan

这个问题非常类似于: 用于浮点相等比较的SIMD指令(使用NaN == NaN) 尽管该问题集中在128位向量上,并且要求识别+0和-0. 我感觉自己也许可以自己得到一个,但是intel内在函数指南页面似乎已经关闭了:/ 我的目标是获取一个双精度数组,并返回该数组中是否存在NaN.我希望在大多数情况下不会出现这种情况,并且希望该路线具有最佳性能. 最初,我要与自己进行 ..
发布时间:2021-04-12 20:54:39 其他开发

打包和解包以及扩展打包数据是什么

我已经遍历了 Intel Intrinsics ,并且每个函数都对整数或打包或未打包或扩展打包的float或double. 似乎应该在互联网上的某个地方回答这个问题,但我根本找不到答案. 那是什么包装物? 解决方案 好吧,我一直在寻找相同问题的答案,但是也没有成功.所以我只能猜测. 英特尔已经在其MMX技术中引入了打包和标量指令.例如,他们引入了一个功能 __ m64 ..
发布时间:2021-04-12 20:53:59 其他开发

比较AVX/AVX2中的两个向量(c)

我有两个 __ m256i 向量(每个向量都包含字符),我想找出它们是否完全相同.如果所有位都相等,我需要的是 true ,否则是 0 . 最有效的方法是什么?这是加载数组的代码: char * a1 ="abcdefhgabcdefhgabcdefhgabcdefhg";__m256i r1 = _mm256_load_si256((__ m256i *)a1);char * a2 = ..
发布时间:2021-04-12 20:53:56 其他开发

霓虹灯vuzp的sse/avx等效项

Intel的向量扩展名SSE,AVX等为每种元素大小提供了两个解压缩操作,例如SSE内在函数是 _mm_unpacklo _ * 和 _mm_unpackhi _ * .对于向量中的4个元素,它将执行以下操作: 输入:(A0 A1 A2 A3)(B0 B1 B2 B3)unpacklo/hi:(A0 B0 A1 B1)(A2 B2 A3 B3) 相当于解压缩的是ARM NEON指令集中的 v ..
发布时间:2021-04-12 20:53:53 其他开发

使用SSE/AVX/AVX2检查__m128i的所有字节是否匹配单个字节

我正在寻找有效的方法来计算以下函数: 输入: __ m128i数据,uint8_t输入; 输出:布尔值,指示 data 中的任何字节是否在 in 中. 我实际上是在使用它们为容量为8的字节实现时空有效的堆栈.我最有效的解决方案是首先计算一个 __ m128i tmp ,所有字节均作为 in .然后检查 tmp \ xor数据中的任何字节是否为零字节. 解决方案 是的,AV ..
发布时间:2021-04-12 20:53:38 其他开发

编写std :: copysign的便携式SSE/AVX版本

我目前正在使用SSE和AVX内部函数编写矢量化版本的QR分解(线性系统求解器).子步骤之一需要选择与另一个值相反/相等的值的符号.在串行版本中,我为此使用了std :: copysign.现在,我想为SSE ​​/AVX寄存器创建一个类似的功能.不幸的是,STL为此使用了内置函数,因此我不能只复制代码并将其转换为SSE ​​/AVX指令. 我还没有尝试过(所以现在没有代码可显示),但是我的简 ..
发布时间:2021-04-12 20:53:35 C/C++开发

Linux上的AVX分段错误

我正在尝试运行此代码,并且在运行该代码时显示分段错误.它编译良好.这是代码.(在Windows上可以正常工作.) #include#include#includeconst int size = 1000000;std :: vector A(size);std :: vectorfloatB(size);std ..
发布时间:2021-04-12 20:53:32 服务器开发