matlab中如何調用gpu進行并行計算_極致安卓-Termux/Aid learning開啟WebGL手機GPU并行計算...

d00bcbc1151cb6be9c0e70df87a17708.png

在我的之前的測評中,我利用Termux和Aid Learning測試過基于C/C++的openmp并行程序,基于Java的并行程序,還有基于MPI以及基于Java的分布式集群并行。但是很遺憾,一直無法成功開發基于OpenCL的GPU并行編程。

這是主要是因為Android并沒有采用glibc作為C庫,而是采用了Google自己開發的Bionic Libc,它的官方Toolchain也是基于Bionic Libc而并非glibc的。因此我使用Termux和Aid Learning里的libopencl.so是無法調用OpenCL的。

與glibc相比,Bionic Libc有如下一些特點:

  • 采用BSD License,而不是glibc的GPL License;
  • 大小只有大約200k,比glibc差不多小一半,且比glibc更快;
  • 實現了一個更小、更快的pthread;
  • 提供了一些Android所需要的重要函數,如“getprop”, “LOGI”等;
  • 不完全支持POSIX標準,比如C++ exceptions,wide chars等;
  • 不提供libthread_db 和 libm的實現

目前我還沒有找到正確的方式在Termux和Aid Learning中調用手機OpenCL來進行GPU并行計算(如果您能解決,麻煩您教教我!)。

那么Termux和Aid Learning就沒法用GPU加速計算了嗎?“只要思想不滑坡,辦法總比困難多”!針對Termux和Aid Learning的自身特點考慮解決方案唄!

手機軟件Termux和Aid Learning是一個安卓上模擬的Linux環境,并非真正的Linux,也不是安卓的那個Linux,比如,他們就無法直接開發傳統的Linux桌面程序,也不能開發安卓桌面程序。但是當前基于Web的技術可以解決這個問題,而JavaScript是Web開發的主流語言。Node.js等先進工具都能用啊!然后WebGL不就能上了嗎?

比如這樣的,WebGL開發的三維地球就可以用在Termux或者Aid Learning。

ec2abc7e3519d644cf87ee191462c59b.png

詳情見:

myastrotong:Python爬取肺炎疫情數據并開發三維疫情數字地球?zhuanlan.zhihu.com
b91c265d6c02257766ca175d49bd814e.png

再進一步,GPU.js是不是也能用上了!這不就能夠調用安卓的GPU了!JS完美的解決了我的需求!

可能大家對JavaScript的計算性能有質疑,畢竟這是一門腳本語言。說他性能拼得過C/C++,打死也沒人信。

有大神早就做過相關測試了,各語言計算性能對比測試見這里:

Javascript,C++,C#,Java,Lua,Python,Ruby,F#語言渲染性能評測 | AlloyTeam?www.alloyteam.com
e09d4bebd985a900ba987905714956ab.png

結果在這兒:

23850104fad9ec80287cfa6fdfa7bf4b.png

54aa6e25422efac154837af1cc1a698c.png

這個測試是2010年左右的作品了,其中使用的還是32位的vs2008,Java還是jdk1.6。

大家都知道改為64位以后,c++的計算速度還能進一步提高。Java的性能經過這些年發展也有一定提高。但是更需要指出來的是,Javascript、Python這類腳本語言的速度提升得更快!所以該測試還是非常有指導意義的。

在這個測試中,JS的Chrome V8引擎成為了計算效率最高的腳本語言引擎。所以可以看出來,加入JIT的加持使得Chrome V8引擎輔助Javascript一躍從前端跑進了后端。厲害。

那么JavaScript語言內部還有很多引擎啊,各個引擎之間的性能對比如何呢?

QuickJS的作者,大牛Fabrice Bellard,同時還是Qemu、FFmpeg的作者,測試了如下各個Javascript Engine的性能!結果如下表所示:

具體解釋見網站:

QuickJS Benchmark?bellard.org

beed82186b844a0bae5f3e2ba0efcf18.png

可以看到,加入JIT的V8引擎性能獨領風騷,基本上是取得了碾壓式的勝利。

沒了JIT的其他引擎,大家的性能也就差不多了,基本上就是那些腳本引擎該有的樣子,搓唄!

自帶V8引擎的Node.js在Termux和Aid Learning都能夠安裝(Node.js不是一門語言也不是一個框架,它是基于Chrome V8引擎的JavaScript運行時環境),此外在手機的大多數瀏覽器內都是自帶V8的。這就酸爽了。腳本語言,性能還這么好,寫起程序來那個順暢,還能輕松的開發跨平臺應用(比如electron開發的vscode)!溜啊!

