avx相关内容

将__m256i设置为两个__m128i值的值

因此,AVX具有 immintrin.h 中的功能,该功能应允许将两个 __ m128i 值的串联存储到单个 __ m256i 中价值.功能是 __ m256i _mm256_set_m128i(__ m128i嗨,__ m128i lo) 但是,当我使用它时,就像这样: __ m256i as [2];__m128i s [4];as [0] = _mm256_setr_m128i( ..
发布时间:2021-04-12 20:53:29 其他开发

使用AVX内部函数在__m512i中求和8位整数

AVX512为我们提供了用于对 __ mm512 向量中的所有单元格求和的内在函数.但是,它们中的一些对应项丢失了:还没有 _mm512_reduce_add_epi8 . _mm512_reduce_add_ps//16个浮点数的水平和_mm512_reduce_add_pd//8个双打的水平和_mm512_reduce_add_epi32//16个32位整数的水平和_mm512_reduc ..
发布时间:2021-04-12 20:53:24 其他开发

在16位字中仅保留10个有用位

我有_m256i个向量,这些向量在16位整数内包含10位字(因此16 * 16位仅包含16 * 10个有用位).最好/最快的方法是仅提取那些10位并打包以产生10位值的输出位流? 解决方案 这是我的尝试. 尚未进行基准测试,但我认为它总体上应该可以很快运行:指令太多,在现代处理器上所有指令都有1个延迟周期.存储也很有效,有2条存储指令可存储20个字节的数据. 该代码仅使用3个常 ..
发布时间:2021-04-12 20:53:16 其他开发

使用SSE / AVX固有特性时体系结构的影响

我想知道编译器如何处理内部函数。 如果一个人使用SSE2内部函数(使用 #include )并使用 -mavx 标志进行编译。编译器将生成什么?它会生成AVX或SSE代码吗? 如果使用的是AVX2内部函数(使用 #include ),并使用 -msse2 标志进行编译。编译器将生成什么?它会生成SSE Only还是AVX代码? ..
发布时间:2020-10-06 20:57:54 其他开发

如何从__m64值的lsb创建8位掩码?

我有一个用例,其中我有一个位数组,例如,每个位都表示为8位整数.uint8_t data[] = {0,1,0,1,0,1,0,1};我想通过仅提取每个值的lsb来创建一个整数.我知道使用int _mm_movemask_pi8 (__m64 a)函数可以创建掩码,但是此内在函数仅占用字节的msb而不是lsb.是否有类似的内在方法或有效方法来提取lsb以创建单个8位整数? 解决方案 没有直 ..
发布时间:2020-09-15 05:50:55 C/C++开发

用另一个替换一个字节

对于这个看似简单的问题,我很难创建代码. 给出一个压缩的8位整数,用一个字节替换另一个字节(如果存在). 例如,我想将0x06替换为0x01,因此我可以使用res作为输入来查找0x06: // Bytes to be manipulated res = _mm_set_epi8(0x00, 0x03, 0x02, 0x06, 0x0F, 0x02, 0x02, 0x06, 0x0 ..
发布时间:2020-09-15 05:49:52 其他开发

使用SIMD指令时,为什么此简单的C ++ SIMD基准测试运行速度较慢?

我正在考虑编写SIMD向量数学库,因此,作为一个快速的基准测试,我编写了一个程序,该程序进行1亿个(按4个浮点数)矢量逐元素乘法,并将它们相加在一起.对于我的经典非SIMD变体,我只是制作了一个具有4个浮点数的结构,并编写了自己的乘法函数"multiplyTwo",该函数将两个这样的结构元素明智地相乘,然后返回另一个结构.对于我的SIMD版本,我使用了"immintrin.h"以及__m128,_ ..
发布时间:2020-09-15 05:49:49 C/C++开发

调度SIMD指令+ SIMDPP + qmake

我正在开发一个使用SIMD指令集的QT小部件.我已经编译了3个版本:SSE3,AVX和AVX2(simdpp允许通过单个#define在它们之间进行切换). 现在,我想要的是让窗口小部件根据最佳支持的指令集在这些实现之间自动切换. simdpp随附的指南利用了一些makefile魔术: CXXFLAGS="" test: main.o test_sse2.o test_sse3.o ..
发布时间:2020-09-15 05:49:47 C/C++开发

带有AVX2支持进行编译并运行

我有一个很大的库,我想用AVX2支持对其进行编译(但我的处理器仅支持AVX).该库还具有内部运行时检查,以检查处理器是否支持AVX2.像这样: #if __AVX2__ if (support_avx2) { // vectorized code } #endif // simple C++ code 我能够在具有AVX2支持的情况下编译该库,但是当我运行测试时,我就已经开始了: ..
发布时间:2020-09-15 05:48:45 其他开发

使用SSE2编译具有AVX架构的另一个源是否安全?

我使用的是AVX内部函数,但是由于基于_mm256的内部函数以外的所有内容,MSVC都会生成非vex指令,因此我需要使用/arch:AVX编译整个源代码.该项目的其余部分使用/arch:SSE2进行编译,因此它可以在较旧的CPU上运行,并且我正在手动检查AVX是否可用. 包含AVX代码的源(为AVX编译)包括一个庞大的模板库和其他内容,仅包含定义.编译器/链接器是否有可能决定使用AVX指令实 ..
发布时间:2020-09-15 05:48:41 其他开发

如何从ioremap()地址加载avx-512 zmm寄存器?

我的目标是创建一个有效负载超过64b的PCIe事务.为此,我需要读取一个ioremap()地址. 对于128b和256b,我可以分别使用xmm和ymm寄存器,它们可以按预期工作. 现在,我想对512b zmm寄存器(类似内存的存储?!)做同样的事情 我不允许在此处显示的经许可的代码使用256b的汇编代码: void __iomem *addr; uint8_t datare ..
发布时间:2020-09-15 05:48:35 其他开发

运行基本的Avx512代码时获取非法指令

我正在尝试学习AVX指令,并且在运行我收到的基本代码时 非法指令(核心已转储) 下面提到了代码,我正在使用 对其进行编译 g ++ -mavx512f 1.cpp 究竟是什么问题,以及如何解决? 谢谢! #include #include using namespace std; void add(const flo ..
发布时间:2020-09-15 05:48:31 C/C++开发

在AVX内部函数中使用xmm参数

是否可以将xmm寄存器参数与AVX内部函数(_mm256_**_**)一起使用? 我的代码要求使用vecter整数运算(用于加载和存储数据)以及矢量浮点运算.整数代码是使用SSE2内部函数编写的,以便与较旧的CPU兼容,而浮点数是使用AVX编写的,以提高速度(还有SSE代码分支,因此不建议这样做). 当前,除了使用编译器标志自动将所有SSE指令转换为VEX编码版本外,还有什么方法可以使 ..
发布时间:2020-09-15 05:48:27 其他开发

在64位整数内旋转(旋转90°)位矩阵(最多8x8位)

我有一个位矩阵(大小为6x6或7x7或8x8)存储在一个单个64位整数中. 我正在寻找将这些矩阵旋转90、180、270度的c ++代码,以及用于水平(垂直和垂直)移动和镜像这些矩阵的c ++代码.输出必须再次是64位整数. 使用一些高级CPU指令集以及使用哈希表或类似技术可能没问题-速度是最重要的,并且RAM可用.我将在AMD Ryzen 7 1700八核PC上运行它.我不熟悉这些指 ..
发布时间:2020-09-15 05:48:24 C/C++开发

C语言中的整数SIMD指令AVX

我正在尝试对数据类型int,float和double运行SIMD指令. 我需要乘法,加法和加载运算. 对于float和double,我成功地使这些说明起作用: _mm256_add_ps,_mm256_mul_ps和_mm256_load_ps(以* pd结尾为双). (不支持直接FMADD操作) 但是对于整数,我找不到有效的指令.在intel AVX手册上显示的所有内容在GCC ..
发布时间:2020-09-15 05:48:20 其他开发

在Visual Studio 2015中检测要与C ++宏一起使用的SIMD指令集

所以,这就是我要完成的工作.在必须使用Microsoft Visual Studio 2015或更高版本进行编译的C ++项目中,根据用户CPU中可用的最新SIMD指令集,我需要使一些代码具有不同的版本,其中包括: SSE,SSE2,SSE3,SSSE3,SSE4.1,SSE4.2,AVX,AVX2和AVX512. 由于此时我要查找的是编译时CPU调度,所以我的第一个猜测是,可以使用编译器宏 ..
发布时间:2020-09-15 05:48:14 C/C++开发

具有SIMD的向量的点积

我正在尝试使用SIMD指令来加快我的C代码中的点积计算.但是,我的函数的运行时间大致相等.如果有人能解释为什么以及如何加快计算速度,那就太好了. 具体来说,我正在尝试计算其中包含约10,000个元素的两个数组的点积.我的常规C函数如下: float my_dotProd( float const * const x, float const * const y, size_t con ..
发布时间:2020-09-15 05:48:12 其他开发

在AVX2中重现_mm256_sllv_epi16和_mm256_sllv_epi8

我很惊讶地发现_mm256_sllv_epi16/8(__m256i v1, __m256i v2)和_mm256_srlv_epi16/8(__m256i v1, __m256i v2)不在“>英特尔中《内部功能指南》 ,但我找不到任何解决方案可以仅使用AVX2来重新创建该AVX512内部功能. 此函数向左移动所有打包的int 16/8bits int v2中相应数据元素的计数值. ..
发布时间:2020-09-15 05:48:09 C/C++开发