问题标签 [neon]
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.
iphone - iOS中数组的快速比较
我需要在一个更大的二维值数组周围移动一个小的二维值数组,并将大于较小数组中相应值的较大数组的任何值设置为较小数组的值。想想图像合成,有点像,但使用两个 2D 浮点数组。我需要尽可能快地做很多次。只是想知道是否有某种方法可以使用 NEON Assembly、Accelerate 框架或其他我没听说过的方法进行优化。有什么比双嵌套 for 循环来比较和替换值要快得多吗?例如,将值存储为一维数组而不是二维数组会更快吗?或者更快地访问跨行而不是每列的值?只是想挤出任何我能得到的额外速度,但不知道如何。
c - 使用霓虹灯改进的代码
我试图改进一些代码,但我做不到,所以我在这里寻求帮助,我也尝试过使用内在函数,但是如果你想使用内在函数,你需要使用 GCC 编译器,这个编译器编译的代码比 LLVM 慢, 那么所有的代码都会变慢,所以最好的选择是直接使用 asm. 我把我想改进的两个功能,还有霓虹灯中的代码,代码返回的是无意义的数字。我真的需要帮助,任何指向正确方向的点都可以帮助我很多。
我要改进的代码:
霓虹灯代码不起作用
非常感谢!!!
android - Android ARMv6/v7 和 VFP/NEON
我想了解更多 Android 手机上使用的 CPU。原因是我们正在构建 C 库,它具有我们可以设置的某些 CPU/数学处理器架构标志。
到目前为止,我们发现所有 Android 设备的 CPU 都是 ARM 设计的,或者是ARMv6(旧设备、低端设备、华为、中兴、小型 SE)或ARMv7(蜂窝平板电脑和所有更昂贵的设备,几乎都具有 WVGA 或更高的分辨率)我检查了大约 20 台设备,并且都有这种类型的处理器。那是对的吗?还有其他人吗?
现在谈到多媒体和数学运算,我认为有两个单元很重要——浮点运算的VFP和 SIMD- NEON。在测试了上面提到的一组设备后,我发现几乎所有设备都支持 VFP,而 NEON 不支持。对此有何评论?
我不知道 ARMv6 和 ARMv7 的区别到底是什么(除了一般的速度)。现在我们正在构建一个多媒体 C 库,它有几个用于构建的标志。我的问题是如何在一侧定位最多数量的设备,以及如何让更好设备的用户使用他们的硬件。我的建议是准备 3 个不同的版本:ARMv6/VFP、ARMv7/VFP 和 ARMv7/VFP/NEON。其他建议?
我认为ARMv6/VFP应该在所有配置上运行,除了缺少 VFP 的设备(例如旧的 HTC Wildfire)——但这些仍然不受支持。
这是一个好方法吗?欢迎任何意见。
问候, STeN
android - ARM 汇编程序 NEON - 提高性能
我已将部分算法从 C 转换为 ARM 汇编程序(使用 NEON 指令),但现在它比原始 C 代码慢 2 倍。我怎样才能提高性能?
目标是 ARM Cortex-A9。
该算法从数组中读取 64 位值。从这个值中提取一个字节,然后将其用作另一个表的查找值。这部分完成了大约 10 次,每个结果表值与其他值进行异或运算,并将最终结果写入另一个数组。
像这样的东西:
在我的方法中,我在 Neon Registers 中加载整个数组“a”,然后在 arm 寄存器中移动右字节,计算偏移量,然后从表中加载值:
其中 r2 保存查找表的基址。
这一步(除了开始时的加载)大约做了 100 次。为什么这么慢?
还有"vld"、"vldr"和"vldm"之间的区别是什么- 哪个是最快的。如何仅在 Neon 寄存器中执行偏移计算?谢谢你。
c - 使用 ARM neon 内部函数进行深度转换
我正试图围绕 NEON 内在函数展开思考,并认为我可以从一个示例开始并提出一些问题。
在这个实验中,我想将 32 位 RGB 转换为 16 位 BGR。将以下代码转换为使用 NEON 内在函数是一个好的开始?我在这里遇到的问题是 16 位与我能看到的任何内在内容都不匹配。有 16x4 16x8 等。但我只是没有运气围绕我需要如何处理这个问题。有小费吗?
这是我要转换的代码。
编辑:哦,出于某种原因,我正在考虑 16x3 位,但我们正在查看 5、6、5 = 16 位。我意识到我需要轮班。唔。
assembly - ARM Neon Assembler - 处理溢出的寄存器
我想做以下事情:我在 Neon D-Register (=64Bit) 中有 8 个值 (8 x 1Byte)。现在我需要将每个值 3 向左移动,但我不想丢失任何位。之后我需要将相同的 32Bit 值添加到向量中的每个值。
据我了解,如果溢出,我可以使用VQSHL指令将结果放入 2 个 D 寄存器中?我如何知道是否发生溢出并保证/强制我的所有数据都在新寄存器中?
您还可以帮我提供一些用于班次和添加部分的代码吗?
示例代码:
out0 = CONSTANT_32BIT + ( input0 << 3)
out1 = CONSTANT_32BIT + ( input1 << 3)
out_n = CONSTANT_32BIT + ( input_n << 3)
所以理论上我可以使用 Neon 寄存器并行执行 8 或 16 条这些指令?
如果这很重要,目标是 ARM Cortex-A9。
android - ARM Neon Assembler - 奇怪的管道问题
我正在尝试使用 Neon 指令提高用 ARM 汇编程序编写的一段代码的性能。
对于测试和计算,我使用这个计算器: http: //pulsar.webshaker.net/ccc/sample-706454b3
我注意到在“n.34-0 1c n0”行突然霓虹灯单元似乎必须等待(?)10个周期。这可能是什么原因,或者它只是计算器中的一个错误?
我还需要一些关于如何提高 ARM/Neon Assembler 性能的一般信息。
目标是 ARM Cortex-A9。对于编译,我使用带有内联汇编程序的最新 android-ndk。谢谢你。
arm - Arm Neon Intrinsics 与手工组装
https://web.archive.org/web/20170227190422/http://hilbert-space.de/?p=22
在这个过时的网站上,它表明手写 asm 会比内在函数带来更大的改进。我想知道即使在 2012 年,这是否是当前的事实。
那么使用 gnu 交叉编译器对内部函数的编译优化是否有所改进?
android - Android NDK 的 ARM NEON 调试
用于 ARM 的 NDK(Android 本机开发工具包)带有一个 gcc 和 GNU utils 工具链,包括一个旧的 GDB。但是,GDB 似乎无法显示 VFP 或 NEON SIMD 扩展中的寄存器内容——也就是说,在使用 NEON/VFP 指令调试程序时,只有一部分寄存器是可见的。我相信需要更新版本的 GDB 才能获得这种能力。使用的硬件支持 NEON。
我真的需要一个更新的 gdb,而 Google NDK 中的出厂 GDB 不能做到这一点吗?
是否有用于在 ARM Android 设备上调试 VFP/NEON 代码的预构建 GDB 或生成包含最新 GDB 的 NDK 工具链的程序,可以做到这一点?(对于 Windows/Linux 64 位主机)
c - NEON 上有类似“emms”的东西吗?
我们知道在 NEON 上,SIMD 寄存器q0
~q7
与浮点寄存器s0
~共享s31
。所以下面的代码有一个bug:
在 x86 中,emms 可以解决。但是我如何在 NEON 上做到这一点?我的临时解决方案是使用volatile
on vertStepLuma
。有没有更好的办法?谢谢!