sse相关内容

将 16 字节字符串与 SSE 进行比较

我有 16 字节的“字符串"(它们可能更短,但您可能会假设它们在末尾用零填充),但您可能不会假设它们是 16 字节对齐的(至少并非总是如此). 如何编写一个例程将它们(相等)与 SSE 内在函数进行比较?我发现此代码片段可能会有所帮助,但我不确定它是否合适? 注册__m128i xmm0, xmm1;注册 unsigned int eax;xmm0 = _mm_load_epi128((_ ..
发布时间:2022-01-06 13:08:32 其他开发

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

是否可以使用 PTEST 来测试两个寄存器是否都为零或其他条件?

你可以用 SSE4.1 ptest 做什么其他比测试单个寄存器是否全为零? 您能否结合使用 SF 和 CF 来测试有关两个未知输入寄存器的任何有用信息? PTEST 有什么用?您认为检查打包比较的结果(如 PCMPEQD 或 CMPPS)会很好,但至少在英特尔 CPU 上,使用 PTEST + JCC 进行比较和分支比使用 PMOVMSK(B/PS/PD) + 宏融合 CMP 花费更多 ..
发布时间:2022-01-06 13:05:24 其他开发

SSE2 内在函数 - 比较无符号整数

我有兴趣在添加无符号 8 位整数时识别溢出值,并将结果限制为 0xFF: __m128i m1 = _mm_loadu_si128(/* 16 个 8 位无符号整数 */);__m128i m2 = _mm_loadu_si128(/* 16 个 8 位无符号整数 */);__m128i m3 = _mm_adds_epu8(m1, m2); 我有兴趣对“小于"进行比较在这些无符号整数上,类似 ..
发布时间:2022-01-06 13:04:10 C/C++开发

MOVDQA 和 MOVAPS x86 指令之间的区别?

我正在查看英特尔数据表:英特尔® 64 和 IA-32 架构Software Developer's Manual 和我找不到 之间的区别 MOVDQA:移动对齐双四字 MOVAPS:移动对齐打包单精度 在英特尔数据表中,我可以找到这两个指令: 此指令可用于从 128 位内存位置,将 XMM 寄存器的内容存储到128 位内存位置,或在两个 XMM 寄存器之间移动数据. 唯一 ..
发布时间:2022-01-06 13:01:12 其他开发

Intel x86 SSE SIMD 指令入门

我想详细了解如何使用 SSE. 除了显而易见的阅读英特尔® 64 和 IA-32 之外,还有哪些学习方法架构软件开发人员手册? 主要我有兴趣使用 GCC X86 内置函数. 解决方案 首先,我不建议使用内置函数 - 它们不可移植(跨同一架构的编译器). 使用 intrinsics、GCC 做得很好 将 SSE 内在函数优化为更优化的代码.您可以随时查看程序集,了解如何充分 ..
发布时间:2022-01-06 12:59:45 其他开发

英特尔内在函数中的延迟与吞吐量

总的来说,我认为我对延迟和吞吐量之间的区别有很好的理解.但是,对于英特尔 Intrinsics,我不清楚延迟对指令吞吐量的影响,尤其是在按顺序(或几乎按顺序)使用多个内部调用时. 例如,让我们考虑: _mm_cmpestrc 这在 Haswell 处理器上的延迟为 11,吞吐量为 7.如果我在循环中运行这条指令,我会在 11 个周期后获得一个连续的每个周期输出吗?由于这需要一次运行 11 ..
发布时间:2022-01-06 12:55:56 其他开发

使用 AVX 指令进行水平向量求和的最快方法

我有一个包含四个 64 位浮点值的压缩向量. 我想得到向量元素的总和. 使用 SSE(并使用 32 位浮点数),我可以执行以下操作: v_sum = _mm_hadd_ps(v_sum, v_sum);v_sum = _mm_hadd_ps(v_sum, v_sum); 不幸的是,尽管 AVX 具有 _mm256_hadd_pd 指令,但它的结果与 SSE 版本不同.我相信这是因为大多 ..
发布时间:2022-01-06 12:54: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 其他开发

x86 SIMD 内在函数的头文件

哪些头文件为不同的 x86 SIMD 指令集扩展(MMX、SSE、AVX 等)提供了内在函数?在网上找不到这样的列表似乎是不可能的.如果我错了,请纠正我. 解决方案 现在你通常应该只包含 .它包括一切. GCC 和 clang 将阻止您将内部函数用于编译时未启用的指令(例如使用 -march=native 或 -mavx2 -mbmi2 -mpopcnt -mfma -mcx16-m ..
发布时间:2022-01-06 12:37:14 其他开发

如何使用 x86 SIMD 有效地将 8 位位图转换为 0/1 整数数组

我想将 8 位整数转换为大小为 8 的数组,每个值都包含一个整数的位值. 例如:我有 int8_t x = 8; 我想把它转换成 int8_t array_x = {0,0,0,0,1,0,0,0}; 这必须有效地完成,因为此计算是信号处理块的一部分.有没有一种有效的方法来做到这一点?我确实检查了混合说明.当数组元素大小为 8 位时,它不符合我的要求.开发平台为AMD Ryzen. ..
发布时间:2022-01-06 12:32:10 其他开发

SIMD 用无符号乘法签名,用于 64 位 * 64 位到 128 位

我创建了一个使用 SIMD 将 64 位 * 64 位转换为 128 位的函数.目前我已经使用 SSE2(实际上是 SSE4.1)实现了它.这意味着它同时做两个 64b*64b 到 128b 的产品.相同的想法可以扩展到 AVX2 或 AVX512,同时提供四个或八个 64b*64 到 128b 产品.我的算法基于 http://www.hackersdelight.org/hdcodetxt/m ..
发布时间:2022-01-06 12:23:04 其他开发

如何使用 SIMD 实现 atoi?

我想尝试使用 SIMD 指令编写 atoi 实现,以包含在 RapidJSON(C++ JSON读/写库).它目前在其他地方有一些 SSE2 和 SSE4.2 优化. 如果是速度增益,多个atoi结果可以并行完成.字符串最初来自 JSON 数据缓冲区,因此多 atoi 函数必须执行任何所需的 swizzling. 我想出的算法如下: 我可以用以下方式初始化一个长度为 N 的向量: ..
发布时间:2022-01-06 12:21:17 C/C++开发

快速 24 位数组 ->32位数组转换?

快速总结: 我有一个 24 位值的数组.关于如何将单个 24 位数组元素快速扩展为 32 位元素的任何建议? 详细信息: 我正在使用 DirectX 10 中的像素着色器实时处理传入的视频帧.一个绊脚石是我的帧来自具有 24 位像素(YUV 或 RGB 图像)的捕获硬件,但 DX10 需要32 位像素纹理.因此,我必须将 24 位值扩展为 32 位,然后才能将它们加载到 GPU ..
发布时间:2022-01-06 11:37:52 其他开发

Websocket 传输可靠性(重新连接期间 Socket.io 数据丢失)

使用过 NodeJS、Socket.io 问题 假设有 2 个用户 U1 &U2,通过 Socket.io 连接到应用程序.算法如下: U1 完全失去互联网连接(例如关闭互联网) U2 向 U1 发送消息. U1 尚未收到消息,因为 Internet 已关闭 服务器通过心跳超时检测到U1断开连接 U1 重新连接到 socket.io U1 从未收到来自 U2 的消 ..
发布时间:2021-12-25 13:40:49 其他开发