sse2相关内容

如何将两个_pd 转换为一个_ps?

我正在循环一些数据,计算一些 double 和每 2 个 __m128d 操作,我想将数据存储在 __m128 浮点数上. 所以 64+64 + 64+64 (2 __m128d) 存入 1 32+32+32+32 __m128. 我做这样的事情: __m128d v_result;__m128 v_result_float;...//对 v_result 的一些操作//将前两个“槽 ..
发布时间:2022-01-13 08:20:36 C/C++开发

将 _mm_shuffle_epi32 转换为 C 表达式以进行排列?

我正在将 SSE2 移植到 NEON.该端口处于早期阶段,并且产生不正确的结果.结果不正确的部分原因是 _mm_shuffle_epi32 和我选择的 NEON 指令. _mm_shuffle_epi32 的文档来自 微软.Intel 文档更好,但我不清楚一些伪代码在做什么. SELECT4(src, control){案例(控制[1:0])0: tmp[31:0] := src[31:0 ..
发布时间:2022-01-06 13:08:15 其他开发

4 个 32 位整数的 SSE 乘法

如何将 4 个 32 位整数乘以另外 4 个整数?我没有找到任何可以做到这一点的说明. 解决方案 如果您需要 signed 32x32 位整数乘法,则在 software.intel.com 看起来它应该做你想做的: 静态内联 __m128i muly(const __m128i &a, const __m128i &b){__m128i tmp1 = _mm_mul_epu32(a,b ..
发布时间:2022-01-06 12:53:32 其他开发

在 Intel 上使用 SSE2 减少无符号字节的总和而不会溢出

我试图在 Intel i3 处理器上找到 32 个元素(每个 1 字节数据)的总和减少.我是这样做的: s=0;对于 (i=0; i 但是,它需要更多时间,因为我的应用程序是一个需要更少时间的实时应用程序.请注意,最终和可能超过 255. 有没有办法使用低级 SIMD SSE2 指令来实现这一点?不幸的是,我从未使用过 SSE.为此,我尝试搜索 sse2 函数,但它也不可用.是否(sse ..
发布时间:2022-01-06 12:49:37 其他开发

Valgrind 和 Java

我想使用 Valgrind 3.7.0 来查找 Java 本机代码中的内存泄漏.我正在使用 jdk1.6.0._29. 为此,我必须设置 --trace-children=yes 标志.设置该标志,我不再可以在任何 Java 应用程序上运行 valgrind,甚至是像这样的命令: valgrind --trace-children=yes --smc-check=all java -ver ..
发布时间:2021-12-31 08:06:32 Java开发

orpd等SSE2指令的意义何在?

orpd 指令是“压缩双精度浮点值的按位逻辑或".这不是与 por(“按位逻辑或")完全相同的事情吗?如果是这样,拥有它有什么意义? 解决方案 记住 SSE1 orps 先到先得.(实际上 MMX por mm, mm/mem 甚至更早出现SSE1.) 具有相同操作码和新前缀的是 SSE2 orpd 指令对硬件解码器逻辑很有意义,我想,就像 movapd 与 movaps 一样.在 ..
发布时间:2021-12-18 09:35:09 其他开发

x86-64 程序集的性能优化 - 对齐和分支预测

我目前正在编写一些 C99 标准库字符串函数的高度优化版本,例如 strlen()、memset() 等,使用 x86-64 汇编和SSE-2 说明. 到目前为止,我已经设法在性能方面取得了出色的结果,但是当我尝试进行更多优化时,有时会出现奇怪的行为. 例如,添加甚至删除一些简单的指令,或者简单地重新组织一些与跳转一起使用的局部标签,都会完全降低整体性能.并且在代码方面绝对没有理由. ..
发布时间:2021-12-18 08:59:42 其他开发

是否可以使用 SSE 和 SSE2 生成 128 位宽的整数?

我想进一步了解 SSE2 的功能,想知道是否可以制作一个 128 位宽的整数来支持加法、减法、XOR 和乘法? 解决方案 SIMD 旨在同时处理多个小值,因此不会有任何结转到更高单元,您必须手动执行此操作.在 SSE2 中没有进位标志,但您可以轻松地将进位计算为 carry = sum 或 carry = sum 喜欢这个.更糟糕的是,SSE2 也没有 64 位比较,因此您必须使用一些解决 ..
发布时间:2021-12-18 08:54:33 其他开发

Visual C++ (x64) 中的 SSE2 选项

我已将 x64 配置添加到我的 C++ 项目以编译我的应用程序的 64 位版本.一切看起来都很好,但编译器给出了以下警告: `cl:命令行警告 D9002:忽略未知选项'/arch:SSE2'` SSE2 优化真的不适用于 64 位项目吗? 解决方案 似乎所有 64 位处理器都有 SSE2.由于编译器选项在默认情况下始终处于开启状态,因此无需手动开启. 来自维基百科: SS ..
发布时间:2021-11-25 05:47:12 C/C++开发

SSE 指令添加数组的所有元素

我是 SSE2 指令的新手.我找到了一个指令 _mm_add_epi8 可以添加两个数组元素.但我想要一个可以添加数组所有元素的 SSE 指令. 我试图用这段代码来发展这个概念: #include #include #include void sse(unsigned char* a,unsigned char* b);无效主(){/* 无符号字符 *arr;arr=(unsigned c ..
发布时间:2021-11-18 04:07:01 C/C++开发

使用函数 _mm_clflush 刷新大型结构的正确方法

我开始使用 _mm_clflush、_mm_clflushopt 和 _mm_clwb 等函数. 现在说,因为我已经定义了一个结构名称 mystruct,它的大小是 256 字节.我的缓存行大小是 64 字节.现在我想刷新包含 mystruct 变量的缓存行.以下哪种方式是正确的? _mm_clflush(&mystruct) 或 for (int i = 0; i 解决方案 c ..
发布时间:2021-09-29 19:30:42 其他开发

如何从 SSE2 __m128i 结构中提取字节?

我是 SIMD 内在函数的初学者,所以我会提前感谢大家的耐心等待.我有一个涉及无符号字节的绝对差异比较的应用程序(我正在处理灰度图像). 我尝试了 AVX、更现代的 SSE 版本等,但最终决定 SSE2 似乎足够并且对单个字节的支持最多 - 如果我错了,请纠正我. 我有两个问题:首先,加载 128 位寄存器的正确方法是什么?我想我应该传递与 128 的倍数对齐的负载内在数据,但这是否适 ..
发布时间:2021-09-17 19:16:41 其他开发

SSE2 双倍乘法比标准乘法慢

我想知道为什么以下带有 SSE2 指令的代码执行乘法的速度比标准 C++ 实现慢.代码如下: m_win = (double*)_aligned_malloc(size*sizeof(double), 16);__m128d* pData = (__m128d*)input().data;__m128d* pWin = (__m128d*)m_win;__m128d* pOut = (__m1 ..
发布时间:2021-08-27 19:47:44 C/C++开发

如何在sse2上模拟pcmpgtq?

PCMPGTQ 是在 sse4.2 中引入的,它为产生掩码的 64 位数字提供大于符号的比较. 如何在早于 sse4.2 的指令集上支持此功能? 更新:同样的问题适用于带有 Neon 的 ARMv7,它也缺少 64 位比较器.姐妹问题在这里找到:在带有 Neon 的 ARMv7a 上通过 64 位有符号比较支持 CMGT 的最有效方法是什么? 解决方案 __m128i pcmp ..
发布时间:2021-08-27 19:45:23 其他开发

组装"movdqa"访问冲突

我当前正在尝试用汇编语言编写一个函数,我想将位于 rdx 中的内存地址处的字符串的128位移到 xmm1 寄存器中. 如果我使用 movdqa xmm1 [rdx] ,则在位置 0xFFFFFFFFFFFFFFFFFFFF 读取时会遇到访问冲突异常. 如果我尝试使用 movdqu xmm1,[rdx] ,我没有得到例外.问题是如果我使用movdqu,位的顺序将反转. 所以我不知道 ..
发布时间:2021-05-31 20:20:33 其他开发

SIMD何时更快的一些经验法则是什么?(SSE2,AVX)

我有一些代码可以一次处理3个对称集合,每个对称集合包含3个非对称整数值.有大量的条件代码和许多常量. 这已成为性能瓶颈,我正在寻找一些经验法则,以了解64位Intel/AMD CPU上的SIMD何时能获得性能优势.代码很长,而且我以前从未使用过SSE2或AVX,所以在我花时间之前,先了解一下是否有可能赢得性能,这将是很高兴的. 如果您愿意列出经验法则或指向此方面的现有白皮书,我将不胜感 ..
发布时间:2021-04-12 20:55:27 其他开发

SSE2指令(例如orpd)有什么意义?

orpd指令是“压缩双精度浮点值的按位逻辑或".这不是和por(“按位逻辑OR")完全一样吗?如果是这样,拥有它有什么意义? 解决方案 请记住,SSE1 orps 首先. (实际上 MMX por mm, mm/mem 甚至早于SSE1.) SSE2 orpd 指令具有相同的操作码,但带有新的前缀对于硬件解码器逻辑,我想就像movapd vs. movaps一样.像这样的一些指令在p ..
发布时间:2020-09-12 22:46:30 其他开发

如何将两个_pd转换为一个_ps?

我正在循环一些数据,计算两次double运算,每2个__m128d操作,我想将数据存储在__m128浮点数上. 因此将64 + 64 + 64 + 64(2 __m128d)存储到1 32 + 32 + 32 + 32 __m128中. 我做这样的事情: __m128d v_result; __m128 v_result_float; ... // some operatio ..
发布时间:2020-07-09 21:21:31 C/C++开发