问题标签 [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 - ffmpeg neon 在 android 上编译 - 汇编错误
我正在尝试为具有霓虹灯支持的 android 编译 ffmpeg,但我遇到了以下汇编程序错误。请让我知道是否有人对此有任何线索?
android - 没有霓虹灯支持的 android 上 ffmpeg 解码的性能
我已经在 android 上编译了 ffmpeg 代码,并且能够在没有霓虹灯支持和 armv5te 的情况下播放视频。解码很好,视频可以播放,但问题是帧率真的很差。我的最高帧率为5fps,这太可怕了。
有没有人在没有 android 上的 ffmpeg 支持的情况下成功播放视频。或者有什么我真的想念的吗?
编辑:配置我通过运行得到它
arm - ARM 到 C 调用约定,NEON 寄存器保存
有一个类似的帖子涵盖了常规寄存器。NEON 寄存器呢?据我记得,寄存器的上半部分或下半部分必须在函数调用中保留。我在任何地方都找不到该信息,有人可以澄清一下吗?
谢谢
- r0-r3是参数和暂存寄存器;r0-r1也是结果寄存器
- r4-r8是被调用者保存寄存器
- r9可能是被调用者保存寄存器,也可能不是(在 AAPCS 的某些变体中,它是一个特殊寄存器)
- r10-r11是被调用者保存寄存器
- r12-r15是特殊寄存器
从AAPCS,§5.1.2.1 VFP 寄存器使用约定(VFP v2、v3 和高级 SIMD 扩展):
- s16–s31 (d8–d15, q4–q7)必须保留
- s0–s15 (d0–d7, q0–q3)和d16–d31 (q8–q15)不需要保留
arm - PLD对A9皮质没有影响
我正在使用以下程序来检查PLD
对性能的影响。但是,我无法找到使用和不PLD
使用我编写的 C 代码的性能差异。有什么我遗漏的或我需要添加的任何编译器选项吗?
arm - 使用内在函数进行霓虹灯优化
学习 ARM NEON 内在函数时,我正在计时一个我编写的函数以将数组中的元素加倍。使用内在函数的版本比函数的普通 C 版本需要更多时间。
没有霓虹灯:
使用霓虹灯:
想知道数组和向量之间的加载/存储操作是否会消耗更多时间,这抵消了并行加法的好处。
更新:更多信息以回应 Igor 的回复。
1.代码贴在这里:
plain.c
plain.s
neon.c
neon.s
从两个汇编列表中的第(标签)L7部分,我看到霓虹版本有更多的汇编指令。(因此更多时间采取?)
2.我在 arm-gcc 上使用 -mfpu=neon 编译,没有其他标志或优化。对于普通版本,根本没有编译器标志。
3.那是一个错字,SIZE 是指尺寸;两者都是一样的。
4,5.尝试了一个包含 4000 个元素的数组。我在函数调用前后使用 gettimeofday() 进行计时。NEON=230us,ordinary=155us。
6.是的,我在每种情况下都打印了元素。
7.这样做了,没有任何改善。
c++ - 为什么 ARM NEON 不比普通 C++ 快?
这是一个 C++ 代码:
这是霓虹灯版本:
测试功能:
我已经测试了这两种变体,这是一份报告:
我还测试了其他类型:
问题:为什么 32 位整数类型的 neon 速度较慢?
我为 Android NDK 使用了最新版本的 GCC。NEON 优化标志已打开。这是一个反汇编的 C++ 版本:
这是霓虹灯的反汇编版本:
以下是所有基准测试:
问题:为什么 32 位整数类型的 neon 速度较慢?
gcc - 为什么即使从未访问过堆栈,arm-gcc 也会减少/增加堆栈指针?
使用 arm-elf-gcc-4.5 -O3 -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=softfp 编译此程序时:
......这就是我得到的。注意标有@<<< 的两条无用指令
堆栈永远不会被访问,但堆栈指针会递减,然后以相同的量递增。为什么?
如果我修改原始代码以在序言的末尾和结尾的开头包含 asm 注释,如下所示:
然后我得到稍微不同的版本:
堆栈指针递减/递增显然是序言/结尾的一部分,即使不使用堆栈也会发生。这是为了符合某些标准,还是 gcc 优化错误?
编辑:编译器是 arm-elf-gcc-4.5 (GCC) 4.5.0,配置为:/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_cross_arm-elf-gcc/work/gcc-4.5.0/配置 --prefix=/opt/local --infodir=/opt/local/share/info --mandir=/opt/local/share/man --target=arm-elf --program-prefix=arm-elf- --program-suffix=-4.5 --without-included-gettext --enable-obsolete --with-newlib --disable-__cxa_atexit --enable-multilib --enable-biendian --disable-libgfortran --with-gxx -include-dir=/opt/local/arm-elf/include/c++/4.5.0/ --enable-languages=c,c++,objc --build=x86_64-apple-darwin10 --enable-fpu
编辑:我设法使用以下 C 源代码查明问题。仅当使用向量类型的数组作为临时对象时才会发生这种情况,例如声明为的 float32x4x2_t struct { float32x4_t val[2]; }
,即使这些临时对象是寄存器。我相信这是一个错误,所以我报告了它。
assembly - 将 NEON 组件与非向量函数混合
我想我找到了我的问题的答案。VFP 有一个“fmacs”指令,它可以完成在 NEON/VFP 寄存器上进行标量计算的技巧。
我对 NEON 或 ARM 编程非常陌生...
我想将上三角矩阵加载到 NEON 寄存器中,并使用单精度积分(累积)向量的外积。基本思想是 A += x'*x 其中 A 是上三角矩阵。一些操作可以通过在四或双寄存器上使用 NEON 指令“vmla.f32”对操作进行矢量化来完成。但是,有时我一次只需要对一个单精度寄存器 1 进行操作,即不需要对 2 个或 4 个单精度寄存器进行操作。在下面的示例中(不起作用),我对这条线感兴趣
我想使用 NEON 寄存器来执行一个单精度操作。
代码片段:
assembly - NEON ASM 代码运行速度比 C 代码慢得多?
我正在尝试使用 NEON 针对 iPhone ARM 上的特定问题实施高斯牛顿优化。下面的第一个函数是我原来的 C 函数。第二个是我写的NEON asm代码。我每一个都运行了 100,000 次,NEON 版本比 C 版本要长 7-8 倍。我认为加载(vld1.32)是大部分时间。我通过删除一些指令进行了实验。
有人对这个问题有任何见解吗?谢谢!
iphone - 从视频中读取帧时如何转换为 16 位像素格式以在 OpenGL ES 2.0 中使用(AV 基金会)
我正在使用OpenGL对 1280x720 quicktime 视频的每一帧进行一些图像处理。然后读回这些帧,并从中创建一个新视频。问题是需要与OpenGL之间传输的大量数据(使用glTexImage2D和glReadPixels),导致过程非常缓慢。
目前,我使用kCVPixelFormatType_32BGRA作为AVAssetReaderTrackOutput实例的像素格式。为了减少时间消耗,我想改用 16 位像素格式。不幸的是,在调用AVAssetReaderTrackOutput 的 copyNextSampleBuffer方法时,更改为这种格式会给我空帧。有没有人有在 AV Foundation 中使用 16 位像素格式的经验?
如果我不能让 AV Foundation 为我更改格式,我想我可以“手动”从 32 位转换为 16 位,也许使用 NEON 指令?任何帮助表示赞赏。