问题标签 [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 投票
2 回答
1864 浏览

c - glibc 和 SSE 功能

我正在尝试查找有关 glibc 的信息以及它在多大程度上使用 SSE 功能。

如果它经过优化,我可以直接使用它吗?

假设我使用的是较大的 Linux 发行版之一,我假设它的 glibc 被编译为尽可能通用并尽可能便携,因此没有优化?

我对函数 memcpy 和 memcmp 以及如何尽快获得这些函数特别感兴趣。

0 投票
5 回答
7345 浏览

gcc - 现代编译器如何使用 mmx/3dnow/sse 指令?

我一直在阅读 x86 指令集扩展,它们似乎只在某些非常特定的情况下有用(例如,HADDPD - SSE3 中的(Horizo​​ntal-Add-Packed-Double))。这些需要一定的寄存器布局,需要刻意设置,或者从之前的一系列指令中发生。像 gcc 这样的通用编译器多久实际使用一次这些指令(或其子集),或者它们主要用于手工编码的汇编程序?编译器如何检测适合使用 SIMD 指令的位置?

0 投票
6 回答
1772 浏览

c - 使用 SSE 将 4 个浮点数乘以 4 个浮点数的最有效方法是什么?

我目前有以下代码:

我首先有几个问题:

(1) 如果我要在 16 字节边界上对齐数组,它甚至可以工作吗?由于数组是在堆栈上分配的,对齐它们几乎是不可能的吗?

请参阅此帖子的选定答案:堆栈变量是否由 GCC __attribute__((aligned(x))) 对齐?

(2) 可以重构代码以提高效率吗?如果我将两个浮点数组都放入寄存器而不是一个呢?

谢谢

0 投票
3 回答
2151 浏览

c - 让 GCC 在使用内联 asm 的整个函数中保留 SSE 寄存器

我正在用 C 编写一个程序,需要进行一些快速的数学计算。我正在使用内联 SSE 汇编指令来获取一些 SIMD 操作(使用压缩双精度浮点数)。我在 Linux 上使用 GCC 进行编译。

我处于需要循环遍历一些数据的情况,并且在计算中使用了一个常数因子。我想在循环期间将该因素隐藏在安全寄存器中,因此我不必每次都重新加载它。

用一些代码来澄清:

我试过用“注册”关键字做一些事情。但如果我没记错的话,看起来我只能保留一个指向该结构的指针(在通用寄存器中)。这将需要在每次迭代中得到尊重,浪费宝贵的时间。

我不只是想假设 GCC 不会更改 xmm1 寄存器,这太过分了“恶魔飞出鼻子”之类的事情:-)。所以我希望有一个适当的方法来做到这一点。

0 投票
1 回答
2198 浏览

cpu-architecture - 如何确定 SSE 预取指令大小?

我正在使用包含 SSE 预取指令的内联汇编的代码。预处理器常量确定是否使用 32、64 或 128 字节预取指令。该应用程序用于各种平台,到目前为止,我不得不在每种情况下调查哪个是给定 CPU 的最佳选择。我知道这是缓存行大小。这些信息是否可以自动获得?/proc/cpuinfo 中似乎没有明确显示它。

0 投票
2 回答
527 浏览

loops - Visual Studio 的循环矢量化(手动和自动)有哪些资源?

我看到了一些 gcc 的资源,但没有看到 Visual Studio 的资源。

任何人都有参考资料、例子和技巧的宝库吗?

0 投票
5 回答
22073 浏览

c - 英特尔 x86 SSE SIMD 指令入门

我想了解有关使用SSE的更多信息。

除了显而易见的阅读英特尔® 64 和 IA-32 架构软件开发人员手册之外,还有哪些学习方法?

主要是我有兴趣使用GCC X86 Built-in Functions

0 投票
2 回答
404 浏览

c++ - 从另一个类调用构造函数

如果我有这样的课程:

和这样的课程:

创建 bar 的实例时是否调用了 foo 的构造函数?

因为当我尝试使用bar' m_Datas quadin时,bar它似乎未初始化,即使它在numbers[4]. :\

具体来说,这会崩溃:

任何帮助,将不胜感激。:)

0 投票
7 回答
4008 浏览

programming-languages - SIMD 编程语言

在过去的几年里,我做了很多 SIMD 编程,大部分时间我一直依赖编译器内部函数(例如用于 SSE 编程的函数)或编程汇编来获得真正漂亮的东西。然而,到目前为止,我几乎找不到任何内置支持 SIMD 的编程语言。

现在显然有一些着色器语言,如 HLSL、Cg 和 GLSL,它们对这类东西具有本机支持,但是,我正在寻找至少能够在没有自动矢量化的情况下编译为 SSE,但具有对矢量操作的内置支持的东西. 这样的语言存在吗?

这是一个(部分)Cg 着色器的例子,它做一个聚光灯,就语法而言,这可能是最接近我正在寻找的。

在这种语言中真正必须的东西是:

  • 内置调酒运算符
  • 矢量操作(点、交叉、归一化、饱和、反射等)
  • 支持自定义数据类型(结构)
  • 动态分支会很好(for循环,if语句)
0 投票
4 回答
1824 浏览

c - 对于简单的二进制减法,由于 SSE 的最大理论加速是多少?

在试图弄清楚我的代码的内部循环是否遇到了硬件设计障碍或对我的部分障碍缺乏理解。还有更多内容,但我能想到的最简单的问题如下:

如果我有以下代码:

在我完全控制代码(汇编、内在函数等)但无法控制架构以外的运行时环境(即它是一个多用户环境,所以我无法对操作系统内核如何为我的特定进程分配时间做任何事情)。

现在我看到我的代码速度提高了 3 倍,而我本以为使用 SSE 会给我带来比 3 倍加速所指示的更多的向量深度(大概 3 倍加速告诉我我有 4 倍的最大理论值)吞吐量)。(我尝试过让 deltx/delty/deltz 成为数组,以防编译器不够聪明而无法自动提升它们,但我仍然看到只有 3 倍的速度。)我正在使用英特尔 C 编译器用于矢量化的适当编译器标志,但显然没有内在函数。