c语言 gpu加速,python代码用gpu运行

  c语言 gpu加速,python代码用gpu运行

  欢迎来到腾讯云社区获取更多腾讯海量技术实践晾衣架~

  什么是基于Javascript的GPU加速?

  由于CPU和GPU的设计目标不同,内部结构也大相径庭。CPU需要支持常见场景,内部结构非常复杂。GPU通常用于计算统一和不相关的数据类型。因此,在Web上实现3D场景时,我们通常使用WebGL来利用GPU操作(大量顶点)。但是如果只是一般的计算场景呢?比如在处理一幅图像的大量像素信息时,有没有利用GPU资源的方法?这就是本文要阐述的,GPU通用计算,简称GPGPU。

  2.示例演示:颜色代码识别

  如下图所示,我们识别照片中的彩虹糖果块,并给糖果添加表情。

  2.1实例地址(打开页面,依次点击“按CPU计算”和“按GPU计算”按钮)。) ) ) ) )。

  2.2执行代码

  varRGB2HSV=function(r,g,b ) {

  varmax=math.max(r,g,b),min=Math.min(r ) r,g,b),

  d=最大-最小,

  h、

  s=(max===0?0 : d/max),

  v=max/255;

  开关(最大){

  case min:h=0;黑色;

  caser:h=(g-b ) d* ) gb?6: 0;h/=6 * d;黑色;

  caseg:h=(B-R)d * 2;h/=6 * d;黑色;

  情况b:h=(r-g)d * 4;h/=6 * d;黑色;

  }

  返回{

  h:自我色调指数[ parseint (h * 360 ) ],

  s: s,

  五:五

  }

  (;

  处决人数:262,144人

  2.3测试结论

  在这个例子中,GPU和CPU用于色调转换(以便光线不影响识别精度),其他步骤相同。

  2.4使用gp GPU的意义

  因为GPU和CPU之间的数据传输过程相当于GPU的实际运算时间,使用GPU的运算传输成本太高,实测在Android上有很大优势。

  这个测试用例提取自webAR项目,它需要实时跟踪用户摄像头处理的视频流(256*256)。使用GPU进行计算意义重大。如果不这样做,就无法实现实时跟踪。

  3.如何实现GPU通用计算?

  3.1首先通过流程图展示原理。

  3.2实施

  3.2.1只需创建顶点着色器并传递贴图坐标。

  Attributec4位置;

  改变vec2 vCoordvoid main () }

  vCoord=position.xy * 0.5 0.5

  gl _ Position=position

  }

  3.2.2创建一个面片着色器,根据贴图坐标进行贴图。

  精密高精度浮点运算;

  改变vec2 vCoord

  示例2d地图;voidmain(void ) {

  VEC4color=texture2d(map,vCoord);

  gl _ FragColor=color

  }

  3.3.3根据上面的着色器代码创建一个程序对象。变量代码就是我们要传递的计算代码。

  //着色器程序var vertexShaderSource= . ;

  varfragmentshadersource=“.”代码“.”;

  varvertexshader=GL . create shader(GL . vertex _ shader;

  GL.shadersource(vertexshader,vertexShaderSource);

  GL . compile shader(vertex shader;

  varfragmentshader=GL . create shader(GL . fragment _ shader);

  GL.shadersource(fragmentshader,fragmentShaderSource);

  GL.compile着色器(片段着色器;

  //创建一个程序对象

  var program=gl.createProgr

  am();

  gl.attachShader(程序,顶点着色器);

  gl.attachShader(program,fragment shader);

  gl.linkProgram(程序);

  gl.useProgram(程序);

  3.3.4传入顶点数据,创建一个面覆盖整个画布。

  //顶点数据传输

  var vertices=new float 32 array([-1.0,1.0,-1.0,-1.0,1.0,-1.0,1.0,1.0]);

  var vertex buffer=GL . create buffer();

  bindBuffer(gl。ARRAY_BUFFER,vertex BUFFER);

  gl.bufferData(gl。数组缓冲区,顶点,gl。STATIC _ DRAW);

  var a position=GL . getattributelocation(program, position );

  gl . vertexattributepointer(a position,2,GL。FLOAT,false,0,0);

  GL . enablevertexattribarray(a position);

  3.3.5输入原始数据,在这种情况下,我要处理的图像数据,作为地图,最终绘制到屏幕上。

  var gl=this.gl

  var program=this.program

  var texture=GL . create texture();

  var uMap=GL . getuniformlocation(program, map );

  activeTexture(gl。texture 0);

  bindTexture(gl。纹理_2D,纹理);

  gl.texImage2D(gl。纹理_2D,0,gl。RGBA冰川。RGBA冰川。UNSIGNED_BYTE,canvas);

  gl.texParameteri(gl。纹理_2D,德国。纹理_放大_过滤,gl。最近);

  gl.texParameteri(gl。纹理_2D,德国。纹理最小过滤器。最近);

  gl.texParameteri(gl。纹理_2D,德国。纹理_包裹_S,gl。CLAMP _ TO _ EDGE);

  gl.texParameteri(gl。纹理_2D,德国。TEXTURE_WRAP_T,gl。CLAMP _ TO _ EDGE);

  gl.generateMipmap(gl。质感_ 2D);

  gl.uniform1i(uMap,0);

  //绘制

  gl.clearColor(0,0,0,1);

  gl.clear(gl。颜色_缓冲区_位);

  gl.drawArrays(gl。三角形_FAN,0,4);

  3.3.6从最终绘制的图片中获取颜色信息作为最终处理结果数据。

  var pixels=new uint 8 array(GL . drawingbufferwidth * GL . drawingbufferheight * 4);

  gl.readPixels(0,0,gl.drawingBufferWidth,gl.drawingBufferHeight,gl。RGBA冰川。无符号_字节,像素);

  其实原理明确之后,整体实现起来还是比较简单的。但是对于不了解WebGL的同学来说,很难理解。我准备写一系列的WebGL教程,有兴趣的同学可以关注一下。

  4.有现成的类库吗?

  可以看到,在我实现的gpu.js中,javascript并没有被转换成着色器语言(C类),而是用户直接传入着色器代码。不过github上已经有一个把javascript转换成shader语言的库了。https://github.com/gpujs/gpu.js

  为什么我没有直接用?

  使用简单,2k就能实现的代码,不想引入200k库;

  数据输入输出可以自己灵活控制;

  shader的语言非常简单,尤其是只使用基本运算逻辑的代码,不需要通过库从Javascript转换而来。

  欢迎来到腾讯QcloudCommunity或关注贾云社区微信微信官方账号,第一时间获取更多海量技术实践干货~

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • python需要编译器编译执行吗,为什么python代码不需要编译
  • python需要编译器编译执行吗,为什么python代码不需要编译,python程序需要编译吗
  • python能制作软件吗,python代码如何做成应用程序
  • python能制作软件吗,python代码如何做成应用程序,python代码能做成软件吗
  • ,,二十种Python代码游戏源代码分享
  • ,,python代码的几种常见加密方式分享
  • ,,python代码实现五子棋游戏
  • python的绘图库,python代码大全绘图
  • python代码保存成文件打开运行不了,python保存文件后怎么运行
  • 基于python的卷积神经网络,卷积神经网络图像识别python代码
  • python代码做成exe文件,python编好后如何生成exe文件
  • vscode调试python代码,怎么在vscode中运行python
  • python代码大全简单,一个简单的python代码
  • python代码画图,用c画简笔画
  • Python代码编译器,适合初学者的python编译器
  • 留言与评论(共有 条评论)
       
    验证码: