问题标签 [intrinsics]

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 回答
22748 浏览

arm - ARM Neon 内在函数有很好的参考吗?

ARM 参考手册没有详细介绍各个说明 ( http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348b/BABIIBBG.html )。有没有更详细一点的?

0 投票
1 回答
988 浏览

assembly - MMX 内部函数和 Microsoft C++ 的堆栈使用

我有一个内联汇编程序循环,它使用 MMX 指令从 int32 数据数组中累积添加元素。特别是,它利用 MMX 寄存器可以容纳 16 个 int32 的事实来并行计算 16 个不同的累积和。

我现在想将这段代码转换为 MMX 内在函数,但我担心我会遭受性能损失,因为无法明确指示编译器使用 8 个 MMX 寄存器来累积 16 个独立的和。

任何人都可以对此发表评论,并可能就如何将下面的代码转换为使用内在函数提出解决方案?

== 内联汇编器(仅循环内的一部分)==

  • esi 指向数据数组的开头
  • edx 为当前循环迭代提供数据数组中的偏移量
  • 排列数据阵列,使得 16 个独立和的元素被交错。
0 投票
1 回答
1629 浏览

g++ - 内在程序 (SSE) - g++ - 需要帮助

这是我第一次在 stackoverflow 上发布问题,所以请尝试忽略我在格式化问题/代码时可能犯的任何错误。但请向我指出同样的问题,这样我可能会更加小心。

我试图编写一些简单的内在函数例程来添加两个 128 位(包含 4 个浮点变量)数字。我在网上找到了一些代码,并试图让它在我的系统上运行。代码如下:

我使用的 g++ 参数是:

我得到的错误如下:

我花了很多时间尝试调试这些错误,搜索它们等等。我是内在学的完全菜鸟,因此可能忽略了一些重要的事情。

感谢您提供任何帮助,
谢谢,
Sriram。

0 投票
7 回答
20648 浏览

c++ - 如何使用没有运行时库的 VC++ 内部函数

我参与了您尝试生成尽可能小的二进制文件的挑战之一,因此我正在构建没有C 或 C++ 运行时库 (RTL) 的程序。我没有链接到 DLL 版本或静态版本。我什至没有#include头文件。我有这个工作正常。

一些 RTL 函数,比如memset(),可能很有用,所以我尝试添加自己的实现。它在 Debug 版本中运行良好(即使对于那些编译器生成隐式调用的地方memset())。但是在发布版本中,我收到一条错误消息,说我无法定义内在函数。您会看到,在 Release 版本中,内部函数已启用,并且memset()是内部函数。

我很想memset()在我的发布版本中使用内在函数,因为它可能是内联的,并且比我的实现更小、更快。但我似乎是第 22 条军规中的一员。如果我不定义memset(),则链接器会抱怨它未定义。如果我定义了它,编译器会抱怨我不能定义一个内在函数。

有谁知道定义、声明、#pragma编译器和链接器标志的正确组合,以在不增加 RTL 开销的情况下获得内在函数?

Visual Studio 2008、x86、Windows XP+。

为了使问题更具体一点:

我这样构建:

如果我使用 的实现进行编译memset(),则会出现编译器错误:

如果我在没有实现的情况下编译它memset(),我会得到一个链接器错误:

0 投票
1 回答
1654 浏览

g++ - g ++ SSE内在困境-内在“饱和”的价值

我编写了一个简单的程序来实现 SSE 内在函数,用于计算两个大(100000 或更多元素)向量的内积。该程序比较了两者的执行时间,内积计算传统方式和使用内在函数。一切正常,直到我在计算内积的语句之前插入(只是为了好玩)一个内循环。在我继续之前,这里是代码:

我使用以下 g++ 调用来构建它:

上面的每个循环,在这两个函数中,总共运行 N^2 次。但是,假设 arr1 和 arr2(两个浮点向量)加载的值为 2.5,则数组的长度为 100,000,两种情况下的结果都应为 6.25e+10。我得到的结果是:

结果:
result_Conventional = 6.25e+10
result_Intrinsics = 5.36871e+08

这还不是全部。从使用内在函数的函数返回的值似乎在上述值处“饱和”。我尝试为数组元素和不同大小设置其他值。但似乎数组内容的任何大于 1.0 的值和大于 1000 的任何大小都符合我们在上面看到的相同值。

最初,我认为这可能是因为 SSE 中的所有操作都是浮点数,但浮点数应该能够存储 e+08 数量级的数字。

我试图看看我可能出错的地方,但似乎无法弄清楚。我正在使用 g++ 版本:g++ (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2)。

非常欢迎对此提供任何帮助。

谢谢,
斯里拉姆。

0 投票
5 回答
1929 浏览

c++ - 装配/SSE 乘法帮助

我一直试图弄清楚如何在非常关键的几行代码中获得一些改进:

所有 a, b, c ... 都是浮点数。

我决定考虑使用 SSE,但似乎找不到任何改进,事实上它的速度是原来的两倍。我的 SSE 代码是:

我也尝试使用标准的内联汇编,但似乎我不能像使用 SSE 那样将寄存器与四个浮点打包在一起。

任何评论或帮助将不胜感激,我主要需要了解为什么我使用 SSE 的计算比串行 C++ 代码慢?

我在 Windows XP 上的 Visual Studio 2005 中编译,使用带有 HT 的 Pentium 4,如果这提供了任何额外的信息。

提前致谢!

0 投票
3 回答
511 浏览

c - x86-64 处理器的数据类型

这些数据类型有什么用?__m64,__m128,__m256?

0 投票
2 回答
814 浏览

c++ - 为什么我的数据似乎没有对齐?

我试图弄清楚如何最好地预先计​​算一些正弦和余弦值,将它们存储在对齐的块中,然后稍后将它们用于 SSE 计算:

在我的程序开始时,我创建了一个包含成员的对象:

然后我在构造函数中初始化该成员:



当我去使用m_sincos时,我遇到了三个问题:
-数据似乎没有对齐

- 变量似乎不正确

- 真正让我困惑的是,这使一切正常(但太慢了):

0 投票
2 回答
538 浏览

optimization - 快速格式转换开源库

有人可以告诉我开源格式转换库吗?针对 SSE、SSE2 进行了优化。

转换格式:I420、YUY2、RGB(16位、32位)。

我只找到了 VirtualDub Kasumi 库。

0 投票
1 回答
1437 浏览

gcc - ARM NEON 没有 xor gcc 内在函数

我找不到任何简单异或操作的内在函数。

见: http: //gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html

真的没有办法为此使用 NEON 指令吗?