如何在 android 上运行 opencl

如何在 android 上运行 opencl,第1张

第一步、确认

这是最关键一步,首先是检搜手查你的设备是否支持 opencl (如果不支持,是无法运行的);

第二步、找到opencl库

在你的设备中找到支持 opencl 的库(这个库通常位于 /vendor/lib/libOpenCL.so );

第三步、建立动态库世配嫌

把第二步中找到的库,pull出来,作为作为编译程序的动态库

第四步、引用 opencl 头文件

在 android 工程中正常编写 opencl 程序,引用 opencl 头文件。

备注:android 编译的时候直接链接上面的库,在 Java 端卖皮编译的时候用 System.load() 来载入该 opencl 库。

第五步、按照普通NDK程序运行

对于Ubuntu或其近亲(Lubuntu、Kubuntu、Mint等)编写OpenCL程序也不会太难。由于本例用的是AMD APP

SDK,因此需要AMD的GPU以及相关驱动。首先,去AMD官网下载GPU驱动——AMD

Catalyst。如果你用的是APU并且还有一块独立显卡的话,通过AMD Catalyst Control

Center可以选择使用哪个GPU。像我现在用的联想Z475笔记则蔽做本,搭载了AMD APU A6-3420M以及一块AMD Radeon HD

7400M,但是相比较而言,还是APU自带的6620G的GPU性能更强一些,因此我这边设置的是采用AMD Radeon HD 6620G。

在Linux下,并败AMD官方的GPU驱动是.run文件,只需使用sudo sh xxx.run即可安装。安装时采用默认安装即可。

然后去developer.amd.com开发者网站下载AMD APP

SDK。下载完成之后,将lib里面的动态库文件(xxx.so)取出来,并且把include里的头文件取出来。在你的OpenCL工程中把头文件的路

径以及动态加载库都设置好。在你用-l的时候,如果动孙衡态库文件后缀名为.so.1,那么得把文件名后缀.1去掉。因为-l只能连接.a、.lib、.so

等这些后缀的库文件。

从很多方面来看,CUDA和OpenCL的关系都和DirectX与OpenGL的关系很相像。如同DirectX和OpenGL一样,CUDA和OpenCL中,前者是配备完整工具包、针对单一供应商(NVIDIA)的成熟的开发平台,后者是一个开放的标准。

虽然两者抱着相同的目标:通用并行计算。但是CUDA仅仅能够在NVIDIA的GPU硬件上运行,而OpenCL的目标是面向任何一种Massively Parallel Processor,期望返前能够对不同种类的硬件给出一个相同的编程模型。由于这一根本区别,二者在很多方面都存在不同:

1)开发者友好程度。CUDA在这方面显然受更多开发者青睐。原因在于其统一的开发套件(CUDA Toolkit, NVIDIA GPU Computing SDK以及NSight等等)、非常丰富的库(cuFFT, cuBLAS, cuSPARSE, cuRAND, NPP, Thrust)以及NVCC(NVIDIA的CUDA编译器)所具备的PTX(一种SSA中间表示,为不同的NVIDIA GPU设备提供一套统一的静态ISA)代码生成、离线编译等更成熟的编译器特性。相比之下,使用OpenCL进行开发,稿世铅只有AMD对OpenCL的驱动相对成熟。

2)跨平台性和通用性。这一点上OpenCL占有很大优势(这也是很多National Laboratory使用OpenCL进行科学计算的最主要原因)。OpenCL支持包括ATI,NVIDIA,Intel,ARM在内的多类处理器,并能支持运行在CPU的并行代码,同时还独有Task-Parallel Execution Mode,能够更好的支持Heterogeneous Computing。这一点是仅仅支持数据级并行键好并仅能在NVIDIA众核处理器上运行的CUDA无法做到的。

3)市场占有率。作为一个开放标准,缺少背后公司的推动,OpenCL显然没有占据通用并行计算的主流市场。NVIDIA则凭借CUDA在科学计算、生物、金融等领域的推广牢牢把握着主流市场。再次想到OpenGL和DirectX的对比,不难发现公司推广的高效和非盈利机构/标准委员会的低效(抑或谨慎,想想C++0x)。

很多开发者都认为,由于目前独立显卡市场的萎缩、新一代处理器架构(AMD的Graphics Core Next (GCN)、Intel的Sandy Bridge以及Ivy Bridge)以及新的SIMD编程模型(Intel的ISPC等)的出现,未来的通用并行计算市场会有很多不确定因素,CUDA和OpenCL都不是终点,我期待未来会有更好的并行编程模型的出现(当然也包括CUDA和OpenCL,如果它们能够持续发展下去)。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/8163562.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存