999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Open MP在Android多核編程中的研究與運(yùn)用

2014-07-03 03:33:08王沖楊斌
關(guān)鍵詞:程序

王沖,楊斌

(西南交通大學(xué)信息 科學(xué)與技術(shù)學(xué)院,成都610031)

引 言

雖然多核平臺(tái)具有很大的潛能,但由于多核軟件開發(fā)工具和標(biāo)準(zhǔn)的缺乏減緩了它們的全面普及。編程人員要想從這些系統(tǒng)中獲得更大的好處,可能還需要編寫底層代碼、調(diào)度工作單元,并管理內(nèi)核之間的同步。作為在桌面系統(tǒng)上興起的技術(shù),Open MP在PC平臺(tái)上已經(jīng)非常成熟,但是在嵌入式領(lǐng)域,尤其是Android平臺(tái)的開發(fā),大多還停留在傳統(tǒng)的單核模式。雖然Google增加了對(duì)Open MP的支持,但是在使用上還存在一些問題,如無法在用戶線程中使用Open MP,本文對(duì)這個(gè)問題進(jìn)行了研究并提出解決方案,最后通過測(cè)試程序進(jìn)行驗(yàn)證。

1 OpenMP的簡(jiǎn)介及特點(diǎn)

Open MP是由Open MP Architecture Review Board牽頭提出的,已被廣泛接受,是用于共享內(nèi)存并行系統(tǒng)的多線程程序設(shè)計(jì)的一套指導(dǎo)性注釋語句(Compiler Directive)。Open MP支持的編程語言包括C/C++和Fortran;而支持Open MP的編譯器包括Intel Compiler和Sun Studio,以及開放源碼的Open64和GCC編譯器。Open MP提供了對(duì)并行算法的高層抽象描述,程序員可以通過在源代碼中加入專用的pragma來指明自己的意圖,然后編譯器自動(dòng)將程序進(jìn)行并行化,并在必要的地方加入同步互斥以及通信。當(dāng)選擇忽略這些pragma,或者編譯器不支持Open MP時(shí),程序又可退化為通常的程序(一般為串行),代碼仍然可以正常運(yùn)作,只是不能利用多線程來加速程序執(zhí)行。

Open MP提供的這種對(duì)于并行描述的高層抽象降低了并行編程的難度和復(fù)雜度,這樣程序員可以把更多的精力投入到并行算法本身,而非其具體實(shí)現(xiàn)細(xì)節(jié)。對(duì)基于數(shù)據(jù)分集的多線程程序設(shè)計(jì),Open MP是一個(gè)很好的選擇。同時(shí),使用Open MP也提供了更強(qiáng)的靈活性,可以較容易地適應(yīng)不同的并行系統(tǒng)配置。線程粒度和負(fù)載平衡等是傳統(tǒng)多線程程序設(shè)計(jì)中的難題,但在Open MP中,Open MP庫從程序員手中接管了這兩方面的部分工作。

Open MP使用分叉-聯(lián)接(Fork-Join)模型實(shí)現(xiàn)并行執(zhí)行。程序從單線程或主線程開始,當(dāng)進(jìn)入并行區(qū)域時(shí),主線程將創(chuàng)建一組并行的工作線程,位于并行模塊內(nèi)的語句由工作線程并行執(zhí)行。在并行區(qū)域末端,所有線程等待得到同步(聯(lián)接),如圖1所示。在這個(gè)階段完成之后開始串行執(zhí)行過程。Open MP的主要特性包括并行循環(huán)和分區(qū),以及可能通過動(dòng)態(tài)調(diào)度加以執(zhí)行的任務(wù)身份。并行區(qū)域中的數(shù)據(jù)可以被所有線程共享,或?qū)γ總€(gè)線程保持私有屬性。因此它能幫助應(yīng)用程序開發(fā)人員減小代碼所占的內(nèi)存空間。

圖1 分叉-聯(lián)接(Fork-Join)模型

Open MP中最主要的是編譯指導(dǎo)語句,一條編譯指導(dǎo)語句由directive(命令,也叫指令)和clause list(子句列表)組成。在C/C++中,Open MP編譯指導(dǎo)語句的使用格式為:

#pragma omp<directive> [clause[[,]clause]...]

并行計(jì)算可分為任務(wù)并行和數(shù)據(jù)并行。任務(wù)并行是把多個(gè)獨(dú)立的工作分開同時(shí)執(zhí)行,數(shù)據(jù)并行則把大的任務(wù)化解成若干個(gè)相同的子任務(wù),處理起來比任務(wù)并行簡(jiǎn)單。Open MP的特性使我們很容易實(shí)現(xiàn)數(shù)據(jù)的并行分解,使其獨(dú)立運(yùn)行,C語言中的for循環(huán)最適合使用數(shù)據(jù)并行。

2 OpenMP在Android上的使用

