sse相关内容

像Denormals-Are-Zero(DAZ)这样的异常标志是否会影响相等性的比较?

如果我有2个具有不同位模式的非正规浮点数并比较它们是否相等,结果是否会受到Denormals-Are-Zero标志,Flush-to-Zero标志或常用处理器上的其他标志的影响? 还是这些标志仅影响计算而不影响相等性检查? 解决方案 DAZ(异常 Are 零)会影响读取输入,因此 DAZ会影响比较.根据其符号,所有异常值都按字面意义被视为 -0.0 或 +0.0 . FTZ(刷 ..
发布时间:2021-05-08 19:53:54 其他开发

字节序如何与SIMD寄存器一起工作?

我正在使用整数和SSE,并且对于字节顺序如何影响将数据移入和移出寄存器感到非常困惑. 我的最初的,错误的,理解的 最初,我的理解如下.如果我有一个4字节整数的数组,由于x86体系结构是低位字节序的,因此内存的布局将如下所示: 0D 0C 0B 0A 1D 1C 1B 1A 2D 2C 2B 2A .... nD nC nB nA 其中字母 A , B , C 和 D 索引整数元 ..
发布时间:2021-05-04 19:51:09 其他开发

我们可以在堆内存上使用非时间mov指令吗?

在Agner Fog的“用汇编语言优化子例程-第11.8节缓存控制指令"中,他说:“当写回缓存中发生缓存未命中时,内存写比读取要昂贵.必须读取整条缓存行从内存中进行修改,修改并在发生高速缓存未命中时写回可以通过使用非临时性的写指令MOVNTI,MOVNTQ,MOVNTDQ,MOVNTPD,MOVNTPS来避免.根据经验,建议仅在写入内存块时才使用非临时写入大于最大级别缓存的一半." 摘自《英 ..
发布时间:2021-04-21 18:39:45 其他开发

C ++ SIMD:按位和运算后存储uint64_t值

我正在尝试在两个 uint64_t 整数数组的元素之间进行按位& ,然后将结果存储在另一个数组中.这是我的程序: #include#include#includeint main(){uint64_t数据[200];uint64_t data2 [200];uint64_t data3 [200];__m128i * p ..
发布时间:2021-04-20 18:47:36 C/C++开发

AVX 256位代码的性能略逊于等效的128位SSSE3代码

我正在尝试编写非常有效的汉明距离代码.受到 WojciechMuła的极其聪明的SSE3 popcount 实现的启发,我编写了一个等效于AVX2的解决方案,这次使用256位寄存器.基于相关操作的两倍并行度,我预计将至少提高30%-40%,但是令我惊讶的是,AVX2代码要慢一点(约2%)! 有人可以启发我为什么我无法获得预期的性能提升吗? 两个64字节块的展开SSE3海明距离: I ..
发布时间:2021-04-19 20:54:45 C/C++开发

SIMD和动态内存分配

可能重复: SSE,内在函数和对齐方式 我是SIMD编程的新手,所以请问一个明显的问题. 我做了一些实验,以至于想要将SIMD值存储在动态分配的结构中. 代码如下: struct SimdTest{__m128 m_simdVal;无效setZero(){__m128 tmp = _mm_setzero_ps();m_simdVal = tmp;// ..
发布时间:2021-04-19 19:44:09 C/C++开发

水平求SSE无符号字节向量的最快方法

我需要水平添加一个 __ m128i ,它是16个epi8值.XOP指令会使这个琐碎的事变得微不足道,但是我没有可用的那些指令. 当前方法是: hd = _mm_hadd_epi16(_mm_cvtepi8_epi16(sum),_mm_cvtepi8_epi16(_mm_shuffle_epi8(sum,swap))));hd = _mm_hadd_epi16(hd,hd);hd = ..
发布时间:2021-04-19 18:50:35 C/C++开发

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

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

AVX/SSE回合向下浮动并返回整数向量吗?

有没有一种方法可以使用AVX/SSE来获取浮点向量,向下舍入并生成整数向量?所有的Floor固有方法似乎都产生最终的浮点向量,这很奇怪,因为舍入会产生整数! 解决方案 SSE可以通过选择截断(向零)或当前舍入模式(通常为IEEE默认模式,最接近将平局符舍入为)从FP转换为整数.像 nearbyint()一样,不像 round()那样,平局决胜负数为-0.如果需要在x86上使用四舍五入模式, ..
发布时间:2021-04-12 20:54:26 C/C++开发

如何在x64 CPU上快速计算sincos?

这是一个熟悉SSE/AVX指令系列的用户以及熟悉其性能分析的用户所面临的一个问题.我看到了许多不同的实现和方法,范围从 SSE2较旧到较新的.网络充斥着这样的链接.但是就我个人而言,我在sse组装分析方面没有丰富的经验.有些人指出了微指令,缓存,这需要一些低级的知识.因此,我要求您提供一些提示和您的个人经历.如果您有时间展开一些比较,那么您将了解“什么是最快的"以及为什么选择了什么方法.实现可能不 ..
发布时间:2021-04-12 20:54:17 其他开发

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

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

霓虹灯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 其他开发

Ubuntu-如何判断CPU应用程序当前是否正在使用AVX或SSE?

我目前在具有GPU的许多服务器上运行BOINC. 服务器同时运行GPU和CPU BOINC应用程序. 由于AVX和SSE在CPU应用程序中使用时会降低CPU频率,因此我必须选择同时运行哪个CPU/GPU,因为某些GPU应用程序会像其他应用程序那样瓶颈(运行时间完成较慢)不是. 目前,某些CPU应用已被命名,因此可以清楚地看到它们是否使用了AVX,但大多数都没有. 因此,有什 ..
发布时间:2021-04-12 20:53:50 其他开发

基于比较的条件SSE/AVX加或零元素

我有以下 __ m128 个向量: v_weight v_entropy 仅当 v_weight 中的元素不为0f时,我才需要向 v_weight 中添加 v_entropy . 很显然, _mm_add_ps()会添加所有元素. 我最多可以编译AVX,但不能编译AVX2. 编辑 我确实知道 v_weight 中有多少个元素将为0(总为0或最后的1、2或3 ..
发布时间:2021-04-12 20:53:44 其他开发