android opencl sdk,在新的Android Studio中使用OpenCL

我正在尝试编写一个使用OpenCL 1.2的短应用程序(不用于分发,因此通用访问不是问题)来进行计算.但是,OpenCL在Android上给我带来了一些麻烦.我的计算机上有libopencl.so文件和AMD SDK的1.2头文件.问题是:我如何正确使用它们?

在gradle(最新版本)构建文件中我指定了这个,或者有人可以推荐一个好地方让我转向阅读这个?或者,理论上我需要理解什么才能让我自己弄清楚 – 正确链接到OpenCL库需要什么?

apply plugin: 'com.android.model.application'

model {

android {

compileSdkVersion = 21

buildToolsVersion ="22.0.1"

defaultConfig.with {

applicationId = "com.example.thing"

minSdkVersion.apiLevel = 14

targetSdkVersion.apiLevel = 14

}

}

/*

* native build settings

*/

android.ndk {

moduleName = "otherThing"

ldLibs += "log"

ldLibs += "android"

//cFlags "~/OpenCL1-2HeaderFiles"

}

android.buildTypes {

release {

isMinifyEnabled = false

proguardFiles += file('proguard-rules.txt')

}

}

android.productFlavors {

create("arm") {

ndk.abiFilters += "armeabi"

}

create("arm7") {

ndk.abiFilters += "armeabi-v7a"

}

create("arm8") {

ndk.abiFilters += "arm64-v8a"

}

create("x86") {

ndk.abiFilters += "x86"

}

create("x86-64") {

ndk.abiFilters += "x86_64"

}

create("mips") {

ndk.abiFilters += "mips"

}

create("mips-64") {

ndk.abiFilters += "mips64"

}

create("all")

}

}

谢谢

解决方法:

这是一个相当复杂的过程.我会尽量保持简洁.

>要在Android上运行您的应用程序,AMD的libopencl.so将无法运行. OpenCL库必须与您的设备兼容.对于Android armv7设备,您需要一个由芯片供应商提供的OpenCL库,并使用armv7工具链进行编译.要在Intel Atom设备上运行,您需要由芯片供应商提供的库,并针对x86_32 arch进行编译.

基本上,对于您的问题,您有两种方法:

[方法1]从您拥有的设备中获取libOpenCL.so或libGLES_mali.so或libPVROCL.so.上面的lib名称对应于Adreno,Mali和PowerVR GPU.使用这些库来编译代码.

[方法2]在您的本机代码中,使用dlopen打开OpenCL库,然后使用dlsym将clBlaBla API映射到您自己的名称.例如,您可以将clGetDeviceInfo映射到myCLGetDeviceInfo.然后,在您自己的本机代码中,您可以调用myClGetDeviceInfo.这种方式要求您知道设备上opencl库的路径.例如,在Adreno GPU上,位置为/system/vendor/lib/libOpenCL.so.有关详细信息,请阅读其他帖子. Does Android support OpenCL?

方法2更通用,更优雅.方法1更简单,如果您清楚地知道应用程序将运行哪些设备,则更快.例如,如果您清楚地知道您的应用程序仅用于测试adreno gpus,那么您只需从测试设备中获取libOpenCL.so即可.然后用它来链接你的应用.此链接显示了如何执行此操作,并提供了示例代码.你可以从那里开始.

在使用Android studio方面.我只能评论这个:如果您了解在Android上编译OpenCL应用程序的要求.使用Android studio进行编译或直接使用ndk-build进行编译没有区别.语法可以从一个映射到另一个.

根据我的个人经验,我写了很多Android.mk文件,我已经习惯了.所以,即使现在我使用Android Studio进行开发.您链接的文章中的方法实际上是正确的.

但是,我仍然像往常一样使用ndk-build来编译我的本机代码.这样,我可以完全控制那里发生的事情,我感觉更舒服.一旦我得到.so本机库,我把它放到src / main下的jniLibs文件夹中(你的文件夹结构可能不同). jniLibs是Android工作室将找到本机库的默认文件夹.您还可以在gradle脚本中指定自己的文件夹(在线大量文章,搜索gradle ndk).当然,所有上述操作都是通过脚本完成的(ndk-build,将库复制到某个文件夹).有了这些,我使用Android studio构建应用程序.通常,您不会同时调试JAVA代码并更改本机代码,因此执行上述操作完全可以并且非常舒适.如果要自动执行所有这些操作,可以请求gradle在构建应用程序之前启动您编写的ndk构建脚本.或者你可以让gradle以你喜欢的方式运行ndk-build命令(这实际上是由很多开发人员使用的).

希望这是有帮助的.欢迎任何进一步的讨论.

标签:android,android-gradle,android-studio,build-gradle,opencl

来源: https://codeday.me/bug/20190824/1709090.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值