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

assembly - 什么是开始学习组装的好地方?

我需要使用 SSE 指令学习汇编,并且需要 gcc 将 ASM 代码与 c 代码链接。

我不知道从哪里开始,谷歌也没有帮助。

0 投票
6 回答
45761 浏览

performance - 为什么 SSE scalar sqrt(x) 比 rsqrt(x) * x 慢?

我一直在分析我们在英特尔酷睿双核上的一些核心数学,在研究平方根的各种方法时,我注意到了一些奇怪的事情:使用 SSE 标量运算,取倒数平方根并将其相乘会更快获得 sqrt,而不是使用本机 sqrt 操作码!

我正在使用类似以下的循环对其进行测试:

我已经为 TestSqrtFunction 尝试了几个不同的主体,我有一些时间真的让我摸不着头脑。到目前为止,最糟糕的是使用本机 sqrt() 函数并让“智能”编译器“优化”。在 24ns/float 时,使用 x87 FPU 这非常糟糕:

我尝试的下一件事是使用内在函数强制编译器使用 SSE 的标量 sqrt 操作码:

这更好,为 11.9ns/float。我还尝试了Carmack 古怪的 Newton-Raphson 近似技术,它比硬件运行得更好,为 4.3ns/float,尽管误差为 2 10分之 1 (这对我的目的来说太多了)。

当我尝试使用 SSE 运算求平方根的倒数,然后使用乘法得到平方根时( x * 1/√x = √x ),这很糟糕。尽管这需要两个相关的操作,但它是迄今为止最快的解决方案,在 1.24ns/float 和精确到 2 -14

我的问题基本上是什么给了为什么 SSE 的内置硬件平方根操作码比从其他两个数学运算中合成它要慢?

我确信这确实是操作本身的成本,因为我已经验证:

  • 所有数据都适合缓存,并且访问是顺序的
  • 函数是内联的
  • 展开循环没有区别
  • 编译器标志设置为完全优化(我检查过,程序集很好)

编辑:stephentyrone 正确地指出,对长字符串的操作应该使用矢量化 SIMD 打包操作,例如rsqrtps——但这里的数组数据结构仅用于测试目的:我真正想要测量的是代码中使用的标量性能不能向量化。)

0 投票
1 回答
13542 浏览

c - SSE 寄存器返回,SSE 禁用

我处于以下情况:

  • 我正在为不允许 SSE 指令的内核编写代码
  • 我需要做浮点运算
  • 我正在为 x86_64 平台编译

这是一个说明问题的代码示例:

这是makefile中的相关行:

当我运行构建时,出现此错误:

(错误指向将 d 和 base_value 相乘的行)

知道我能做些什么来解决这个问题吗?删除 -mno-sse 不是一个选项,但似乎编译器应该能够生成非 sse 代码来进行乘法运算。

谢谢内森

0 投票
9 回答
4765 浏览

java - 数值算法中的 Java 性能

我对 Java 数值算法的性能很好奇,例如矩阵矩阵双精度乘法,使用最新的 JIT 机器,例如与手动调整的 SSE C++/汇编器或 Fortran 对应物相比。

我在网上看过,但大部分结果来自近 10 年前,我知道 Java 从那时起取得了很大进步。

如果您有使用 Java 进行数字密集型应用程序的经验,您可以分享您的经验。此外,Java 在循环相对较短且内存访问不是很均匀但仍在 L1 缓存范围内的内核中表现如何?如果这样的内核连续执行多次,JVM可以在运行时对其进行优化吗?

谢谢

0 投票
2 回答
1087 浏览

sse - SSE2:如何将 _m128 简化为一个单词

将 _m128 (4 个单词 abcd)减少为一个单词的最佳方法( sse2 )是什么?我想要每个 _m128 组件的低部分:

有没有内在函数?谢谢 !

0 投票
1 回答
1794 浏览

gcc - 基准 SSE 指令

我正在对一些SSE代码(将 4 个浮点数乘以 4 个浮点数)与做同样事情的传统 C 代码进行基准测试。我认为我的基准代码在某种程度上一定是不正确的,因为它似乎说非 SSE 代码比 SSE 快 2-3 倍。

有人可以告诉我下面的基准测试代码有什么问题吗?也许建议另一种方法来准确显示 SSE 和非 SSE 代码的速度。

0 投票
3 回答
9153 浏览

gcc - C - 如何使用 GCC SSE 向量扩展访问向量的元素

通常我使用以下类型处理 3D 矢量:

使用 smth. 初始化向量。像:

并使用 smth 访问它们。像:

现在我需要一个使用 SSE 指令的向量算术。我有以下代码:

GCC 支持这种方式。但是......首先,它给了我 0.00000 作为结果。其次,我无法访问此类向量的元素。我的问题是:如何访问此类向量的元素?我需要smth。比如 a[0] 访问 X 元素, a[1] 访问 Y 元素等。

PS:我使用以下代码编译此代码:

0 投票
1 回答
1174 浏览

gcc - 使用 SSE 指令进行快速图像处理?

我正在用 C 编写一个图形库,我想利用 SSE 指令来加速某些功能。我该怎么做呢?我正在使用 GCC 编译器,因此我可以依赖编译器内在函数。我还想知道是否应该更改存储图像数据的方式(目前我只是使用浮点数组)-我需要使用类型数组float __attribute__ ((vector_size (16)))吗?

编辑:我感兴趣的图像处理/处理类型包括仿射变换、几何和频域滤波(傅立叶分析)

任何关于我应该如何在 C 中使用 SSE 进行图像处理的参考或提示将不胜感激。

谢谢

0 投票
5 回答
8165 浏览

x86 - x87 相对于 SSE 的优势

我知道 x87 具有更高的内部精度,这可能是人们看到的它与 SSE 操作之间的最大区别。但我不得不怀疑,使用 x87 还有其他好处吗?我有-mfpmath=sse在任何项目中自动输入的习惯,我想知道我是否遗漏了 x87 FPU 提供的任何其他内容。

0 投票
8 回答
51368 浏览

c - 如何判断内存是否对齐?

我是使用 SSE/SSE2 指令优化代码的新手,直到现在我还没有走得太远。据我所知,一个常见的 SSE 优化函数如下所示:

但是,我如何正确确定内存ptr指向的位置是否按例如 16 字节对齐?我认为我必须包含非对齐内存的常规 C 代码路径,因为我无法确保传递给此函数的每个内存都将对齐。并且使用内在函数将数据从未对齐的内存加载到 SSE 寄存器似乎非常慢(甚至比常规 C 代码慢)。

先感谢您...