【问题标题】:OpenMp compatibility with IOS/AndroidOpenMp 与 IOS/Android 的兼容性
【发布时间】:2015-02-05 07:29:26
【问题描述】:

我想要做什么:

我正在编写 C/c++ 代码以构建适用于所有平台的产品(IOS/Android/Windows(mobile/desktop)/Mac/Linux

到目前为止我做了什么:

是的,有很多在线链接讨论 OpenMp 与不同处理器和操作系统的兼容性,但很难从中得出合乎逻辑的结论,因为许多是较旧的文章或帖子,尤其是针对移动目标的。

参考:Link

根据我的分析,是的,openMp 可以与所有 desktop 操作系统(Windows/Mac/Linux)一起使用,并且几乎所有计算机都具有多核 处理器现在。所以根本不会有任何问题。

谁能帮我找到以下问题的答案?

  1. OpenMp 是否适用于苹果设备(Ipad/iphone)?如果是,是否有任何特定设备与 OpenMP 不兼容?似乎 OpenMP 在 IOS 中一直活跃到 Xcode 4.4。但是,在最新版本的 xcode 中,我看不到 OpenMP 的任何选项。例如:Link

  2. 我希望所有更高端的Android 手机都拥有超过 1 个内核和基于 ARM 的。根据我的信念,openMp 应该在 NDK 构建的帮助下与 Android 平台一起工作。我的理解正确吗?

【问题讨论】:

  • IOS有输入吗?

标签: android ios iphone openmp


【解决方案1】:

我无法回答 1. 因为我没有任何 ios 设备或开发环境。

关于 2. 是的,所有高端安卓设备都有超过 1 个内核。实际上,即使是只有 1 个内核的低端 Android 设备也很难找到。但并非所有 Android 设备都简单地基于 arm,还有双核和四核 x86 和 x86_64 设备以及 arm64-v8a 设备。

NDK 支持所有这些架构,从第 9 版开始也支持 openmp。使用 gcc(默认为编译器),并在 Android.mk Makefile 中将 -fopenmp 添加到 NDK 模块的 CFLAGS 和 LDFLAGS 中:

include $(CLEAR_VARS)
LOCAL_MODULE := yourmodule
LOCAL_SRC_FILES := yourmodule.c
LOCAL_CFLAGS += -fopenmp
LOCAL_LDFLAGS += -fopenmp
include $(BUILD_SHARED_LIBRARY)

【讨论】:

  • 是否可以使用 GCC(ubuntu) 构建 android 共享库(.so)?它会做交叉编译吗?
  • 不,为了进行交叉编译,您应该直接使用 ndk 工具链,而不是您自己的 gcc。他们将为所有受支持的平台进行正确的交叉编译和链接。关于使用 ndk(没有 glibc...)有很多细节,您可以从阅读安装包中的文档开始。
【解决方案2】:

xcode clang 不包含 openmp。但是你可以自己构建,使用-Xpreprocessor -fopenmp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2021-11-27
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    相关资源
    最近更新 更多