问题标签 [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 回答
3203 浏览

c - 使用 SSE 内在函数将 4 个点积存储到 C 中的连续数组中的最有效方法

我正在使用 SSE 内在函数为 Intel x86 Nehalem 微架构优化一些代码。

我的程序的一部分计算 4 个点积,并将每个结果添加到数组的连续块中的先前值。进一步来说,

请注意,我将使用 4 个临时 xmm 寄存器来保存每个点积的结果。在每个 xmm 寄存器中,相对于其他临时 xmm 寄存器,结果被放入一个唯一的 32 位中,因此最终结果如下所示:

tmp0= R0-零-零-零

tmp1= 零-R1-零-零

tmp2= 零-零-R2-零

tmp3=零-零-零-R3

我将每个 tmp 变量中包含的值合并为一个 xmm 变量,方法是使用以下指令将它们相加:

最后,我将包含点积的所有 4 个结果的寄存器添加到数组的连续部分,以便数组的索引按点积递增,就像这样(C_0n 是数组中当前要更新的 4 个值; C_2 是指向这4个值的地址):

我想知道是否有一种不那么迂回、更有效的方法来获取点积的结果并将它们添加到数组的连续块中。这样,我在其中只有 1 个非零值的寄存器之间进行了 3 次加法。似乎应该有一种更有效的方法来解决这个问题。

我感谢所有帮助。谢谢你。

0 投票
3 回答
2469 浏览

c - 测试内置/内在

我有一些使用 gcc 内在函数的代码。我想包含代码以防内在缺失。我怎样才能做到这一点?

不起作用。

0 投票
2 回答
1794 浏览

asp.net-mvc-2 - 如何在 asp.net mvc 2 中使用 fakeiteasy 伪造用户登录以进行单元测试

我刚刚开始学习和使用 ASP.NET MVC 2,并且更多地参与了我的代码的单元测试。我的问题大致是如何通过在我的测试中传递凭据来模拟用户登录。

我正在使用 MSpec 并试图了解 fakeiteasy 以编写我的测试。到目前为止,我相信当未经身份验证的用户尝试访问页面时,我已经正确编写了一个测试(它通过了测试条件)。

到目前为止,一切都很好。但是,我想测试经过身份验证的用户何时点击家庭控制器的场景。我被困在如何模拟经过身份验证的用户上,欢迎提供任何帮助或建议。

TIA,

大卫

0 投票
2 回答
7172 浏览

c++ - 如何将 C++ 类转换为内在类型

基本 C++ 类问题:

我目前有简单的代码,看起来像这样:

我想要的是将“sType”转换为一个类,这样就不需要更改“return array[(int)s]”行。例如(伪代码)

谢谢你的帮助。

0 投票
4 回答
10715 浏览

c++ - 我什么时候应该使用 _mm_sfence _mm_lfence 和 _mm_mfence

我阅读了“英特尔架构的英特尔优化指南指南”。

但是,我仍然不知道应该何时使用

任何人都可以解释在编写多线程代码时何时应该使用这些?

0 投票
1 回答
300 浏览

memory - 澄清不同操作系统的原子内存访问

我目前正在将一个 Windows C++ 库作为一个爱好项目移植到 MacOS,作为一种学习体验。我偶然发现了一些使用 Win Interlocked* 函数的代码,因此我一直在尝试阅读这个主题。

在 SO 中阅读相关问题,我了解根据操作系统有不同的方法来执行这些操作。Windows 中的 Interlocked*,MacOS 中的 OSAtomic*,我还发现编译器对此具有内置(内在)操作。

在阅读gcc builtin atomic memory access之后,我想知道内在和 OSAtomic* 或 Interlocked* 之间有什么区别?我的意思是,如果我在 MacOS 上使用 gcc 时,我不能在 OSAtomic* 或 gcc 内置之间进行选择吗?如果我在 Windows 上使用 gcc 也是一样。

我还在 Windows Interlocked* 上读到了内联版本和内在版本。在内部或内联之间进行选择时要考虑什么?

一般来说,操作系统上有多个选项可以使用什么?还是这又是“取决于”?如果是这样,它取决于什么?

谢谢!

0 投票
0 回答
490 浏览

compiler-errors - CUDA FORTRAN 中的内在函数不起作用

我正在尝试使用 fortran 函数ISHFT(I, SHIFT)在 CUDA 内核中进行一些位移。这会将整数向右移动位ISHIFT

问题是如果我为 SHIFT 参数传递一个变量,则 ISHFT 在内核上不起作用。这是我的代码的内核部分:

I是一个设备整数,shift是一个传递给内核的参数cuda_bitshift,值为 1。

当我尝试编译这个(使用pgf90 test.cuf)时,它说:

但是,如果我将第二个参数替换为ishft1 而不是变量,它会起作用shift。此外,如果我可以使用带移位的算术,例如,I = I + shift效果很好。

这与不能在 CUDA 上运行的内在函数有关,还是我做错了什么?

0 投票
8 回答
14812 浏览

c++ - c++ SSE SIMD框架

有人知道开源 C++ x86 SIMD 内部函数库吗?

英特尔在他们的集成性能原语库中提供了我所需要的东西,但由于版权无处不在,我不能使用它。

编辑

我已经知道编译器提供的内在函数。我需要的是一个方便的界面来使用它们。

0 投票
1 回答
5208 浏览

gcc - gcc、simd 内在函数和快速数学概念

大家好:)
我正在尝试了解一些关于浮点、SIMD/数学内在函数和 gcc 的快速数学标志的概念。更具体地说,我在 x86 cpu 上使用 MinGW 和 gcc v4.5.0。

