问题标签 [sse]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3194 浏览

assembly - 错误 A2070:SSE MASM64 中的指令操作数无效

在 ml64.exe 64 位(masm64)中编译时,SSE 命令给我一个错误我需要做什么才能在 64 位中包含 SSE 命令?

我得到错误:

0 投票
3 回答
3680 浏览

assembly - 在 SSE2/SSSE3 上转置 8 个 16 位元素的寄存器

(我是 SSE/asm 的新手,如果这很明显或多余,我深表歉意)

有没有比执行 24 unpck[lh]ps 和 8/16+ shuffle 和使用 8 个额外寄存器更好的方法来转置包含 16 位值的 8 个 SSE 寄存器?(注意使用最多 SSSE 3 指令,Intel Merom,也就是缺少 SSE4 中的 BLEND*。)

假设您有寄存器 v[0-7] 并使用 t0-t7 作为辅助寄存器。在伪内在代码中:

每个 unpck* 需要 3 个周期的延迟,或 2 个周期用于互惠吞吐量(由 Agner 报告)。这会扼杀使用 SSE(在此代码上)的大部分性能提升,因为这种寄存器舞蹈几乎每个元素需要一个周期。我试图理解 x86 转置的 x264 的 asm 文件,但未能理解宏。

谢谢!

0 投票
4 回答
2252 浏览

assembly - VC++ 2K8 中 SSE 编码的内在函数与内联 ASM

我以前为 SSE 做过一些内联 ASM 编码,即使对于不了解 ASM 的人来说也不是太难。但我注意到 MS 还提供了包含许多此类特殊指令的内在函数。

是否存在特定的性能差异,或者有任何其他强有力的理由为什么应该在另一个之上使用一个?

重复标题,这是专门介绍 VC++ 2008 为非托管、本机 C++ 公开的内在函数。

0 投票
2 回答
1613 浏览

openmp - OpenMP + SSE 没有加速

我的教授发现了这个使用 SSE 和 OpenMP 进行 3D 线性可分内核卷积的有趣实验,并将任务交给我对我们系统的统计数据进行基准测试。作者声称串行方法的速度提高了 18 倍!可能并非总是如此,但我们预计在双核 Intel 上运行它至少会加速 2-4 倍。

http://software.intel.com/en-us/articles/16bit-3d-convolution-sse4openmp-implementation-on-penryn-cpu/#comment-41994

唉,我们完全找不到加速。无论有没有 OpenMP,串行代码的性能总是更好。

我正在使用 Linux,并观察到某种趋势......当系统上没有其他进程正在运行时,一段时间后 loadavg 开始增加,并且 %CPU 利用率下降。

我意外遇到的另一个可能的误报......我启动了程序,然后立即暂停了它。然后我用 bg 在后台运行它,发现加速比超过 2。这种情况一直都在发生!

任何建议都会很棒。

谢谢,萨扬

0 投票
4 回答
759 浏览

c++ - 您需要付出多少努力才能从使用 SSE 中获得收益?

案例一

假设你有一个小班:

天真的使用 SSE 会简单地用一些内在函数替换这些函数体。但是我们会期望这会产生很大的不同吗?MMX 曾经涉及昂贵的状态变化 IIRC,SSE 还是它们就像其他指令一样?即使没有直接的“使用 SSE”开销,将值移入 SSE 寄存器并再次移出真的会更快吗?

案例二

相反,您使用的是较少基于 OO 的代码库。而不是 Point3D 对象的数组/向量,您只需拥有一个大的浮点数组:

在这里使用 SSE 怎么样?好点?

综上所述

尝试使用 SSE 优化单向量操作实际上是否值得,还是仅在进行批量操作时才有价值?

0 投票
5 回答
9355 浏览

hash - 可以使用 CRC32C 作为基础构造一个“好”的哈希函数吗?

鉴于 SSE 4.2(英特尔酷睿 i7 和 i5 部件)包含 CRC32 指令,调查是否可以构建更快的通用哈希函数似乎是合理的。据此,只有16 位 CRC32 是均匀分布的。那么还有什么其他的转变可以用来克服这个问题呢?

更新 这个怎么样?只有 16 位适合散列值。美好的。如果您的表是 65535 或更少,那就太好了。如果不是,则通过 Nehalem POPCNT(人口计数)指令运行 C​​RC 值以获取设置的位数。然后,将其用作表数组的索引。如果您的桌子位于 1 毫米条目以南,则此方法有效。我敢打赌,这比性能最好的哈希函数更便宜/更快。既然GCC 4.5具有 CRC32 内在特性,它应该很容易测试……如果我有足够的空闲时间来研究它。

大卫

0 投票
5 回答
4817 浏览

c - GCC - 如何重新对齐堆栈?

我尝试构建一个使用 pthreads 和 __m128 SSE 类型的应用程序。根据 GCC 手册,默认堆栈对齐是 16 个字节。为了使用 __m128,要求是 16 字节对齐。

我的目标 CPU 支持 SSE。我使用不支持运行时堆栈重新对齐的 GCC 编译器(例如 -mstackrealign)。我不能使用任何其他 GCC 编译器版本。

我的测试应用程序如下所示:

应用程序生成异常并退出。经过简单的调试(printf "%p", &y),我发现变量y不是16字节对齐的。

我的问题是:如何在不使用任何 GCC 标志和属性(它们没有帮助)的情况下正确地重新对齐堆栈(16 字节)?我应该在这个线程函数 f() 中使用 GCC 内联汇编器吗?

0 投票
2 回答
4262 浏览

visual-studio-2008 - 如何在 Visual Studio 2008 中启用 SSE3/SSE4.1 指令集?

我试图遵循:

项目 > 属性 > 配置属性 > C/C++ > 代码生成 > 启用增强指令集

但我得到的唯一选择是 - SSE 或 SSE2。

谢谢。

0 投票
3 回答
4496 浏览

c - 逻辑 SSE 内在函数之间有什么区别?

不同类型的逻辑 SSE 内在函数之间有什么区别吗?例如,如果我们进行 OR 运算,则有三个内在函数:_mm_or_ps,它们_mm_or_pd_mm_or_si128做同样的事情:计算它们的操作数的按位或。我的问题:

  1. 使用一个或另一个内在函数(使用适当的类型转换)有什么区别。在某些特定情况下会不会有任何隐性成本,例如更长的执行时间?

  2. 这些内在函数映射到三个不同的 x86 指令 ( por, orps, orpd)。有谁知道为什么英特尔将宝贵的操作码空间浪费在几条做同样事情的指令上?

0 投票
2 回答
1347 浏览

c++ - 同时使用多个 SIMD 指令集的好处

我正在编写一个高度并行的多线程应用程序。我已经编写了一个 SSE 加速线程类。如果我要编写一个 MMX 加速线程类,然后同时运行两者(每个内核一个 SSE 线程和一个 MMX 线程),性能会显着提高吗?

我认为这种设置将有助于隐藏内存延迟,但在我开始投入时间之前我想确定一下。