JNI(Java Native Interface)是Java本地調(diào)用接口,它使得運(yùn)行于Android平臺(tái)的Java程序可以使用C、C++甚至匯編語言編寫的動(dòng)態(tài)鏈接庫。在需要頻繁訪問內(nèi)存或復(fù)雜計(jì)算的情況下,使用C動(dòng)態(tài)鏈接庫比在Android平臺(tái)上使用Java語言實(shí)現(xiàn)相同功能更具有效率。NDK(N-ative Development Kit)提供了一系列的工具,可以生成ARM二進(jìn)制碼的動(dòng)態(tài)庫,并且能自動(dòng)地將生成的動(dòng)態(tài)庫和Java應(yīng)用程序一起打包成Android系統(tǒng)可以直接安裝的apk安裝包,即NDK可以將包含JNI接口函數(shù)的C源程序文件編譯生成動(dòng)態(tài)庫,供Android應(yīng)用程序調(diào)用,提高了對(duì)現(xiàn)有代碼的重用性,而加快了開發(fā)進(jìn)度。由于Open MP不支持Java語言,所以使用Open MP就需要用到Android NDK。NDK允許開發(fā)者通過JNI將開發(fā)C(或C++)的動(dòng)態(tài)庫嵌入到Java程序中,并能自動(dòng)將so和Java應(yīng)用一起打包成apk,JNI構(gòu)成了Java和C/C++互相溝通的橋梁。Open MP使用示意圖如圖2所示。

圖2 OpenMP使用示意圖

2.1 引用OpenMP函數(shù)庫

由于最新的NDK已經(jīng)添加了對(duì)Open MP函數(shù)庫的支持,所以只需要在Android.mk文件中添加Open MP的標(biāo)志,然后使用編譯指導(dǎo)語句來并行化代碼。

編譯器將根據(jù)可用的CPU核數(shù)目設(shè)置線程數(shù),自動(dòng)對(duì)C/C++代碼并行化。

2.2 存在的問題

經(jīng)過跟蹤測(cè)試,當(dāng)前的NDK版本僅支持在主線程中使用Open MP(在用戶線程中使用Open Mp將會(huì)導(dǎo)致程序崩潰),但是如果僅在主線程中處理數(shù)據(jù),無法達(dá)到UI與數(shù)據(jù)分離的目的,在處理一些耗時(shí)操作時(shí)將大大影響用戶體驗(yàn),也失去了并行的意義。GOMP線程創(chuàng)建流程圖如圖3所示。

圖3 GOMP線程創(chuàng)建流程圖

通過對(duì)源代碼分析,發(fā)現(xiàn)是由于libgomp/libgomp.h中的gomp_thread函數(shù)返回NULL。

進(jìn)一步分析,在GOMP(GCC標(biāo)準(zhǔn)下的Open MP)中,若使用了TLS(線程局部存儲(chǔ)),則設(shè)置HAVE_TLS標(biāo)志,并會(huì)產(chǎn)生一個(gè)全局變量gomp_tls_data跟蹤每個(gè)線程的狀態(tài),否則將通過pthread_setspecific函數(shù)來管理線程特有的數(shù)據(jù)。由于Android中用戶線程不支持TLS,所以只能通過pthread_setspecific函數(shù)來管理線程特有的數(shù)據(jù),當(dāng) GOMP創(chuàng)建線程時(shí),libgomp/team.c中的gomp_thread_start函數(shù)將設(shè)置線程特有的數(shù)據(jù),創(chuàng)建獨(dú)立線程(用戶線程)時(shí),線程特有的數(shù)據(jù)沒有設(shè)置,從而gomp_thread函數(shù)返回NULL,導(dǎo)致程序崩潰。因此,必須在調(diào)用gomp_thread時(shí)初始化線程特有數(shù)據(jù)。

2.3 解決方案

由于修改了源代碼,所以需要對(duì)NDK的交叉編譯工具鏈進(jìn)行重新編譯,方法如下:

①下載Android NDK源碼。

②修改libgomp.h源代碼。

③編譯。

# ./build/tools/build-gcc.sh--verbose$(pwd)/src$(pwd)arm-linux-androideabi-4.8

④將生成的libgomp.a文件拷貝到NDK的安裝目錄替換。

3 應(yīng)用與結(jié)果分析

完成了對(duì)NDK的修改,將對(duì)Open MP在Android平臺(tái)上的性能進(jìn)行測(cè)試。本次測(cè)試分別使用單核、雙核、4核的Android設(shè)備對(duì)800×600的灰度圖像進(jìn)行3×3的均值濾波。

3.1 均值濾波任務(wù)并行化

均值濾波是典型的線性濾波算法,它是指在圖像上對(duì)目標(biāo)像素f(x,y)給定一個(gè)模板,該模板包括了其周圍的臨近像素(以目標(biāo)像素為中心的周圍m個(gè)像素,構(gòu)成一個(gè)濾波模板,即去掉目標(biāo)像素本身)。再用模板中的全體像素的平均值g(x,y)來代替原來像素值。

g(x,y)=1/m ∑f(x,y)

傳統(tǒng)的處理方法將會(huì)遍歷每個(gè)像素點(diǎn),依次處理,而Open MP的for語句可以將這部分工作并行化。并行for語句語法:

#pragma omp[parallel]for[clauses]

