OpenMp与IOS/Android的兼容性

0yg35tkg  于 2022-11-19  发布在  iOS
关注(0)|答案(3)|浏览(212)

我想做的是

我正在编写C/c++代码,以构建适用于所有平台(IOS/Android/Windows(移动的/桌面)/Mac/Linux)的产品
"我都做了些什么"
是的,有许多在线链接谈论OpenMp与不同处理器和操作系统的兼容性,但很难从中得出合乎逻辑的结论,因为许多都是老文章或帖子,特别是针对移动的目标的。
参考编号:Link
根据我的分析,是的,openMp可以与所有桌面操作系统(Windows/Mac/Linux)一起工作,现在几乎所有的电脑都有多核处理器。所以根本不会有任何问题。

有人能帮我找到以下问题的答案吗?

1.OpenMP是否可与苹果设备(iPad/iPhone)兼容?如果是,是否有任何特定设备与OpenMP不兼容?似乎OpenMP在Xcode 4.4之前一直在IOS中处于活动状态。但是,在最新版本的xcode中,我无法看到任何OpenMP选项。例如:Link
1.我希望所有高端Android手机都有1个以上的内核和基于ARM的。根据我的信念,openMp应该在NDK构建的帮助下与Android平台一起工作。我的理解正确吗?

omjgkv6w

omjgkv6w1#

我不能回答1。因为我没有任何ios设备,也没有开发环境。
关于2.是的,所有高端安卓设备都有1个以上的内核。实际上,即使是低端安卓设备也很难找到只有1个内核的。但并不是所有安卓设备都是基于arm的,也有双核和四核x86和x86_64设备以及arm 64-v8 a设备。
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)
06odsfpq

06odsfpq2#

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

iq3niunx

iq3niunx3#

iOS中没有对OpenMP的官方支持,但通过-Xclang -fopenmp标志,我们可以在Apple的Clang中启用隐藏的OpenMP支持。
不幸的是,苹果没有提供库也,你可能会注意到brew install libomp提供给你一个libomp.a,但这是为macOS编译,你不能链接到iOS应用程序。
因此,我们需要自己编译它以用于iOS:

wget https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.6/openmp-14.0.6.src.tar.xz
tar -xf openmp-14.0.6.src.tar.xz
cd openmp-14.0.6.src

mkdir -p build
cmake -B build \
    -DCMAKE_TOOLCHAIN_FILE=ios.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./build/install \
    -DIOS_PLATFORM=OS -DENABLE_BITCODE=1 -DENABLE_ARC=0 -DENABLE_VISIBILITY=0 -DIOS_ARCH="arm64;arm64e" \
    -DPERL_EXECUTABLE=$(which perl) \
    -DLIBOMP_ENABLE_SHARED=OFF -DLIBOMP_OMPT_SUPPORT=OFF -DLIBOMP_USE_HWLOC=OFF
cmake --build build -j 3
cmake --build build --target install

上面的代码将创建一个静态库libomp.a
下面是我创建一个支持iOS和iPhone模拟器的OpenMP.xcframework的实现:https://github.com/flyinghead/flycast/pull/805/

相关问题