sse相关内容

“非时间"是什么意思?x86 中的内存访问

这是一个有点低级的问题.在 x86 汇编中有两条 SSE 指令: MOVDQA xmmi, m128 和 MOVNTDQA xmmi, m128 IA-32 软件开发人员手册说 MOVNTDQA 中的 NT 代表 Non-Temporal,否则与 MOVDQA 相同. 我的问题是,非时间是什么意思? 解决方案 Non-Temporal SSE 指令(MOVNT ..
发布时间:2021-12-18 08:41:51 其他开发

使用未对齐的缓冲区进行矢量化:使用 VMASKMOVPS:从未对齐计数生成掩码?或者根本不使用那个insn

gcc 5.3 with -O3 -mavx -mtune=haswell for x86-64 使得令人惊讶的庞大代码 处理可能未对齐的代码输入,例如: //方便简单的编译器输入示例//对于任何真正的程序,我实际上对此并不感兴趣void floatmul(float *a) {for (int i=0; i clang 使用未对齐的加载/存储指令,但 gcc 执行标量 intro/outro ..
发布时间:2021-12-18 08:40:34 其他开发

为什么 SSE 标量 sqrt(x) 比 rsqrt(x) * x 慢?

我一直在英特尔酷睿双核上分析我们的一些核心数学,在查看平方根的各种方法时,我注意到一些奇怪的事情:使用 SSE 标量运算,取倒数平方根更快乘以得到 sqrt,而不是使用原生 sqrt 操作码! 我正在用如下循环测试它: inline float TestSqrtFunction( float in );void TestFunc(){#define 数组大小 4096#define NUM ..
发布时间:2021-12-08 11:48:18 其他开发

SSE指令:哪些CPU可以做原子16B内存操作?

考虑 x86 CPU 上的单个内存访问(单个读取或单个写入,而不是读取 + 写入)SSE 指令.该指令正在访问 16 个字节(128 位)的内存,并且访问的内存位置对齐到 16 个字节. 文档“英特尔® 64 位架构内存订购白皮书"指出,对于“读取或写入地址在 8 字节边界上对齐的四字(8 字节)的指令",内存操作似乎作为单个内存执行访问与内存类型无关. 问题:是否存在 Intel/A ..
发布时间:2021-11-30 14:44:44 其他开发

SSE、内在函数和对齐

我使用大量 SSE 编译器内在函数编写了一个 3D 矢量类.一切正常,直到我开始将具有 3D 矢量的类作为 new 的成员.我在发布模式下遇到了奇怪的崩溃,但在调试模式下则没有,反之亦然. 所以我阅读了一些文章并认为我也需要将拥有 3D 矢量类实例的类也对齐到 16 个字节.所以我只是在类前面添加了 _MM_ALIGN16 (__declspec(align(16)),如下所示: _MM_ ..
发布时间:2021-11-27 08:06:06 C/C++开发

如何在不使用寄存器的情况下将 128 位 xmm 直接移动到内存中?

我已经完成了 movdqu [dst], xmm0 但我不断收到错误,但是这有效: mov esi, dstmovdqu [esi], xmm0 这是为什么?以及如何使用直接内存写入? 谢谢. 解决方案 如果你想把从地址 dst 开始的 128 位内存移动到 xmm0 你可以在 MASM 中执行以下操作.(自 1990 年代初以来,我就没有使用过 MASM,但据我所知,这应该可行 ..
发布时间:2021-11-25 07:26:41 C#

SSE 优化的 64 位整数仿真

对于我正在从事的业余爱好项目,我需要在 x86 CPU 上模拟某些 64 位整数运算,并且它需要快速. 目前,我通过 MMX 指令执行此操作,但这确实很难处理,因为我必须一直刷新 fp 寄存器状态(并且因为大多数 MMX 指令处理 signed 整数,我需要无符号行为). 所以我想知道 SO 上的 SSE/优化专家是否可以使用 SSE 提出更好的实现. 我需要的操作如下(非常具体 ..
发布时间:2021-11-25 06:20:59 C/C++开发

如何知道SSE2是否在opencv中被激活

我有一个版本的 OpenCV 2.4.10 库,它是为 Windows 上的 Intel X64 构建的. 我如何知道 CV_SSE2 是否处于活动状态?我没有代码.我只有库、DLL 和头文件. 谢谢 解决方案 您可以使用 checkHardwareSupport 像: #include #include int main(){cv::setUseOptimized(true ..
发布时间:2021-11-25 06:03:50 C/C++开发

.NET Core 中游戏开发的浮点确定性

背景 我们正在使用 C# 和 .NET Core 开发 RTS 游戏引擎.与大多数其他实时多人游戏不同,RTS 游戏倾向于通过将玩家输入同步到其他玩家,并同时在所有客户端上同步运行游戏模拟来工作.这要求游戏逻辑具有确定性,以免游戏不同步. 非确定性的一个潜在来源是浮点运算.从我收集到的主要问题是旧的 x87 FPU 指令 - 它们使用内部 80 位寄存器,而 IEEE-754 浮点值是 ..
发布时间:2021-11-24 17:10:04 C#/.NET

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++开发

ARM Neon:有条件的存储建议

我想弄清楚如何在 ARM neon 中生成条件存储.我想做的是相当于这个SSE指令: void _mm_maskmoveu_si128(__m128i d, __m128i n, char *p); which 有条件地存储d的字节元素到地址p.选择器n中每个字节的高位决定了d中对应的字节是否会被存储. 有关如何使用 NEON 内在函数执行此操作的任何建议?谢谢 这就是我所 ..
发布时间:2021-11-17 22:22:05 其他开发

使用 ARM NEON 内在函数对 cvtColor 进行 SIMD 优化

我正在研究 BGR 到灰度转换的 SIMD 优化,这相当于 OpenCV 的 cvtColor() 函数.这个函数有一个英特尔 SSE 版本,我指的是它.(我所做的基本上是将 SSE 代码转换为 NEON 代码.) 我快写完代码了,可以用g++编译了,但是还是无法得到正确的输出.有没有人知道错误可能是什么? 我得到了什么(不正确): 我应该得到什么: 这是我的代码: #i ..
发布时间:2021-11-17 22:09:55 C/C++开发

常见的 SIMD 技术

在哪里可以找到有关常见 SIMD 技巧的信息?我有一个指令集,知道如何编写简单的 SIMD 代码,但我知道,现在 SIMD 功能要强大得多.它可以容纳复杂的条件无分支代码. 例如 (ARMv6),以下指令序列将 Rd 的每个字节设置为 Ra 和 Rb 对应字节的无符号最小值: USUB8 Rd, Ra, RbSEL Rd、Rb、Ra 教程/不常见的 SIMD 技术的链接也很好:) ARMv6 ..
发布时间:2021-11-17 22:05:00 其他开发

NEON、SSE 和交错加载与洗牌

我正在尝试理解“Iwillnotexist Idonotexist"在使用 ARM NEON 内在函数对 cvtColor 进行 SIMD 优化的评论: ... 为什么不使用映射到 VLD3 指令的 ARM NEON 内部函数?这使您免于所有的改组,既简化又加速了代码.英特尔 SSE 实现需要 shuffle,因为它缺少 2/3/4 路解交错加载指令,但您不应在它们可用时传递它们. 我 ..
发布时间:2021-11-17 21:55:10 其他开发

SSE _mm_movemask_epi8 ARM NEON 的等效方法

我决定继续快速弯道优化并坚持_mm_movemask_epi8 SSE 指令.如何使用 uint8x16_t 输入为 ARM Neon 重写它? 解决方案 经过一些测试,下面的代码看起来是正确的: int32_t _mm_movemask_epi8_neon(uint8x16_t 输入){const int8_t __attribute__ ((aligned (16))) xr[8] ..
发布时间:2021-11-17 21:41:09 其他开发