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

Open MP在Android多核編程中的研究與運用

2014-07-03 03:33:08王沖楊斌
單片機與嵌入式系統應用 2014年8期
關鍵詞:程序

王沖,楊斌

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

引 言

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

1 OpenMP的簡介及特點

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

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

Open MP使用分叉-聯接(Fork-Join)模型實現并行執行。程序從單線程或主線程開始,當進入并行區域時,主線程將創建一組并行的工作線程,位于并行模塊內的語句由工作線程并行執行。在并行區域末端,所有線程等待得到同步(聯接),如圖1所示。在這個階段完成之后開始串行執行過程。Open MP的主要特性包括并行循環和分區,以及可能通過動態調度加以執行的任務身份。并行區域中的數據可以被所有線程共享,或對每個線程保持私有屬性。因此它能幫助應用程序開發人員減小代碼所占的內存空間。

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

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

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

并行計算可分為任務并行和數據并行。任務并行是把多個獨立的工作分開同時執行,數據并行則把大的任務化解成若干個相同的子任務,處理起來比任務并行簡單。Open MP的特性使我們很容易實現數據的并行分解,使其獨立運行,C語言中的for循環最適合使用數據并行。

2 OpenMP在Android上的使用

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

圖2 OpenMP使用示意圖

2.1 引用OpenMP函數庫

由于最新的NDK已經添加了對Open MP函數庫的支持,所以只需要在Android.mk文件中添加Open MP的標志,然后使用編譯指導語句來并行化代碼。

編譯器將根據可用的CPU核數目設置線程數,自動對C/C++代碼并行化。

2.2 存在的問題

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

圖3 GOMP線程創建流程圖

通過對源代碼分析,發現是由于libgomp/libgomp.h中的gomp_thread函數返回NULL。

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

2.3 解決方案

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

①下載Android NDK源碼。

②修改libgomp.h源代碼。

③編譯。

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

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

3 應用與結果分析

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

3.1 均值濾波任務并行化

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

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

傳統的處理方法將會遍歷每個像素點,依次處理,而Open MP的for語句可以將這部分工作并行化。并行for語句語法:

#pragma omp[parallel]for[clauses]

主要實現代碼如下:

3.2 結果分析

將每個像素點的處理劃分成獨立的任務并行處理,得到使用Open MP和不使用Open MP的情況下所需要的時間,測試結果如表1所列。

表1 運行結果對比

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

結 語

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

[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]王如親.并行算術編碼在Android上的實現[J].計算機與數字工程,2013(9).

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

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

[7]Open MP Application Program Interface,2012.

猜你喜歡
程序
給Windows添加程序快速切換欄
電腦愛好者(2020年6期)2020-05-26 09:27:33
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
基于VMM的程序行為異常檢測
偵查實驗批準程序初探
我國刑事速裁程序的構建
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
恐怖犯罪刑事訴訟程序的完善
主站蜘蛛池模板: 久久无码高潮喷水| 亚洲色偷偷偷鲁综合| 亚洲swag精品自拍一区| 91精品人妻一区二区| 丰满人妻中出白浆| 色婷婷国产精品视频| 久久人人爽人人爽人人片aV东京热| 97国产精品视频自在拍| 狠狠亚洲婷婷综合色香| 91口爆吞精国产对白第三集| 91啪在线| 国产成人一区| 成人无码一区二区三区视频在线观看| 中文字幕乱码二三区免费| 成人午夜视频在线| 国产美女在线免费观看| a欧美在线| 色综合天天综合| 精品人妻AV区| a色毛片免费视频| a欧美在线| 亚洲啪啪网| 国产91麻豆免费观看| 91精品在线视频观看| 中文字幕天无码久久精品视频免费 | 日韩毛片免费视频| 最新精品久久精品| 国内精品91| 久久鸭综合久久国产| 国产无码高清视频不卡| 国产精品思思热在线| 久久天天躁狠狠躁夜夜躁| 欧美a在线视频| 99热国产这里只有精品9九| 日本高清成本人视频一区| 69精品在线观看| 欧美精品在线视频观看| 国产精品亚洲va在线观看| 国产地址二永久伊甸园| 国产拍揄自揄精品视频网站| 福利姬国产精品一区在线| 国产精品亚洲一区二区三区在线观看| 中文无码伦av中文字幕| 99一级毛片| 日本一区中文字幕最新在线| 国产成人一区| 伊伊人成亚洲综合人网7777 | 美美女高清毛片视频免费观看| 激情无码视频在线看| 亚洲第一国产综合| 久久成人国产精品免费软件 | 免费高清a毛片| 综合网天天| 一级片免费网站| 热99re99首页精品亚洲五月天| 全部无卡免费的毛片在线看| 亚洲欧美综合另类图片小说区| 538国产在线| 日本尹人综合香蕉在线观看| 精品国产免费第一区二区三区日韩| 91精品aⅴ无码中文字字幕蜜桃 | 成人国产免费| 免费三A级毛片视频| 人妻无码AⅤ中文字| 在线日韩日本国产亚洲| 久久一日本道色综合久久| 超清无码一区二区三区| 人妖无码第一页| 久久国产精品电影| 色悠久久综合| 动漫精品啪啪一区二区三区| 国产福利在线免费观看| 国产黄网站在线观看| 尤物特级无码毛片免费| 亚洲国产成熟视频在线多多| 国产成人精品18| 欧美在线免费| 午夜性爽视频男人的天堂| 亚洲资源站av无码网址| 在线精品亚洲国产| 亚洲精品成人福利在线电影| 久久96热在精品国产高清|