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参…

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…

滤镜怎么调_手机、电脑怎么剪辑视频?真心求推荐实用工具

自从加入了短视频自媒体运营这个行业以后&#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 管理的版本串在一起就组成了…

正在锁定计算机 win7转圈圈打不开,Win7网络连接图标一直转圈的原因和解决方法...

Win7网络连接图标一直转圈是什么情况&#xff1f;如果用户发现Win7系统中的网络图标一直处在转圈状态&#xff0c;则表示该网络不能正常加载&#xff0c;且无法识别&#xff0c;笔者通过检查发现网络依赖的服务Network List Service没有自动启动&#xff0c;启动之后可解决该问…

jvm内存模型和java内存模型_JVM运行时内存模型综述

JVM内存模型JVM分为五个区域&#xff1a;虚拟机栈、本地方法栈、方法区、堆、程序计数器。JVM不同区域的占用内存大小不同&#xff0c;一般情况下堆最大&#xff0c;程序计数器较小。JVM五个区中虚拟机栈、本地方法栈、程序计数器为线程私有&#xff0c;方法区和堆为线程共享区…

getline没有与参数列表匹配的重载函数_C++新增基础功能解析—函数重载功能的使用...

喜欢的可以收藏转发加关注“函数重载”指的是可以有多个同名的函数&#xff0c;因此 名称进行了重载。这两个术语指的是同一回事&#xff0c;但我们通常使用函数重载。可以通过函数重载来设计• 系列函数——它们完成相同的工作&#xff0c;但使用不同的参数列表。重载函数就像…

公关文秘专业要学计算机,文秘相关专业有哪些

文秘相关专业有哪些引导语&#xff1a;想必大多数人对文秘这个岗位都不陌生&#xff0c;那么与文秘相关专业有哪些呢&#xff1f;接下来是小编为你带来收集整理的文章&#xff0c;欢迎阅读&#xff01;一、中文类专业&#xff1a;中文及相关专业主要包括汉语言文学、汉语言、中…

java seek指针 换行符_Java网络编程探究|乐字节

大家好&#xff0c;我是乐字节小乐&#xff0c;上次给大家讲述了Java中的IO流之输出流|乐字节&#xff0c;本文将会给大家讲述网络编程。主要内容如下&#xff1a;网络 网络分层 IP位置 端口port 网络编程一、 网络 1、概念网络即将不同区域的电脑连接到一起&#xff0c; 组成局…

switch 条件判断_C语言学习第7篇---C语言三大结构之一判断结构

if语句分析1.if语句用于根据条件选择执行语句2.else不能独立存在且总是与它最近的if想匹配3.else语句后可以接其他if语句if语句中零值比较的注意点---bool型变量应该直接出现在条件中&#xff0c;不要进行比较---变量和0值进行比较时&#xff0c;0值应该出现在比较符合左边---f…

计算机应用基础授课提纲,《计算机应用基础》讲授提纲(1).ppt

《计算机应用基础》讲授提纲(1).ppt (49页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;14.9 积分*第四讲 Windows基础基本操作文件操作控制面板中文操作处理磁盘管理命令提示符*Windows 基本操作桌…

工业机器人演示码垛和卸垛_众多企业购买自动码垛机的原因是什么?

企业为什么要购买自动码垛机呢?难道仅仅是因为它可以自动&#xff0c;让工作变得轻松简单吗?当然不是&#xff0c;如果自动码垛机仅仅能够为企业带来这么点的好处的话&#xff0c;相信是没有企业愿意花大价钱来购买这些自动码垛机的&#xff0c;那么企业究竟是看中了自动码垛…

python 100days github_GitHub - rghwer/Python-100-Days: Python - 100天从新手到大师

Python - 100天从新手到大师 作者&#xff1a;骆昊 最近有很多想学习Python的小伙伴陆陆续续加入我们的交流群&#xff0c;目前我们的交流群人数已经超过一万人&#xff0c;光靠我自己已经无法及时处理小伙伴们的入群申请&#xff0c;更无法及时为大家解答问题。目前我的想法是…

python期末项目书怎么写_自己写了一部书怎么出版

一部书从无到有&#xff0c;包括编写和出版。编写可以自己写&#xff0c;但出版的问题&#xff0c;得靠规定的出版途径来解决。那么&#xff0c;自己写了一部书怎么出版?通常包括两种方法&#xff1a;找出版社直接合作公费出版和找出版公司合作自费出版。自己写了一部书怎么出…

分页请求json数据_Python爬虫入门教程 28-100 虎嗅网文章数据抓取 pyspider

1. 虎嗅网文章数据----写在前面 今天继续使用pyspider爬取数据&#xff0c;很不幸&#xff0c;虎嗅资讯网被我选中了&#xff0c;网址为 https://www.huxiu.com/ 爬的就是它的资讯频道&#xff0c;本文章仅供学习交流使用&#xff0c;切勿用作其他用途。常规操作&#xff0c;分…