pycuda教程,pyCUDA
通过皮库达调用图形处理器(GPU)环境配置cudapycudanumpy(加拿大)和cv2代码运行结果关于皮库达
环境配置
在Linux开放使用42.2系统下运行,安装库达工具包10.0点中安装皮库达和numpy(数码相机)。
库达直接从库达官网(339开发者。英伟达。com/cuda-90下载档案)下载对应版本的。跑!跑文件,运行后根据提示进行安装。除了""显卡驱动""外所有选项都安装。
安装成功后,应可以通过命令行指令,查看库达版本。
编译器版皮库达从皮库达官网(https://Mathematica。de/software/pycuda/)给出的方法下载,按照帮助文档(339维基。股票。net/pycuda/installation/Linux)逐步安装。
安装完成后,可以运行皮库达提供的简单图形处理器(GPU)运算代码。
努比和cv2正常通过点走吧安装就可以。
sudo python -m pip安装numpysudo python -m pip安装opencv-python代码主要写了三个调用图形处理器(GPU)的函数,基本上与c。非政府组织中调用库达的方法一致。关于调用图形处理器(GPU)后运算的的效果,我没有去定量计算,只能说比直接通过中央处理器运算快了很多。
#年#月#日这些引用,有一部分是配置皮库达的运行环境的from _ _ future _ _ import print _ function from _ _ future _ _ import absolute _ import导入pycuda。驾驶员为drviport pycuda。工具导入pycuda。从pycuda自动邀请导入num pycuda。编译器导入源模块导入cv 2 #相当于直接生成一个c。非政府组织语言的内核,注意输入的数据类型是未签名charod=源模块(//渐变色_ _ _ _ _ global _ _ void draw garten(signed char * img){ const int I=(block idx。x块idx。y *网格变暗。x)*块im。x *阻止即时消息。y螺纹idx。y *阻止即时消息。x线程idx。x;img[3 * i0]=(char)255-255 *(I/800)/800;img[3 * i1]=(char)255-255 *(I % 800)/800;img[3 * I2]=(char)128-128 *(I/800)/800;}//棋盘格_ _ _ _ _ global _ _ void draw chess(signed char * img){ const int I=(block idx。x块idx。y *网格变暗。x)*块im。x *阻止即时消息。y螺纹idx。y *阻止即时消息。x线程idx。x;整形常量标志=(I/80)(I/800/80);如果(标志% 2){ img[3 * i0]=255;img[3 * i1]=255;img[3 * I2]=255;} else { img[3 * i0]=0;img[3 * i1]=0;img[3 * I2]=0;}//两张图片融合_ _ _ _ _ global _ _ void merge(signed char * img 1,signed char *img2,unsigned char * img 3){ const int I=(block idx。x块idx。y *网格变暗。x)*块im。x *阻止即时消息。y螺纹idx。y *阻止即时消息。x线程idx。x;img 3[3 * i0]=img 1[3 * i0]* 3/4 img 2[3 * i0]/4;img 3[3 * i1]=img 1[3 * i1]* 3/4 img 2[3 * i1]/4;img 3[3 * I2]=img 1[3 * I2]* 3/4 img 2[3 * I2]/4;}“”)画gardian=mod。get _ function( drawgardant )画棋=mod。get _ function( draw chess )merge=mod。get _ function( merge )if _ _ name _= _ main _ :#个创建3张800*800美元像素的图片img 1=数量py。ndaarray((800,800,3),dtype=num py。uint 8)img 2=数量。ndaarray((800,800,3),dttype=num py。uint 8)img 3=数量。zeros _ like(img 1)#通过库达来调用图形处理器(GPU)模块绘制garten(drv).Out(img1)、block=(50,20,1)、grid=(80,8)) drawChess(drv)。Out(img2)、block=(50,20,1)、grid=(80,8)) #号根据自己的图形处理器(GPU)性能选择合适的网格块,如果超出会报错合并(drv).在(img1)中,drv .在(img2)中,drv .Out(img3),block=(50,20,1),grid=(80,8))cv 2。命名窗口(“图像”)cv 2。imrite( img 1。jpg ,img 1)cv 2。imss模式(图像,img 1)cv 2。等待键(2000)cv 2。imitri( img 2。jpg ,img 2)cv 2。imss how( image ,img 2)cv 2。等待键(2000)cv 2。imitri( img 3。jpg ,img 3)cv 2。imss模式(图像退出而真实:如果cv 2。等待键(100)==27:中断cv 2。destrolwindows()运行结果运行之后,会依次出现三张图片。
关于皮库达在皮库达中输入一个mn(消歧义)像素的图像(相当于一个三维数组),会被转换为(mn3)1的一维数组去进行运算。
例如一个233的数组:
[1,2,3],[2,3,4],[3,4,5],[2,3,4],[3,4,5],[4,5,6]]将在pycuda中转换为181的数组:
【1,2,3,2,3,4,3,4,5,2,3,4,3,4,5,5,4,5,6】在进行图像处理时,我们可以通过类似的原理找到对应的秩。当然,通过合理分配块,会有更简单的计算方法。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。