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

c++ - SSE2:双精度对数功能

我需要日志功能的开源(无许可证限制)实现,带有签名的东西

它在英特尔短向量数学库(ICC 的一部分)中可用,但 ICC 既不是免费的也不是开源的。我正在寻找仅使用内在函数的实现。

它应该使用特殊的有理函数逼近。我需要一些几乎与 cmath 日志一样准确的东西,比如 9-10 位十进制数字,但速度更快。

0 投票
4 回答
770 浏览

c - 如何使以下代码更快

上面提到的代码在我的程序中被多次调用(profiler 显示 98%)。

编辑:在内部循环中, res1[i + k] 值会为相同的 (i + k) 值加载多次。我在 while 循环中尝试了这个,我将所有 res1 值加载到 simd 寄存器(数组)中,并在最里面的 for 循环中使用数组元素来更新数组元素。完成两个 for 循环后,我将数组值存储回 res1、re2。但是计算时间随之增加。知道我哪里错了吗?这个想法似乎是正确的

欢迎任何使它更快的建议。

0 投票
4 回答
3855 浏览

c++ - 由于 SSE 中的内存对齐导致的分段错误

我正在研究面部检测,其中我将输入作为 .bmp 文件并检测面部并在面部上绘制一个矩形。

但是当我添加一个名为“cvDetect”的函数来检测人脸时,我遇到了一些分割错误,在下面的代码行中 -

在调试时我发现由于这些函数存在一些内存对齐问题。任何人都可以帮助解决这个问题,代码是 C++,我使用的是 Linux。

0 投票
1 回答
2590 浏览

c - 使用 SSE 对数组进行索引

假设我有一个数组:

和一个元素

包含 16 个字节,

我想有效地填充一个新__m128i元素

的值arr取决于 中的值x,例如:

实现这一点的命令本质上是从一组不连续的内存位置加载寄存器。我对曾经看过这样一个命令的文档有一种痛苦的模糊记忆,但现在找不到了。它存在吗?在此先感谢您的帮助。

0 投票
2 回答
386 浏览

c++ - 访问 mm1 寄存器部件

是否可以访问 mmx 寄存器中的单个字节,例如数组?我有这个代码:

我想将 mm1[1],mm1[2],mm1[3].... 放入 c++ 变量中,例如:

谢谢。

0 投票
3 回答
3832 浏览

c - 与 SSE 的 128 位哈希比较


在我当前的项目中,我必须比较 128 位值(实际上是 md5 哈希),我认为可以通过使用 SSE 指令来加速比较。我的问题是我无法找到关于 SSE 说明的好的文档;我正在寻找一个 128 位整数比较指令,让我知道一个散列是否更大、更小或等于另一个。这样的指令存在吗?

PS:目标机器是带有SSE2指令的x86_64服务器;我也对同一工作的 NEON 指令感兴趣。

0 投票
2 回答
1200 浏览

c - _mm_ 类型函数的等效 C 代码

什么是简单的等效 C 代码来克服 __ 等函数_mm_store_ps_mm_add_ps请通过具有等效 C 代码的示例指定任何函数。

为什么要使用这些功能?

0 投票
3 回答
3959 浏览

optimization - 改进 SSE (SSSE3) YUV 到 RGB 代码

我正在寻找优化我为将 YUV 转换为 RGB(平面和打包 YUV 函数)编写的一些 SSE 代码。

我目前正在使用 SSSE3,但如果有来自更高版本的 SSE 的有用功能,那没关系。

我主要对如何解决处理器停顿等问题感兴趣。

有人知道对 SSE 代码进行静态分析的任何工具吗?

0 投票
1 回答
4200 浏览

gcc - gcc 中的 SSE(SIMD 扩展)支持

我看到如下代码:

此代码构建良好,并且使用 gcc 可以正常工作(它是内置的 SSE / MMX 扩展和向量数据类型。此代码使用 4 个单浮点数进行 SIMD 向量加法。

我想详细了解此 typedef 行上的每个关键字/函数调用的含义和作用:

vector_size() 函数返回什么;

__attribute__关键字是什么

这是将浮点数据类型定义为 vfsf 类型的类型吗?

我理解剩下的部分。

谢谢,

-广告

0 投票
3 回答
1167 浏览

optimization - 近似 log10[x^k0 + k1]

问候。我正在尝试近似函数

Log10[x^k0 + k1],其中 0.21 < k0 < 21, 0 < k1 < ~2000,x 是整数 < 2^14。

k0 & k1 是常数。出于实际目的,您可以假设 k0 = 2.12,k1 = 2660。所需的精度为 5*10^-4 相对误差。

这个函数实际上与 Log[x] 相同,除了在 0 附近,它有很大不同。

我已经提出了一个 SIMD 实现,它比简单的查找表快约 1.15 倍,但如果可能的话,我想改进它,我认为由于缺乏有效的指令,这非常困难。

我的 SIMD 实现使用 16 位定点算法来评估 3 次多项式(我使用最小二乘拟合)。多项式对不同的输入范围使用不同的系数。有 8 个范围,范围 i 跨越 (64)2^i 到 (64)2^(i + 1)。这背后的原因是 Log[x] 的导数随 x 迅速下降,这意味着多项式将更准确地拟合它,因为多项式完全适合导数为 0 的函数超过一定阶数。

使用单个 _mm_shuffle_epi8() 可以非常有效地完成 SIMD 表查找。我使用 SSE 的 float 到 int 转换来获得用于定点逼近的指数和有效数字。我还对循环进行了软件流水线处理,以获得约 1.25 倍的加速,因此可能不太可能进一步优化代码。

我要问的是在更高级别是否有更有效的近似?例如:

  1. 这个函数是否可以分解为具有有限域的函数,如 log2((2^x) * significand) = x + log2(significand)

因此无需处理不同的范围(表查找)。我认为的主要问题是添加 k1 术语会杀死所有我们知道和喜爱的漂亮日志属性,使其成为不可能。或者是吗?

  1. 迭代法?不要这么认为,因为 log[x] 的牛顿法已经是一个复杂的表达式

  2. 利用相邻像素的局部性?- 如果 8 个输入的范围在相同的近似范围内,那么我可以查找单个系数,而不是为每个元素查找单独的系数。因此,我可以将其用作快速的常见情况,并在不是时使用较慢的通用代码路径。但就我的数据而言,在此属性保持 70% 的时间之前,范围需要为 ~2000,这似乎并没有使这种方法具有竞争力。

请给我一些意见,尤其是如果您是应用数学家,即使您说做不到。谢谢。