我已经搜索了一段时间,这就是我(认为我)目前所理解的:

当我在没有标志的情况下编译时,任何 fp 代码都将是标准的 x87,没有 simd 内在函数,并且 math.h 函数将从 msvcrt.dll 链接。

当我使用mfpmathmssen和/或march以便启用 mmx/sse/avx 代码时,gcc只有在我还指定一些优化标志(如Onftree-vectorize )时才实际使用 simd 指令。在这种情况下,内在函数由 gcc 自动选择,并且一些数学函数(我仍在谈论 math.h 上的标准数学函数)将成为内在函数或由内联代码优化,其他一些仍然来自 msvcrt。 dll。如果我不指定优化标志,这会改变吗?

当我使用特定的 simd 数据类型(可用作 gcc 扩展的那些,如v4siv8qi)时,我可以选择直接调用内部函数,或者再次将自动决策留给 gcc。如果我没有通过正确的标志启用 simd 指令,Gcc 仍然可以选择标准 x87 代码。同样,如果我不指定优化标志,这会发生任何变化吗?

如果我的任何陈述有误,请纠正我:p

现在的问题:

  1. 我是否必须包含 x86intrin.h 才能使用内在函数?
  2. 我是否必须链接 libm?
  3. 快速数学与任何事情有什么关系?我知道它放宽了 IEEE 标准,但是,具体来说,如何?使用其他标准功能?链接了其他一些库?或者只是在某处设置了几个标志,标准库的行为不同?

感谢任何愿意提供帮助的人:D

0 投票
1 回答
4326 浏览

c - 混合 SSE 整数/浮点 SIMD 指令时是否会降低性能

我最近经常以内部函数的形式使用 x86 SIMD 指令 (SSE1234)。我发现令人沮丧的是,SSE ISA 有几个简单的指令,它们仅适用于浮点数或整数,但理论上两者的性能应该相同。例如,浮点向量和双精度向量都有从地址(movhpsmovhpd)加载 128 位向量的高 64 位的指令,但对于整数向量没有这样的指令。

我的问题:

在整数向量上使用浮点指令时,是否有任何理由预期性能会受到影响,例如使用movhps将数据加载到整数向量?

我写了几个测试来检查,但我认为他们的结果不可信。编写一个正确的测试来探索这些事情的所有极端情况真的很困难,尤其是当指令调度最有可能涉及到这里时。

相关问题:

其他琐碎相似的事情也有几条基本相同的指令。例如,我可以对pororpsorpd进行按位或运算。谁能解释这些附加说明的目的是什么?我猜这可能与应用于每条指令的不同调度算法有关。