avx2相关内容

AVX2中的VPERMB在哪里?

AVX2有很多好东西.例如,它具有大量的指令,它们的功能远比其前身强大得多.以 VPERMD :它可以让您完全随意地广播/随机播放/替换将256位长的32位值向量转换为另一个向量,并可以在运行时选择 1 进行排列.从功能上讲,这会淘汰大量现有的旧版解压缩,广播,置换,随机播放和移位指令 3 . 酷豆. 那么VPERMB在哪里?即,相同的指令,但适用于字节大小的元素.或者,对于16位元素 ..
发布时间:2020-09-12 22:20:40 其他开发

与AVX/AVX2一起使用的OS X的最低版本是什么?

我有一个图像绘制例程,该例程针对SSE,SSE2,SSE3,SSE4.1,SSE4.2,AVX和AVX2进行了多次编译. 我的程序通过检查CPUID标志来动态调度这些二进制变体之一. 在Windows上,我检查Windows的版本,如果操作系统不支持AVX/AVX2,则禁用它. (例如,仅Windows 7 SP1或更高版本支持AVX/AVX2.) 我想在Mac OS X上做同样的事情 ..
发布时间:2020-08-11 20:02:16 其他开发

如何在256位AVX向量中找到水平最大值

我有一个__m256d向量,其中包含四个64位浮点值. 我需要找到向量元素的水平最大值,并将结果存储在双精度标量值中; 我所有的尝试最终都使用了向量元素的大量改组,这使得代码不是很优雅也不高效.另外,我发现不可能仅停留在AVX域中.在某些时候,我不得不使用SSE 128位指令来提取最终的64位值.但是,我想在最后一条声明中被证明是错误的. 因此理想的解决方案将是: 1)仅使用AVX ..
发布时间:2020-08-06 18:40:37 其他开发

使用AVX-512或AVX-2对大数据计数1位(填充计数)

我有很长的内存,例如256 KiB或更长时间.我想计算整个块中1位的数目,或者换句话说:将所有字节的“填充计数"值相加. 我知道AVX-512具有 VPOPCNTDQ指令计算512位向量中每个连续64位中1位的数目,而IIANM应该可以在每个周期中发布一个(如果有合适的SIMD矢量寄存器)-但是我没有任何经验编写SIMD代码(我是GPU专家).另外,我不确定100%是否支持AVX-512目标 ..
发布时间:2020-07-29 21:22:22 其他开发

AVX2:512个浮点数组的计算点积

