0

我正在为 Intel Atom 处理器开发基于 Android x86 的框架。我已经实现了整个框架,但是我的代码的 SIMD 实现遇到了问题。当我运行基本的 C 代码时,它在模拟器和硬件上提供了相当可观的性能,但是,当我为代码启用内在函数选项时,没有实际收益,但性能损失可以忽略不计。我已经在 Intel i7 处理器上运行了我的代码,大约有 200% 的增益。我当然会考虑 PC 和平板电脑使用的核心频率和数量,但当我在 Android 框架上启用 SIMD 代码时仍然应该有一些收益。到目前为止我分析过的可能问题:

1) 本地 C 标志(任何人都可以为英特尔凌动处理器建议合适的 C 标志)。

2)是否建议使用.so文件而不是框架中的源代码。

3) 适用于 Intel Atom 的 NDK,我使用的是 4.8。

4) 优化级别应设置为 O2 或 O3。

如果有任何其他原因可能会阻碍性能,请告诉我。先感谢您。

4

2 回答 2

1

所有英特尔凌动平台都至少支持 SSSE3。

要了解编译器能够向量化的内容,您可以使用-ftree-vectorizer-verboseflag。

1)您可以编译代码-mtune=atom -mssse3 -mfpmath=sse以充分使用 SSSE3,包括 FP 数学。(在 32 位编译时,mfpmath 默认设置为 387,这会慢很多。)

为 x86 ABI 仅提供 SSSE3 代码会更安全。如果只需要支持特定平台,64bits Atom都支持SSE4.2,针对这些优化可以使用-mtune=slm -msse4.2 -mfpmath=sse

2) 我不确定我是否理解您的问题 2),但如果您使用的是预编译的 .so 文件,则在编译链接到它的代码时不会进一步优化。

3)最新的NDK通常是最好的,当前版本是r9d。GCC 4.8 相比默认的 GCC 4.6 也带来了很多性能优化,您可以通过NDK_TOOLCHAIN_VERSION:=4.8Application.mk中设置来使用它

4) -O3 相当安全,带来更多性能,你应该使用它。

于 2014-06-18T12:06:17.590 回答
0

英特尔发布了针对 Atom 上的 Android 的一般优化技巧,其中列出了许多可能会阻止您的 SIMD 代码按预期运行的因素。这可能是内存对齐问题——x86 需要 16 字节对齐以获得最佳结果。

于 2014-09-03T20:27:12.337 回答