主要實(shí)現(xiàn)代碼如下:

3.2 結(jié)果分析

將每個(gè)像素點(diǎn)的處理劃分成獨(dú)立的任務(wù)并行處理,得到使用Open MP和不使用Open MP的情況下所需要的時(shí)間,測(cè)試結(jié)果如表1所列。

表1 運(yùn)行結(jié)果對(duì)比

從表1中可以看出,隨著CPU內(nèi)核數(shù)目的增加,Open MP對(duì)性能的提升也更為顯著,在4核設(shè)備上使用Open MP的運(yùn)行時(shí)間接近不使用所需時(shí)間的四分之一。

結(jié) 語

雖然Open MP在Android上的運(yùn)用還不成熟,但是在Android軟硬件快速發(fā)展的今天,其憑借易入門、良好的可移植性會(huì)在將來得到廣泛應(yīng)用。本文對(duì)Open MP在Android上進(jìn)行多核編程進(jìn)行研究,解決了用戶無法再創(chuàng)建的線程使用Open MP的問題,并通過測(cè)試證明Open MP能夠顯著提高多核設(shè)備的性能。

[1]Open MP architecture Review Board.Open MP Application Program Interface Version 4.0,2012.

[2]Keith Obenschain.Open MP support in NDK[EB/OL].[2014-03].https://groups.google.com/d/topic/androidndk/p Ufqx URg Nb Q.

[3]Sylvain Ratabouil.Android NDK beginner's Guide[M].Birmingham:PACKT Publishing,2012.

[4]王如親.并行算術(shù)編碼在Android上的實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2013(9).

[5]許曉寧.Java Native Interface應(yīng)用研究[J].計(jì)算機(jī)科學(xué),2006,33(10):291-292.

[6]王科俊,熊新炎,任楨.高效均值濾波算法[J].計(jì)算機(jī)應(yīng)用研究,2010(2).

[7]Open MP Application Program Interface,2012.

猜你喜歡
程序
給Windows添加程序快速切換欄
電腦愛好者(2020年6期)2020-05-26 09:27:33
試論我國未決羈押程序的立法完善
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動(dòng)“離婚”程序程序
基于VMM的程序行為異常檢測(cè)
偵查實(shí)驗(yàn)批準(zhǔn)程序初探
我國刑事速裁程序的構(gòu)建
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
恐怖犯罪刑事訴訟程序的完善
主站蜘蛛池模板: 日韩精品成人在线| 亚洲欧美日韩综合二区三区| 免费A级毛片无码无遮挡| 92午夜福利影院一区二区三区| 91尤物国产尤物福利在线| 中文字幕 91| 亚洲伊人久久精品影院| av在线无码浏览| 在线精品亚洲一区二区古装| 国产无码制服丝袜| 美女裸体18禁网站| 国产精品久久久久无码网站| 91欧美在线| 久草视频一区| 欧美国产精品不卡在线观看| a毛片基地免费大全| 色成人亚洲| 欧美日韩亚洲综合在线观看| 欧洲日本亚洲中文字幕| jizz亚洲高清在线观看| 国产成人久久777777| 精品福利视频网| 久久精品日日躁夜夜躁欧美| 1024你懂的国产精品| 国产成人高清精品免费软件| 国产AV无码专区亚洲A∨毛片| 综合天天色| 国产精品99在线观看| 欧美日韩一区二区在线免费观看| 精品自拍视频在线观看| 精品1区2区3区| 久久精品最新免费国产成人| 日本不卡视频在线| 日韩性网站| 国产精品成人不卡在线观看| 国产噜噜噜| 国产成人夜色91| 亚洲第一成年免费网站| 日韩精品亚洲一区中文字幕| 亚洲无码高清一区二区| 久久夜夜视频| 国产粉嫩粉嫩的18在线播放91| 日本午夜影院| 四虎影院国产| 国产精品免费p区| 精品丝袜美腿国产一区| 亚洲全网成人资源在线观看| 乱人伦99久久| 亚洲天堂网在线播放| 久久99国产乱子伦精品免| 91精品最新国内在线播放| 中国国产A一级毛片| 亚洲国产高清精品线久久| 一级毛片免费观看不卡视频| 日韩精品一区二区三区免费在线观看| 中文字幕自拍偷拍| 国产成人精品视频一区二区电影| 免费看a毛片| 日日摸夜夜爽无码| 午夜久久影院| 国产成人亚洲欧美激情| 22sihu国产精品视频影视资讯| 日韩一级二级三级| 国产凹凸视频在线观看| 99热这里只有精品5| 国产熟睡乱子伦视频网站| 免费在线a视频| 人妻丰满熟妇av五码区| 亚洲午夜综合网| 999国内精品视频免费| 狠狠综合久久久久综| 亚洲最大在线观看| h视频在线观看网站| 国产人碰人摸人爱免费视频| 人妻21p大胆| 欧美日韩在线亚洲国产人| 国产在线观看一区精品| 亚卅精品无码久久毛片乌克兰| 亚洲成综合人影院在院播放| 国产无人区一区二区三区| 91亚洲视频下载| 国产理论精品|