久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android上使用OpenCL調(diào)用GPU加速|(zhì)GPU世界論壇

 quasiceo 2016-07-26


其實(shí)去年就已經(jīng)把Android上OpenCL的demo做出來了,但是由于種種原因一直沒有開源–
嗯現(xiàn)在就不吝嗇了~奉獻(xiàn)給大家~
后面在Android上還實(shí)現(xiàn)了很多種并行化的算法,,比如SHA-1、HDR,、K-means,、NL-means,、SRAD等等,會在近期整理好之后開源的。
原文發(fā)表在了異構(gòu)開發(fā)技術(shù)社區(qū)
整理成教程是隊(duì)友做的,十分感謝~
原博文地址
隊(duì)友的博客

下面是干貨:
Android平臺利用OpenCL框架實(shí)現(xiàn)并行開發(fā)初試

首先,,我們需要完成開發(fā)環(huán)境的搭建,。由于目標(biāo)是安卓平臺,我們需要安裝JAVA SDK,、Android SDK,、Eclipse以及ADT插件,這些工具的安裝教程很多,,這里就不再贅述了,,主要介紹Cygwin與NDK的環(huán)境搭建,。
第一步,從http://developer./tools/sdk/ndk/index.html查看和下載NDK工具的相關(guān)資料和安裝包,,我們在開發(fā)時使用的是NDK r8版本,,后續(xù)版本使用基本類似;可以參照NDK的文檔進(jìn)行深入的學(xué)習(xí)和測試,。
第二步,,從http://www. 下載Cygwin工具。由于NDK完成的工作是允許開發(fā)人員使用本地代碼(如C/C++)進(jìn)行Android APP功能開發(fā),,而在開發(fā)的過程中大多涉及到GCC環(huán)境下的編譯,、運(yùn)行,我們采用了Cygwin模擬Linux編譯環(huán)境,。我安裝的時候?yàn)榱朔奖憔桶阉械?文件都安裝了,,體積不大,1G左右,。
安裝完成后,,運(yùn)行”Cygwin.bat”,可以通過以下幾個方法檢驗(yàn)安裝是否成功,。(這里參照了以前的一些資料)
(1)cygcheck –c cygwin(正常顯示如圖)

(2)make –v,,返回make命令的版本信息

3)gcc -v,返回gcc命令的版本信息

第三步,,配置NDK的系統(tǒng)環(huán)境變量,為了避免編譯時警告,,可采用Linux風(fēng)格的路徑,,如我的NDK安裝路徑為:“D:\android-ndk-r8- windows \android-ndk-r8”,,在系統(tǒng)變量中名為“ndk”的變量路徑為:“/cygdrive/ android-ndk-r8-windows/ android-ndk-r8”
另外,,在Eclipse環(huán)境中可以安裝CDT和Sequoyah插件方便Android工程對Native的開發(fā)(可以省略每次修改代碼后都需要手動到代碼目錄進(jìn)行ndk-build的步驟),,可從http://www./cdt/downloads.php下載CDT的離線安裝包,,然后再Eclipse中點(diǎn)擊Help->Install New Software,點(diǎn)擊Archive確定安裝包所在位置,,然后進(jìn)行安裝,;Sequoyah可以直接在線安裝,,Location為:http://download./sequoyah/updates/2.0/
如圖:

(安裝時不要勾選“Group items by category”選項(xiàng),否則會出現(xiàn)列表為空的情況)。然后在Window->preferences->Android->本機(jī)開發(fā)選項(xiàng)中添加NDK的安裝路徑,。
其次,我會簡要的介紹OpenCL在Android開發(fā)過程中的一些設(shè)置和代碼。在Android平臺實(shí)現(xiàn)并行化的過程中,,我主要遵循下面的框圖進(jìn)行:

主要思路就是利用JAVA中的JNI接口,,結(jié)合Cygwin環(huán)境和NDK工具,將OpenCL實(shí)現(xiàn)的并行算法編譯為可以被Android工程調(diào)用的libSobelFilter.so(lib***.so均可),,然后在程序中調(diào)用該文件中的算法實(shí)現(xiàn)并行,。
在 Eclipse工程中jni文件夾下需要創(chuàng)建如下兩個文件:Android.mk以及Application.mk,相當(dāng)于該程序?qū)?yīng)的makefile 文件,,前者定義了一系列規(guī)則來制定編譯文件的目標(biāo)和文件編譯的順序,,后者定義了程序平臺版本和編譯器版本等內(nèi)容。具體實(shí)現(xiàn)為,,Android.mk文件:

Application.mk文件:

然后將OpenCL頭文件拷貝到j(luò)ni文件夾下,,供工程編譯時調(diào)用:

接下來需要我們按照OpenCL的框架流程進(jìn)行并行化的初始化和內(nèi)核入隊(duì)操作,主要包括:
1) 獲得平臺clGetPlatformIDs,;2)創(chuàng)建上下文clCreateContexFromType,;3)通過上下文得到設(shè)備信息 clGetContextInfo;4)為相應(yīng)設(shè)備創(chuàng)建commandQueue,;5)創(chuàng)建源程序,,生成kernel;6)分配buffer空間,設(shè)置程 序參數(shù),;7)執(zhí)行kernel,,clEnqueueNDRangeKernel;8)從buffer讀回數(shù)據(jù)clEnqueueReadBuffer,。
這里幾個操作時OpenCL的固定流程,,具體代碼很多,請大家參看下我的源碼,,這里就不寫了,。
這里我要指出的是由于移動平臺的特殊性,我們在程序中對幾個宏變量進(jìn)行了定義:

上述幾個Android平臺需要的文件在不同版本的安卓系統(tǒng)中有不同的位置,,上例
為Android 4.3版本的文件位置,,在之前版本中文件多數(shù)位于”/system/lib/”文件夾下。
程序的核函數(shù)如下:

此外,,該程序使用了OpenCV的相關(guān)函數(shù)完成圖像操作,,因此需要在對應(yīng)的安卓手機(jī)上安裝OpenCV-Manager來完成對OpenCV函數(shù)的調(diào)用工作(可從http:///下 載相關(guān)資料和安裝包)。同時,,為了程序編譯的方便,,建議將程序文件放置到OpenCV-android-sdk的samples目錄下,同時在 Eclipse的項(xiàng)目屬性Android選項(xiàng)中將"…\OpenCV-2.4.8-android-sdk\sdk\java"工程加入Android工 程中,,如圖所示:
在完成運(yùn)行環(huán)境的配置后,,在Cygwin中完成該項(xiàng)目的編譯和庫文件生成工作,如下圖所示:

可在項(xiàng)目工程目錄下的libs/armeabi-v7a下查看生成的.so文件(libSobelFilter.so):

至此,,Sobel濾波程序已經(jīng)編譯完成,。下面介紹一些運(yùn)行結(jié)果。



    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多