问题标签 [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.
android - Android 构建系统、NEON 和非 NEON 构建
我想为 armv6 构建我的库,如果设备支持,我会在运行时启用一些霓虹灯代码。neon 代码使用 neon 内部函数,为了能够编译它,我必须启用 armeabi-v7a,但这会影响常规 c 代码(它在某些低端设备上会损坏)。
所以,如果 android 构建系统不是过度侵入,我就不必问问题,但我似乎没有办法为 armv6 编译一个文件,为 arm7-neon 编译另一个文件。
如果可行,有人可以提供任何线索吗?
编辑
在尝试回复和浪费互联网墨水之前,应该清楚这些是要点:
1)只制作一个库。
2)构建在 armv6 上运行的构建(pre neon 设备,例如 armeabi)。
3)允许此构建还包含 NEON 代码(可以基于运行时 cpu 检测执行;cpu 检测不在问题范围内)。
4) NEON 代码来自 ac/cpp 文件,使用 neon 内部函数编写。
忽略这些要求的任何部分都完全失去了问题的重点
iphone - 使用 NEON 优化 RGBA8888 到 RGB565 的转换
我正在尝试使用 NEON 矢量指令集优化 iOS 上的图像格式转换。我认为这会很好地映射到那个,因为它处理了一堆相似的数据。
不过,我的尝试并没有那么顺利,与幼稚的 c 实现相比,仅实现了边际加速:
iPad 2 上的 1 兆像素图像阵列:
格式为 [min avg max n=number of timer samples](以毫秒为单位)
C:[14.446 14.632 18.405 n=1000]ms
霓虹灯:[11.920 12.032 15.336 n=1000]ms
我对 NEON 实施的尝试如下:
代码通过 LLVM 3.0 编译成以下(.loc 和额外的标签被删除):
完整代码可在https://github.com/darknoon/DNImageConvert获得任何帮助,谢谢!
android - 将 0.0 分配给 NEON 寄存器时出现“立即超出范围错误”
如果我理解正确,因为 ARM 指令是 32 位长,它们只能保存这么多位立即数。我想要做的是vmov.f32 s0, #0.0
,我得到“ immediate out of range
”编译器错误。奇怪的是,当我使用一个立即值,比如#0.5
or #0.25
(都非常整齐地以二进制表示)时,我的代码会编译。当我尝试分配 的立即值时#0.1
,我得到“ garbage after following instruction
”错误,如果它试图用更多可以适合 ARM 指令的位来表示这些值,这是有道理的。这个#0.0
案例是我唯一得到“ immediate out of range
”的案例,所以我认为如果没有其他解释,这一定是一个错误。
有谁知道如何将立即值赋给#0.0
单个字浮点寄存器,而不必从其他地方进行转换?如果有充分的理由它不应该首先工作,请让我知道。我正在使用带有 Android NDK 构建工具的 GNU 汇编器。
更新:
vmov.f32 d0, #0.0
确实有效。它的意义越来越小。
更新 2:这也不起作用:vmov.s32 s0, #0
android - 需要的提示:使用 ffmpeg-neon 优化在 android 上进行 aac 编码
那里我正在尝试使用 ffmpeg 和 neon 对 libfaac/libx264 编码器进行一些性能改进。似乎成功编译了支持 neon 的 ffmpeg,并且视频编码性能确实有一些改进,但是当涉及到 aac 编码时,它几乎不能运行.. .我是否需要专门对 aac 进行一些代码更改?这是否与霓虹灯的 fft 东西有关?完全无能为力,任何提示将不胜感激!谢谢
android - 使用 ARM neon 将短数组转换为浮点数
我刚刚开始尝试使用 NEON 优化一些 android 代码。但是,我遇到了一些问题。主要问题是我真的不知道如何进行快速的 16 位浮点转换。
我看到它可以使用 vcvt.s32.f32 将多个 32 位整数转换为在 1 个 SIMD 指令中浮动。但是,如何将一组 4 个 S16 转换为 4 个 S32?我认为它与 VUZP 指令有关,但我无法弄清楚如何......
同样,我看到可以使用 VCVT.s16.f32 一次将 1 个 16 位转换为浮点数,但是虽然这很有帮助,但不能使用 SIMD 来做到这一点似乎非常浪费。
多年来,我在许多不同的平台上编写了汇编程序,但由于某种原因,我发现 ARM 文档完全无法理解。
因此,我们将不胜感激任何帮助。
还有什么方法可以获取 NEON 单元的吞吐量和延迟数据?
提前致谢!
android - 任何带有 NEON 指令集的 Android 平板电脑?
我对带有 NEON 说明的 Android 非官方 VLC 端口感兴趣:
即使具有 NEON 指令集的 Android 智能手机确实存在,我也无法发现任何支持 NEON 的 Android 平板电脑。在欧洲有没有这样的安卓表出售?
sse - 在 SSE 和 NEON Intrinsics-Shuffle 之间转换
我正在尝试将用 SSE3 内在函数编写的代码转换为 NEON SIMD,但由于 shuffle 功能而被卡住。我查看了GCC Intrinsic、ARM 手册和其他论坛,但未能找到解决方案。
代码:
虽然 vtbl1_u8(uint8x8_t,uint8x8_t) 指令创建了一个查找表,可用于将值分配给目标寄存器,但它仅在 64 位寄存器上运行。此外,shuffle 操作在开始时执行比较,必须在NEON 和我不知道如何有效地做到这一点。
r0 = (mask0 & 0x80) ? 0 : SELECT(a, mask0 & 0x0f) // SELECT(a,n) 从 a 中提取第 n 个 8 位参数。
r1 = (mask1 & 0x80) ?0 : 选择(a, mask1 & 0x0f)
...
我找不到一条指令,它首先检查掩码的高位,然后有效地选择掩码的低 4 位。我知道我们可以比较寄存器中的每个位,然后在指定条件时选择低 4 位,但是我希望能有效地做到这一点。希望有人可以提供帮助或提供参考。
非常感谢,
干杯!
android - iOS/Android ARM 设备最快的 FFT 库是什么?
iOS/Android ARM 设备最快的 FFT 库是什么?人们通常在 iOS/Android 平台上使用什么库?我猜 vDSP 是 iOS 上最常用的库。
编辑:我的代码位于http://anthonix.com/ffts并使用 BSD 许可证。它在 Android 和 iOS 上运行,比 libav、FFTW 和 vDSP 更快。
EDIT2:如果有人可以提供对 POWER7 机器(或其他机器)的访问权限,请给我发电子邮件。将不胜感激。
干杯,
assembly - ARM Cortex A8 基准测试:有人可以帮我理解这些数字吗?
我正致力于在 Android 上编写几个实时 DSP 算法,因此我决定直接在 Assembly 中对 ARM 进行编程,以尽可能优化所有内容并最大限度地简化数学运算。起初我得到的速度基准并没有多大意义,所以我开始阅读有关管道危险、双重问题能力等的内容。我仍然对我得到的一些数字感到困惑,所以我在这里发布它们,希望有人能解释我为什么得到我得到的东西。特别是,我感兴趣的是为什么 NEON 需要不同的时间来对不同的数据类型运行计算,即使它声称在一个周期内执行每个操作。我的发现如下。
我正在使用一个非常简单的循环进行基准测试,并运行了 2,000,000 次迭代。这是我的功能:
vadd
请注意指定为向量 add ( ) 和有符号 32 位 int ( )的计算操作和数据类型s32
。此操作在一定时间内完成(见下表)。根据此 ARM Cortex-A8 文档和后续页面,NEON 中的几乎所有基本算术运算都应在一个周期内完成,但这是我得到的:
我通过简单地替换上述循环中所有内容的操作和数据类型来完成它们。有没有理由vadd.u32
比 快两倍vadd.f32
并且比 快vmul.f32
两倍vmul.u32
?
干杯! = )
android - 带有霓虹灯优化的 FFMPEG
我正在使用 ffmpeg 在 android 上解码 h.264 视频文件。性能非常低。我想在 ffmpeg 中启用霓虹灯优化以提高性能。尽管在配置文件中添加了与 neon 相关的命令,但我没有看到性能提升。有人可以告诉我我在哪里出错了吗?我的配置文件如下所示。