intrinsics相关内容

很少使用的更快的整数SSE非指定负载

尤其是与_mm_loadu_si128内在函数(自SSE2开始的movdqu指令)相比,我想了解更多关于_mm_lddqu_si128 intrinsic(自SSE3以来的lddqu指令)的信息. 我今天才发现_mm_lddqu_si128.英特尔内部指南说 当数据越过缓存行边界时,此内在函数的性能可能优于_mm_loadu_si128 和评论了 > 在某些情况下会表现更好 ..
发布时间:2020-11-30 04:44:02 其他开发

使用__m512的水平添加(AVX512)

如何有效地对512位AVX寄存器中的浮点数进行水平加法(即,将单个向量中的项相加)?对于128位和256位寄存器,可以使用_mm_hadd_ps和_mm256_hadd_ps完成,但没有_mm512_hadd_ps.英特尔内部函数指南文档_mm512_reduce_add_ps.它实际上并不对应于一条指令,但是它的存在表明存在一种最佳方法,但是它似乎没有在最新的GCC快照随附的头文件中定义,我无法 ..
发布时间:2020-11-30 04:42:52 其他开发

对于x86,如何测量低于十亿分之一秒的经过时间?

我已经搜索并使用了许多方法来测量经过时间.为此有很多问题.例如,这个问题非常好,但是当您需要一个精确的时间记录器时,我找不到一个好的方法.为此,我想在这里分享我的方法,以便在出现问题时使用并予以纠正. 更新&注意::该问题用于基准化,小于一纳秒.它与使用clock_gettime(CLOCK_MONOTONIC,&start);完全不同,它记录的时间超过一纳秒. 更新::衡量加速的一种 ..
发布时间:2020-11-30 04:41:50 其他开发

__popcnt()和_mm_popcnt_u32()有什么区别?

MS Visual C ++在具有SSE4.2的CPU上支持两种popcnt指令: __popcnt() _mm_popcnt_u32() 我发现的唯一区别是__popcnt()的文档被标记为"Microsoft特定",而_mm_popcnt_u32() 这是唯一的区别吗,MS __popcnt()仅调用硬件_mm_popcnt_u32()? 解决方案 由于英特尔和AMD,这 ..
发布时间:2020-11-30 04:41:44 其他开发

延迟与intel内在函数的吞吐量

一般来说,我认为我对延迟和吞吐量之间的差异有很好的了解.但是,对于英特尔内部而言,延迟对指令吞吐量的影响尚不清楚,特别是当顺序(或几乎连续)使用多个内部调用时. 例如,让我们考虑: _mm_cmpestrc 这在Haswell处理器上的延迟为11,吞吐量为7.如果我在一个循环中运行此指令,那么11个周期后,我是否可以获得连续的每个周期输出?因为这一次需要运行11条指令,并且由于我的 ..
发布时间:2020-11-30 04:40:42 其他开发

将__m256i存储为整数

