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.mzph.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;中文及相关专业主要包括汉语言文学、汉语言、中…