首先,我将是SIMD内部函数的一个完整的初学者. 从本质上讲,我有一个支持AVX2内部(Intel(R) Core(TM) i5-7500T CPU @ 2.70GHz)的CPU.我想知道计算大小为512的两个std::vector的点积的最快方法. 我已经在网上进行了一些挖掘,发现此和此堆栈溢出问题建议使用下面的函数__m256 _mm256_dp_ps(__m256 ..
发布时间:2020-07-22 23:43:59 C/C++开发

SSE-AVX从双精度转换为char

我想将双精度值的向量转换为char. 我必须采取两种截然不同的方法,一种用于SSE2,另一种用于AVX2. 我从AVX2开始. __m128i sub_proc(__m256d& in) { __m256d _zero_pd = _mm256_setzero_pd(); __m256d ih_pd = _mm256_unpackhi_pd(in,_zero_pd); ..
发布时间:2020-07-09 21:17:18 C/C++开发

在64位x 64位乘法中使用Karatsuba算法真的有效吗?

我在AVX2上工作,需要计算64位x64位-> 128位加宽乘法并以最快的方式获得64位的高位.由于AVX2没有这样的说明,所以我使用Karatsuba算法来提高效率和提高速度是否合理? 解决方案 否.在现代体系结构上,唐津胜过教科书乘法的交叉点通常在8到24个机器字之间(例如x86_64上的512和1536位之间).对于固定大小,阈值位于该范围的较小范围内,新的ADCX/ADOX指令可能 ..
发布时间:2020-05-24 21:06:37 C/C++开发

如何使用AVX2向量化a [i] = a [i-1] + c

我想通过AVX2指令向量化a[i] = a[i-1] +c.由于依赖关系,它似乎无法向量化.我已经向量化了,想在这里分享答案,看看这个问题是否有更好的答案,或者我的解决方案是好的. 解决方案 我已经实现了以下功能,可以将其向量化,看来还可以!加速比gcc -O3高2.5倍 解决方法如下: // vectorized inline void vec(int a[LEN], int b, ..
发布时间:2020-05-21 21:25:40 其他开发

在AVX2指令中没有快速聚集和分散的情况下该怎么办?

我正在编写一个程序来检测素数.一方面是对可能的候选人进行筛选.我写了一个相当快的程序,但我想我想看看是否有人有更好的主意.我的程序可以使用一些快速的收集和分散指令,但是我仅限于用于x86架构的AVX2硬件(我不确定AVX-512拥有这些,尽管我不确定它们的速度如何). #include #include #define USE_AVX2 ..
发布时间:2020-05-21 20:54:49 其他开发

如何将__m256i向量除以整数变量?

我想将AVX2向量除以一个常数.我访问了此问题以及许多其他页面.看到可能对定点算术有帮助的东西,我听不懂.所以问题是这种分裂是瓶颈.我尝试了两种方法: 首先,将其强制转换为浮点,然后使用AVX指令进行操作: //outside the bottleneck: __m256i veci16; // containing some integer numbers (16x16-bit nu ..
发布时间:2020-05-21 20:37:36 其他开发

使用SIMD(AVX2)的稀疏阵列压缩

我有一个稀疏数组a(大多数为零): unsigned char a[1000000]; ,我想使用带有AVX2的Intel x64体系结构上的SIMD指令创建指向a的非零元素的索引的数组b.我正在寻找技巧,以有效地做到这一点.具体来说,是否存在SIMD指令来获取SIMD寄存器中连续排列的连续非零元素的位置? 解决方案 五个计算非零索引的方法是: 半向量化循环:使用字符加载 ..
发布时间:2020-05-21 20:32:47 C/C++开发

_mm256_store_ps()函数是否是原子函数?与openmp一起使用时

我正在尝试创建一个使用英特尔AVX技术并执行矢量乘法和加法的简单程序.在这里,我与此同时使用Open MP.但是由于函数调用_mm256_store_ps()而导致分段错误. 我已经尝试过OpenMP原子功能,例如原子的,关键的等,因此,如果此函数本质上是原子的,并且多个内核试图同时执行,但无法正常工作. #include #include #incl ..
发布时间:2020-05-21 01:25:20 其他开发

如何通过利用Intel OpenCL SVML使用_mm256_log_ps?

我发现_mm256_log_ps不能与GCC7一起使用.关于stackoverflow的最常见建议是使用ICC或利用OpenCL SDK. 下载SDK并提取RPM文件后,共有三个.so文件:__ocl_svml_l9.so,__ocl_svml_e9.so,__ocl_svml_h8.so 有人可以教我如何使用这些.so文件调用_mm256_log_ps吗? 谢谢. 解决方 ..
发布时间:2020-05-20 19:01:42 其他开发

如何完美地同时使用openmp和AVX2?

我使用OpenMP和AVX2编写了Matrix-Vector产品程序. 但是,由于OpenMP,我得到了错误的答案. 真正的答案是数组c的所有值都将变为100. 我的答案是98、99和100的组合. 实际代码如下. 我用-fopenmp,-mavx,-mfma编译了Clang. #include "stdio.h" #include "math.h" #include ..
发布时间:2020-05-14 01:09:51 其他开发

从基于源的索引转换为基于目标的索引

我在一些C代码中使用AVX2指令. VPERMD 指令采用两个8位整数向量a和idx并通过基于idx置换a来生成第三个dst.这似乎等效于dst[i] = a[idx[i]] for i in 0..7.我称此为基于源,因为移动是基于源进行索引的. 但是,我有基于目的地形式的计算索引.这对于设置数组是很自然的,等效于dst[idx[i]] = a[i] for i in 0..7. ..
发布时间:2020-05-06 11:45:31 其他开发

如何判断Linux机器是否支持AVX/AVX2指令?

我在SUSE Linux Enterprise 10/11计算机上.我对运行Intel处理器的计算机场进行回归分析.我的某些测试失败,因为我的工具是使用需要AVX/AVX2指令支持的库构建的.我收到一个Illegal exception错误. 在Linux中,可以使用任何命令来确定CPU代码/家族名称是什么? 我相信AVX和AVX2可以分别从Intel SandyBridge和Hasw ..
发布时间:2020-05-01 09:03:23 服务器开发

gdb反向调试avx2

所以我有一个支持avx2指令集的新型花式CPU。 这很好,但打破了gdb反向调试。当没有优化编译时,代码仍然使用共享库,例如调用memset(),然后调用memset的avx2优化版本。这很棒,但是gdb记录不支持avx2。 进程记录不支持地址0x7ffff690dd80的指令0xc5。 0xc5是vex前缀。 反向调试对于不支持avx2的cpu很有效。我如何获得libc等不使 ..
发布时间:2018-04-21 14:22:42 其他开发

与AVX / AVX2内在函数进行对齐和未对齐的内存访问

根据英特尔软件开发人员手册(第14.9节),AVX放宽了内存访问的对齐要求。如果数据直接加载到处理指令中,例如 vaddps ymm0,ymm0,YMMWORD PTR [rax] 加载地址不必对齐。但是,如果使用专用的对齐加载指令,如 vmovaps ymm0,YMMWORD PTR [rax] 加载地址必须对齐(为32的倍数),否则会引发异 ..
发布时间:2018-04-20 17:20:41 其他开发