當然QuickJS自身也是一個神器,無論怎么贊美它都不過分,搞嵌入式JS開發美得很,以后再作介紹,在此不予贅述。Bellard那是大神,給咱們引入了另一個世界,回頭再表!

JavaScript里面有一個WebGL技術,可以在網頁調用OpenGL技術,這不就是我想要的!

我在網頁端調用能否調用OpenCL、CUDA呢?答案當然是否!但是有一個新技術:GPU.js。用這個就可以在網頁端調用GPU來進行并行計算了!

GPU.js - GPU accelerated Javascript?gpu.rocks
a96bf22d50a5384c0e6047a5225bced0.png

這個技術就可以完全避免Termux和Aid learning無法調用安卓libopencl.so的尷尬!

改進官網的矩陣乘法的例子,在小米Mix2s上分別測試在GPU、CPU上128、256、512、1024維矩陣乘法。

分別在小米瀏覽器、UC瀏覽器、FireForx、Chrome四款瀏覽器上進行測試。

下圖各數據的意義是:

第一行表示矩陣維數;

第二行表示CPU計算時間(毫秒);

第三行表示GPU并行計算時間(毫秒);

第四行表示加速比。

測試1:

1ae29a0daabe7d54cc604ef6484ab7f5.png

測試2:

be4171235f70c3a523e11a0c9c33c784.png

測試3:

e798f47dcac8b4f692976142c06f53ac.png

測試4:

2836df90c35308ea9bdbad41305e91b6.png

值得指出的是,以上數據只是某次計算的結果,每一次計算可能求得結果其實并不一樣,有時候差距還挺大。但是數量級基本是沒錯的。

由計算結果可見:

隨著矩陣維數增加,GPU的計算性能要遠優于CPU的計算性能,在1024維矩陣的計算上輕松提升了60~80倍。無論在那個瀏覽器上,在復雜大矩陣計算上,GPU的并行計算性能都取得了碾壓式的勝利!

FireFox瀏覽器上的GPU計算效率是最高的。

Chrome瀏覽器上CPU的計算效率更好。

通過上述處理,安卓手機配合Termux和Aid Learning獲得了強大的算力,這個算力是遠超過樹莓派4B了。大家現在可以嘗試Tersorflow.js之類了,看看能不能搞出更有創意的玩法。

算例的源碼

新建一個index.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script src="dist/gpu-browser.min.js"></script><script>
window.onload = function(){
const gpu = new GPU();const multiplyMatrix = gpu.createKernel(function(a, b) {let sum = 0;for (let i = 0; i < 128; i++) {sum += a[this.thread.y][i] * b[i][this.thread.x];}return sum;
}).setOutput([128, 128]);function multiplyMatrixByCPU(A, B) {let tempMatrix = new Array( 128); for(let i=0;i<128;i++){tempMatrix [i]=new Array(128);for(let j=0;j<128;j++){tempMatrix[i][j]=0;for(let n =0;n<128;n++){tempMatrix[i][j]+=A[i][n]*B[n][j];}}}return tempMatrix;  
} var a=new Array( 128);
var b=new Array( 128);
for(var i=0;i<128;i++){a[i]=new Array(128);b[i]=new Array(128);for(var j=0;j<128;j++){a[i][j]=j*0.01;b[i][j]=j*0.21;}
}var start = window.performance.now();
const d = multiplyMatrixByCPU(a, b);
var end = window.performance.now();var start2 = window.performance.now();
const c = multiplyMatrix(a, b);
var end2 = window.performance.now();var duration = end - start;
var duration2 = end2 - start2;var two = document.getElementById("two");
two.innerHTML =duration;var three= document.getElementById("three");
three.innerHTML= duration2 ;var matSize= document.getElementById("matSize");
matSize.innerHTML= 128;var ratio= document.getElementById("ratio");
ratio.innerHTML= duration2/duration;} 
</script>
</head><body><p>Matrix size:<span id="matSize"></span></p><p>global CPU:<span id="two"></span></p><p>global GPU:<span id="three"></span></p><p>GPU vs CPU:<span id="ratio"></span></p>
</body>
</html>

你需要的是在index.html目錄下新建一個文件夾dist,然后上官網下載gpu-browser.min.js文件放到dist文件夾下。