如何将__m256i数据类型存储为整数? 我知道对于花车来说: _mm256_store_ps(float *a, __m256 b) 第一个参数是输出数组. 对于仅发现的整数: _mm256_store_si256(__m256i *a, __m256i b) 其中两个参数均为__m256i数据类型. 做这样的事情够了吗 int * X = (int* ..
发布时间:2020-11-30 04:40:39 其他开发

clflush通过C函数使缓存行无效

我正在尝试使用clflush手动逐出高速缓存行,以确定高速缓存和行大小.我没有找到有关如何使用该指令的任何指南.我所看到的是一些为此目的使用更高级别功能的代码. 有一个内核函数void clflush_cache_range(void *vaddr, unsigned int size),但是我仍然不知道代码中包括什么以及如何使用它.我不知道该功能中的size是什么. 不仅如此,我如何 ..
发布时间:2020-11-30 04:40:35 其他开发

英特尔固有技术指南-延迟和吞吐量

有人可以解释英特尔内在指南中给出的延迟和吞吐量值? 我是否正确理解延迟是指一条指令运行所需的时间量,吞吐量是每个时间单位可以启动的指令数? 如果我的定义正确,为什么在较新的CPU版本(例如mulps)上某些指令的等待时间更长? 解决方案 该表遗漏了:Broadwell上的MULPS延迟:3. Skylake上:4. 在这种情况下,内在查找器的延迟是准确的,尽管我在这个链接 ..
发布时间:2020-11-29 20:04:10 其他开发

SSE半载(_mm_loadh_pi/_mm_loadl_pi)发出警告

我从英特尔网站借来了矩阵求逆算法: http://download.intel.com/design/PentiumIII/sml/24504301.pdf 它使用_mm_loadh_pi和_mm_loadl_pi加载4x4矩阵系数并同时进行部分混洗.我的应用程序的性能改善非常显着,如果我使用_mm_load_ps对矩阵进行经典的加载/随机播放,则速度会稍慢一些. 但是这种加载方法会发 ..
发布时间:2020-11-28 01:22:39 C/C++开发

x86 SIMD内部函数的头文件

哪个头文件提供了不同的x86 SIMD指令集扩展(MMX,SSE,AVX等)的内在函数?在网上找不到这样的列表似乎是不可能的.如果我错了,请纠正我. 解决方案 这几天,您通常应该只包含.它包含了一切. GCC和clang会阻止您将内部函数用于您在编译时尚未启用的指令(例如,使用-march=native或-mavx2 -mbmi2 -mpopcnt -mfm ..
发布时间:2020-11-22 19:50:28 其他开发

错误:未在此范围内声明"_mm512_loadu_epi64"

我正在尝试为此问题报告创建一个最小的复制器. AVX-512似乎存在一些问题,该产品已在装有Skylake处理器的最新Apple机器上发货. 根据 GCC6发行说明,AVX-512齿轮应该可用.根据英特尔内在指南 vmovdqu64可与AVX-512VL和AVX-512F: $ cat test.cxx #include #include ..
发布时间:2020-11-13 00:11:42 C/C++开发

gcc的__builtin_cpu_supports是否检查操作系统支持?

GCC编译器提供了一组内置来测试某些处理器功能,例如某些指令集的可用性.但是,根据此线程我们也可能知道某些操作系统可能未启用某些cpu功能.所以问题是:__builtin_cpu_supports内部函数是否还会检查OS是否已启用某些处理器功能? 解决方案 否. 我通过在Linux内核引导选项中添加noxsave来禁用Skylake系统上的AVX.当我执行cat /proc/cpui ..
发布时间:2020-11-12 23:44:12 其他开发

__ddiv_ru的语义

来自 #include表示以下代码结果是ceil(8/32)= 1.0,而是获得0.25。 使用命名空间std; __managed__ double x; __managed__ double y; __managed__ double r; __global__ void ceilDiv() { r = __ddiv_ru(x,y ..
发布时间:2020-10-13 00:50:27 其他开发

在AVX上使用AVX2 / AVX512内部函数编译C ++代码

我的生产代码具有针对各种SIMD指令集(包括AVX,AVX2和AVX512)实现的内核。可以使用在目标计算机上为目标计算机编译代码。/configure--enable-proc = AVX CXXFLAGS =“-mavx” 。 这在Travis CI(公开AVX内部函数)上也很好用。我想至少编译AVX2和AVX512版本,以查看是否所有文件都已签入。但是似乎为不同的ISA编译并不是那么容 ..
发布时间:2020-10-11 06:30:56 C/C++开发

Constexpr和SSE内在函数

大多数C ++编译器均支持 _mm_cmpeq_epi32 我的问题是此函数未标记为 constexpr ,尽管“从语义上讲”,因为它是一个纯函数,所以没有理由不将该函数设为 constexpr 。 是否存在我可以通过任何方式编写自己的版本(例如) _mm_cmpeq_epi32 就是 constexpr 吗? 很显然,我希望运行时的函数使用正确的as ..
发布时间:2020-10-08 18:32:33 C/C++开发

ICC中的-O2弄乱了汇编程序,ICC中的-O1和GCC / Clang中的所有优化都很好

我最近开始使用ICC(18.0.1.126)来编译可以在任意优化设置下与GCC和Clang一起正常工作的代码。该代码包含一个汇编程序例程,该例程使用AVX2和FMA指令将4x4的double矩阵相乘。经过多番摆弄之后,事实证明,使用-O1-xcore-avx2进行编译时,汇编程序正常运行,但是使用-O2-xcore-avx2进行编译时,给出了错误的数值结果。但是,该代码可以在所有优化设置上编译,而 ..
发布时间:2020-10-06 23:39:34 C/C++开发