问题标签 [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.
assembly - SSE 在哪里可以找到从 SSE 内在函数到汇编程序的翻译指南
我需要在 SSE2 汇编器中编写一些东西。
我所看到的只是内在函数。
我一直在徒劳地寻找从内在函数到汇编程序的转换表。
因为我不想玩猜谜游戏,有人可以给我一个链接,将这些可怕的内在函数翻译成漂亮的汇编。
我只需要 SSE/SSE2 整数指令。
请不要告诉我只使用 C(++) 我没有那个选项,我也不想。
我在哪里可以获得翻译指南?
编辑
感谢您的链接,但是我还没有复合内在函数的翻译,有人有链接吗?它真的会加快速度。:-)
c# - 在 C# 中使用编译指示内在(sqrt,pow)?
C++ 总结
在代码的预处理器部分中使用该#pragma intrinsic
命令将大大提高大多数数学函数调用的速度。
上面的代码允许将大多数数学函数调用直接发送到数学协处理器,而不是发送到函数堆栈。
问题
有没有办法在 C# 中做到这一点?除了重写内置函数来做类似的事情。例如,通常做二的幂,所以这是合适的,但这不是我要找的:
intrinsics - 来自 AVX _m256_unpack*_ps unpack 内在的意外结果
我正在尝试使用 AVX 内在解包指令_m256_unpacklo_ps
并_m256_unpackhi_ps
交错 16 个浮点值。我得到的结果很奇怪,要么是因为我不了解解包在 AVX 中应该如何工作,要么是因为某些东西没有按应有的方式工作。
我看到的是,例如,当我尝试将低阶浮点数从两个向量 v1 和 v2 解压缩到第三个向量 v3 中时,我看到以下内容:
如果 v1 是 [a b c d e f g h]
并且 v1 是[i j k l m n o p]
然后v3 = _m256_unpacklo_ps(v1, v2)
导致
[a i b j e m f n]
当我期望 v3 会给[a i b j c k d l]
我的期望不正确还是我使用不正确?还是有其他问题?
一些测试代码是:
我正在使用 gcc 4.5.2 进行编译。
提前感谢您的帮助!- 贾斯汀
android - 使用 NEON 内在函数除以浮点数
我当时正在处理四个像素的图像,这armv7
适用于Android应用程序。
我想将一个float32x4_t
向量除以另一个向量,但其中的数字从大约0.7
到变化,在3.85
我看来,唯一的除法方法是使用右移,但这是一个数字2^n
。
另外,我是新来的,所以欢迎任何建设性的帮助或评论。
例子:
如何使用 NEON 内在函数执行这些操作?
android - 与霓虹内在函数中的浮点数比较
我认为这是一个愚蠢的问题,但我尝试了一天没有运气来解决这个问题,所以这里是。
我有四个向量的寄存器(float32x4),我想对其中一些进行一些处理,另一个我想将其设置为 0。
例如c中的这个问题:
所以第一个不会处理,但另一个会,所以我需要一个寄存器,第一条车道我有 0,另一个有结果。
但我不知道如何在霓虹内在函数上做到这一点。
我知道有一个 vcltq_f32 但我尝试了这个但没有结果。
simd - SIMD 内在函数的参考手册/教程?
我正在研究使用这些来提高某些代码的性能,但是对于 *mmintrin.h 标头中定义的函数似乎很难找到好的文档,有人可以为我提供指向这些好的信息的指针吗?
编辑:对如何开始的非常基本的教程特别感兴趣。
assembly - 使用内在函数的 SSE2 程序集溢出
我是 SSE 和 SSE2 的新手,我写了一个小的 C 样本(分配两个计数器,一个增加另一个减少而不是增加两个),它按预期工作。我使用了内在函数和 Microsoft Visual Studio 10 C++ Express。作为第二步,我想了解引擎盖下发生了什么,但我现在很困惑。例如 for 循环中的赋值操作编译为:
我知道前两行获取 a_aligned 地址的组成部分,第三行将其复制到 xmm0 寄存器。但我不明白为什么它被复制回内存,而不是再次复制到 xmm0(而不是 a_ptr)。我认为 _mm_load_si128 内在函数应该将 a_aligned[i] 的 128 位复制到 xmm0,仅此而已。为什么会这样?我理论上错了吗?如果不是,我应该如何提示编译器?我的示例代码是否正确(从某种意义上说它没有不必要的东西)?这是我的完整示例代码:
macos - OSX Accelerate 框架上浮动选择的 4 路 SIMD 版本是什么?
使用 OSX 的Accelerate 框架,您可以访问 4 路 SIMD 功能,您可以在其中对向量浮点数、向量整数和向量布尔值进行操作。它为您提供 4 路除法,例如还有 4 路 sin、cos、tan 等。
对于 4 个浮点数的向量浮点数,框架提供vFloat。对于 4 个 bool 的向量 bool,框架提供vBool32。
我想要完成的是这行代码的 4 路 SIMD 版本:
例如,在 Cell 处理器上,您将使用内在的 'spu_sel(val1, val2, conditional)'。
我尝试将 4 向选择写为:
... LLVM 编译器不接受它作为“?” 运算符不接受 vBool32。此外,上述网页上没有名为“vsel”或“vself”或类似名称的运算符。在这个框架中是否有浮点选择可用?如果是这样,如何访问它?
sse - 使用 SSSE3 将 2 个未对齐的 64 位值加载到 sse 寄存器中的最佳方法是什么?
有 2 个指针指向要加载到 xmm 寄存器中的 2 个未对齐的 8 字节块。如果可能,使用内在函数。如果可能,不使用辅助寄存器。没有pinrd。(SSSE 核心 2)
c++ - 在哪里可以找到将 VC++ 内联汇编器转换为内在函数的脚本?
我正在将使用 SSE 命令的内联汇编程序移植到内在函数。为汇编指令找到合适的内在函数需要做很多工作。我在互联网上的某个地方看到了一个简化工作的 Python 脚本,但现在找不到。