有关为 Android 设备构建 CLBlast 和 OpenCL 的一些问题

问题描述 投票:0回答:1

我在做什么

我正在使用 JNI 编写 Android 应用程序,并且我想使用 CLBlast 加速 C++ 代码。

背景

cmake .. \ -DCMAKE_SYSTEM_NAME=Android \ -DCMAKE_SYSTEM_VERSION=19 \ # Set the appropriate Android API level -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a \ # Set the appropriate device architecture (e.g. armeabi-v7a or arm64-v8a) -DCMAKE_ANDROID_NDK=$ANDROID_NDK_PATH \ # Assumes $ANDROID_NDK_PATH points to your NDK installation -DCMAKE_ANDROID_STL_TYPE=gnustl_static \ -DOPENCL_ROOT=/path/to/vendor/OpenCL/lib/folder/ # Should contain libOpenCL.so and CL/cl.h
我的问题

  • 问题1。如果我的 Android 应用程序是使用 CLBlast 和 OpenCL 构建的,但 Android 设备不支持 OpenCL(例如,Android 设备中没有 /system/vendor/libOpenCL.so
    )。我的应用程序能正常运行吗?
  • Q2。构建CLBlast需要OpenCL库,我应该使用静态库libOpenCL.a
    还是动态库
    libOpenCL.so
    ,有什么区别?
  • Q3。我也必须交叉编译 OpenCL 吗?是否取决于建筑类型,例如libOpenCL.a
    libOpenCL.so
android android-ndk opencl blast
1个回答
0
投票
Q1 - 答案取决于供应商的支持。取决于设备架构,它将是设备上的 /lib64 或 /lib 文件夹,但如果您在其中找不到任何 libOpenCL.so,则 Android 操作系统将无法使用它,因为系统不是用它构建的。您可以尝试直接使用应用程序传递它并在应用程序初始化期间加载它。但在这种情况下,这取决于供应商 GPU OpenCL 支持。您可以在这里查看旧答案

Android支持OpenCL吗?

Q2 - 您必须使用设备中的 .so 来编译 CLBLAST。在其他情况下(如果您的设备没有 libOpenCL.so),您必须从头开始为设备架构(例如 arm64-v8a 等)构建 libOpenCL.so,然后用它构建 CLBLAST。您也可以使用 .a 构建它,但它有一些缺点。一般答案 .a 与 .so

什么是 .a 和 .so 文件?

Q3 - 一般来说是的,但请考虑上述答案。

© www.soinside.com 2019 - 2024. All rights reserved.