【问题标题】:Optimizing Applications on Android NDK在 Android NDK 上优化应用程序
【发布时间】:2011-09-13 17:54:49
【问题描述】:

我的 Android NDK 应用程序使用 C 语言中的单个开源库。当它工作时,该库对处理器的负载太大。问题:

  1. 如何理解库的哪些组件承受的压力最大?

  2. 有什么方法可以优化吗? LOCAL_ARM_MODE: = arm 大大提升性能?

【问题讨论】:

  • 你想使用什么开源库?如果你说出它的名字,我们大多可以提供更具体的信息。例如,如果它是一个视频编解码器,那么答案可能是由于大量数据和计算密集型工作,视频编码本质上需要大量 CPU 能力。
  • 我使用音频库。它包括所有其他编解码器,例如库 - libflac、libmp3lame、ffmpeg ...
  • 所以这个用于解码音频的库占用了大量的 CPU。如何减少CPU的消耗??
  • 您能否更具体地说明您打算使用音频库做什么:编码、解码、分析或转换音频?实时(与您收听音频样本一样快)还是快几倍?您知道您提到的哪个库是瓶颈吗?通常,此类库可能需要手动优化一些核心例程(可能在汇编程序中以利用特殊的多媒体指令)。如果可能,请尝试使用内置功能。 Android 原生支持多种音频格式(至少用于播放)。
  • 我只需要解码然后使用AudioTrack播放。可能解码会更快,但你可以以相同的速度。 Android 不能的优势,就是借助这些库。不知道什么库这么重,但是用Vav文件和Flac文件结果一样。必须有一些方法不用重写代码库,这对我来说很难吗??

标签: android c++ c optimization android-ndk


【解决方案1】:

有一些技巧可以轻松优化您的 Android 原生代码:

  • 使用 -O3 开关打开 3 级编译器优化
  • 关闭字符串别名-fno-strict-aliasing(或者你可以打开它 是否遵循 C 别名规则)
  • 开启浮点指令支持-mfpu=vfp -mfloat-abi=softfp

【讨论】:

  • 在哪里添加这些标志?
  • CPPFLAGS += -fno-strict-aliasing -mfpu=vfp -mfloat-abi=softfp
猜你喜欢
  • 2011-04-30
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 2011-08-03
相关资源
最近更新 更多