然后在index.html所在文件夾下開啟http-server:

python3 -m http.server 9999

或者:

npm start -- -p 9999

然后在手機瀏覽器輸入

http://localhost:9999/index.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532176.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532176.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532176.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python默認編碼方式_關于設置python默認編碼方式的問題

2019-8-27 07:45:36 本帖最后由 傻紙 于 2019-8-27 10:02 編輯 查了一會資料得出的結論是如果你用的是python3.x&#xff0c;那么就最好別去設置sys.defaultencoding或者sys.stdout.encoding 記住在需要編碼的時候用encode&#xff0c;解碼的時候decode就可以了。。。 這個問題…

計算機科學與技術是屬于什么學科,計算機科學與技術專業屬于什么大類 屬于哪個學科...

近日&#xff0c;有很多人咨詢小編計算機科學與技術專業屬于什么大類 屬于哪個學科&#xff1f;現在小編統一回復一下大家計算機科學與技術專業屬于工學類&#xff0c;下面是關于計算機科學與技術專業詳細的介紹。1計算機科學與技術專業門類及學科介紹專業名稱專業代碼門類學科…

matlab imread_MATLAB圖像處理:29:在幾何變換輸出中指定填充值

本示例說明如何指定imwarp執行幾何變換時使用的填充值。執行轉換時&#xff0c;輸出圖像中通常會有一些像素不屬于原始輸入圖像。必須為這些像素分配一些值&#xff0c;稱為填充值。默認情況下&#xff0c;imwarp將這些像素設置為零&#xff0c;并顯示為黑色。使用FillValues參…

小學生學計算機,學計算機對小學生的好處

內容提要:隨著計算機應用的日益社會化和家庭化,計算機在人們工作、學習和生活等各個方面正發揮著越來越重要的作用&#xff0c;而計算機應用基礎也相應成為現代社會人們必修的文化基礎課。現在的小學生將是未來的創新型人才&#xff0c;他們的計算機水平如何&#xff0c;直接關…

micopython 18b20_MicroPython控制8*8LED點陣顯示溫度

MicroPython顧名思義就是可以在單片機上跑的Python&#xff0c;借助Micro Python&#xff0c;用戶完全可以通過Python腳本語言實現硬件底層的訪問和控制&#xff0c;比如說控制LED燈泡、LCD顯示器、讀取電壓、控制電機、訪問SD卡等。目前支持MicroPython的開發板有好幾種&#…

計算機組裝維護文獻,組裝計算機論文,關于《計算機組裝維護》課程教學相關參考文獻資料-免費論文范文...

導讀:此文是一篇組裝計算機論文范文,為你的畢業論文寫作提供有價值的參考。【摘 要】計算機硬件知識的教與學對于計算機相關專業的學生來說,重要性是不言而喻的.由于教學資源缺乏,面對這門以操作性強為特點的課程,如何利用學校有限的條件培養出符合職業資格標準的學生是該專業教…

ip變更會影響賬號登陸嗎_【教程】PUBG賬號被盜導致封禁申訴解封教程

很多朋友詢問PUBG在被盜號后被盜號者開掛導致永封該如何申訴解封&#xff0c;現在結合一些玩家被盜號及成功申訴的經歷&#xff0c;詳列一下步驟。本方法只適用于被盜后開掛導致封禁的賬號&#xff0c;那些自己開掛被封的孤兒不用往下看了。一.先向steam客服申訴 找回自己的ste…

html5專著,參考文獻專著

參考文獻類型&#xff1a;專著[M]&#xff0c;會議論文集[C]&#xff0c;報紙文章[N]&#xff0c;期刊文章[J]&#xff0c; 學位論文[D]&#xff0c; 報告[R]&#xff0c; 標準[S]&#xff0c; 專利[P]&#xff0c;論文集中的析出文獻[A]關于你又知道多少呢?下面是小編為大家整…

濾鏡怎么調_手機、電腦怎么剪輯視頻?真心求推薦實用工具

自從加入了短視頻自媒體運營這個行業以后&#xff0c;我就開始接觸到各種各樣的手機、電腦視頻剪輯、制作軟件&#xff0c;用它們來處理、完成被安排到的工作任務。很多時候&#xff0c;我也用它們來剪視頻&#xff0c;借此來練練手、積累下素材。記得剛進入這個行業的時候&…

2021計算機基礎知識題庫,2021~2021計算機基礎知識練習題

