sse相关内容

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

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

__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 其他开发

在函数调用之前保存XMM寄存器

在汇编函数调用之前是否需要将任何XMM寄存器保存/推入堆栈? 因为我正在使用发布模式进行64位开发(使用AVX2)时在我的代码中观察到崩溃问题.在调试模式下,它的工作正常.我尝试保存XMM8寄存器的内容,并在函数调用结束时将其恢复,然后其工作正常. 有任何想法或参考吗? 解决方案 是的,在Microsoft Windows上,您需要保留XMM6-XMM15寄存器.请参阅 http:/ ..
发布时间:2020-11-29 20:12:53 其他开发

将8个16位SSE寄存器转换为8位数据

考虑到我有一个16位数据的SSE阵列: {1,2,3,4,5,6,7,8} 现在,我需要通过在前8个字节中仅存储16位数据的低字节来将此SSE数组转换为8位数据,例如: {1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0}. 是否有任何SSE指令来执行此操作? 解决方案 如 @harold 所述,您可以使用 pshufb aka轻松完成此操作_mm_s ..
发布时间:2020-11-29 20:10:20 其他开发

为什么在此示例中预取速度没有提高?

在此这篇优秀论文的6.3.2中,Ulrich Drepper撰写了有关软件预取的文章.他说这是“熟悉的指针追踪框架",我收集到的是他较早前对遍历随机指针所做的测试.在他的图中可以理解,当工作集超过缓存大小时,性能会降低,因为那样我们将越来越频繁地访问主内存. 但是为什么预取在这里仅能提供8%的帮助?如果我们确切地告诉处理器要加载的内容,并且提前足够长的时间告诉他(他提前160个周期),那么为 ..
发布时间:2020-11-29 20:08:17 其他开发

如何将两个SSE寄存器加在一起

我有两个SSE寄存器(128位是一个寄存器),我想将它们加起来.我知道如何在其中添加相应的单词,例如,如果我在寄存器中使用16位单词,则可以使用_mm_add_epi16做到这一点,但是我想要的是类似_mm_add_epi128的东西(不存在),它将使用寄存器作为一个大词. 即使需要多个指令,也可以执行任何操作吗? 我当时正在考虑使用_mm_add_epi64,检测右字中的溢出,然后根据需要在寄 ..
发布时间:2020-11-29 20:04:33 C/C++开发

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

有人可以解释英特尔内在指南中给出的延迟和吞吐量值? 我是否正确理解延迟是指一条指令运行所需的时间量,吞吐量是每个时间单位可以启动的指令数? 如果我的定义正确,为什么在较新的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 其他开发

矩阵乘法的自动向量化

我对SIMD还是很陌生,想尝试看看我是否可以让GCC对我进行简单的操作向量化. 所以我查看了这篇文章,并希望做更多或更少的事情同样的事情. (但对于KabyLake处理器,在Linux 64位上为gcc 5.4.0) 我基本上具有此功能: /* m1 = N x M matrix, m2 = M x P matrix, m3 = N x P matrix & output */ ..
发布时间:2020-11-12 23:41:18 其他开发

错误:在C中强制转换用户定义的数据类型

这是我的问题的更简单视图,我想将浮点值转换为已定义的类型v4si(我想使用SIMD操作进行优化.)请帮助将浮点/双精度值转换为已定义的类型. #include typedef double v4si __attribute__ ((vector_size (16))); int main() { double stoptime=36000; float ..
发布时间:2020-11-12 22:41:12 其他开发

使用GCC时如何禁用向量化?

我正在使用以下命令编译代码: gcc -O3 -ftree-vectorizer-verbose=6 -msse4.1 -ffast-math 所有优化均已启用. 但是我想在保持其他优化的同时禁用向量化. 解决方案 大多数GCC开关可与no前缀一起使用以禁用其行为.尝试使用-fno-tree-vectorize(在命令行上的-O3之后). ..
发布时间:2020-11-12 22:36:28 其他开发

英特尔x86 SSE SIMD指令入门

我想了解有关使用 SSE 的更多信息. 除了可以轻松阅读英特尔®64和IA-32之外,还有哪些学习方法架构软件开发人员手册? 主要我有兴趣使用解决方案 首先,我不建议您使用内置函数-它们不可移植(跨同一体系结构的编译器). 使用GCC 内部函数很简单-就像正常的函数调用一样: #include // portable to all x86 c ..
发布时间:2020-11-12 22:30:30 其他开发

-msse,-msse2,-mssse3,-msse4 rtc ..的cflgs sse选项之间有什么区别?以及如何确定?

对于GCC CFLAGS选项:-msse,-msse2,-mssse3,-msse4,-msse4.1,-msse4.2.它们是专有用途还是可以一起使用? 我的理解是,要设置的选择取决于运行程序的目标拱门是否支持它-这是正确的吗? 如果是这样,我怎么知道目标弓所支持的功能?在Linux中,我使用/proc/cpuinfo,但如果使用Mac或Windows,该怎么办? 谢谢! ..
发布时间:2020-11-11 21:08:51 其他开发

如何避免单元测试中的浮点舍入错误?

我正在尝试为一些简单的矢量数学函数编写单元测试,这些函数可对单精度浮点数的数组进行操作.这些函数使用SSE内在函数,并且在32位系统(测试通过64位)上运行时,我得到了误报(至少在我看来).随着操作遍历数组,我累积了越来越多的舍入错误.这是单元测试代码和输出的片段(我的实际问题如下): 测试设置: static const int N = 1024; static const floa ..
发布时间:2020-11-08 21:15:49 其他开发

SIMD用于浮动阈值操作

我想更快地进行一些矢量计算,并且我相信SIMD指令可以进行浮点比较和操作,操作如下: void func(const double * left,const double * right,double * res,const size_t size,const double th,const double drop){ for(size_t i = 0; i ..
发布时间:2020-10-25 23:51:55 C/C++开发

从另一个数组中减去一个数组的最有效方法

我有以下代码,这是我的应用程序一部分的瓶颈。我要做的就是在另一个数组上减去。这两个数组都具有约100000个元素。我正在尝试寻找一种方法来提高性能。 var Array1,Array2:整数数组; ..... //填充数组 ..... for ix的代码:= 0 to length(array1 )-1 Array1 [ix]:= Array1 [ix]-Ar ..
发布时间:2020-10-20 03:37:36 其他开发