2021~2021計算機基礎知識練習題 2021~2021計算機基礎知識練習題 北京聯合大學 2021~2021計算機基礎知識練習題 一、選擇題 1.記錄在存儲介質上的一組相關信息的集合稱為______。 A)程序 B)磁盤 C)軟件 D)文件 2.當一個文件更名后&#xff0c;文件的內容會______。 A)完全消失 B…

計算機背板知識,你知道背板的選購技巧嗎?

原標題&#xff1a;你知道背板的選購技巧嗎&#xff1f;背板就是母板&#xff0c;子板插在上面構成系統&#xff0c;計算機背板說成背板也成立&#xff0c;只不過背板更多的知識線路板而已&#xff0c;沒有實際的器件&#xff0c;只起信號通路作用。背板在設備機箱的后面。一般…

git 切換分支_git 入門教程之分支總覽

分支就是一條獨立的時間線,既有分支,必有主干,正如一棵樹談到樹枝,必有樹干一樣的道理.我們先前對git 的全部操作默認都是在主干上進行的,這個主干也是一種特殊的分支,名為 master 分支.無論是穿越歷史還是撤銷更改,我們都或多或少接觸過時間線,git 管理的版本串在一起就組成了…

計算機應用技術專業全國排名,計算機應用技術專業全國排名

排名學校名稱等級排名學校名稱等級排名學校名稱等級1清華大學A19武漢大學A37合肥工業大學A2浙江大學A20華南理工大學A38蘇州大學A3北京航空航天大學A21電子科技大學A39江蘇大學A4華中科技大學A22大連理工大學A40大連海事大學A5北京大學A23天津大學A41中山大學A6上海交通大學A24…

python中加減乘除是什么數據類型_python中,數字類型計算

說明&#xff1a; 今天在看python數字類型的操作&#xff0c;在此記錄下。 操作過程&#xff1a; 1.數字的加減乘除 >>> 2 2 4 >>> 4 - 2 2 >>> 2 - 4 -2 >>> 2 * 2 4 >>> 2 / 2 #除法的結果會返回小數的結果&#xff0c;如果是…

正在鎖定計算機 win7轉圈圈打不開,Win7網絡連接圖標一直轉圈的原因和解決方法...

Win7網絡連接圖標一直轉圈是什么情況&#xff1f;如果用戶發現Win7系統中的網絡圖標一直處在轉圈狀態&#xff0c;則表示該網絡不能正常加載&#xff0c;且無法識別&#xff0c;筆者通過檢查發現網絡依賴的服務Network List Service沒有自動啟動&#xff0c;啟動之后可解決該問…

jvm內存模型和java內存模型_JVM運行時內存模型綜述

JVM內存模型JVM分為五個區域&#xff1a;虛擬機棧、本地方法棧、方法區、堆、程序計數器。JVM不同區域的占用內存大小不同&#xff0c;一般情況下堆最大&#xff0c;程序計數器較小。JVM五個區中虛擬機棧、本地方法棧、程序計數器為線程私有&#xff0c;方法區和堆為線程共享區…

python數獨游戲源代碼100行_python實現自動解數獨小程序

跟朋友最近聊起來數獨游戲&#xff0c;突發奇想使用python編寫一個自動計算數獨解的小程序。 數獨的規則不再過多闡述&#xff0c;在此描述一下程序的主要思路&#xff1a; &#xff08;當前程序只針對于簡單的數獨&#xff0c;更復雜的還待深入挖掘&#xff09; 1.計算當前每個…

getline沒有與參數列表匹配的重載函數_C++新增基礎功能解析—函數重載功能的使用...

喜歡的可以收藏轉發加關注“函數重載”指的是可以有多個同名的函數&#xff0c;因此 名稱進行了重載。這兩個術語指的是同一回事&#xff0c;但我們通常使用函數重載。可以通過函數重載來設計? 系列函數——它們完成相同的工作&#xff0c;但使用不同的參數列表。重載函數就像…

公關文秘專業要學計算機,文秘相關專業有哪些

文秘相關專業有哪些引導語&#xff1a;想必大多數人對文秘這個崗位都不陌生&#xff0c;那么與文秘相關專業有哪些呢&#xff1f;接下來是小編為你帶來收集整理的文章&#xff0c;歡迎閱讀&#xff01;一、中文類專業&#xff1a;中文及相關專業主要包括漢語言文學、漢語言、中…