pycuda安装:
    (1)查看CUDA版本:cat /usr/local/cuda/version.txt   (目前实验CUDA版本为:CUDA Version 9.0.176)

(2)查看cudnn版本:cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2   (目前实验cudnn版本:7.0)

(3)安装直接:pip install pycuda==2017.1.1       (目前实验cudnn版本:2017.1.1)

注意:pycuda查看可以看这里:pycuda官网。  (参看版本之间的对应)

实验:
hello_gpu.py

import pycuda.autoinit
import pycuda.driver as drv
import numpy
 
from pycuda.compiler import SourceModule
mod = SourceModule("""
__global__ void multiply_them(float *dest, float *a, float *b)
{
  const int i = threadIdx.x;
  dest[i] = a[i] * b[i];
}
""")
 
multiply_them = mod.get_function("multiply_them")
 
a = numpy.random.randn(400).astype(numpy.float32)
b = numpy.random.randn(400).astype(numpy.float32)
 
dest = numpy.zeros_like(a)
multiply_them(
        drv.Out(dest), drv.In(a), drv.In(b),
        block=(400,1,1), grid=(1,1))
 
print ( dest-a*b )
或者:

import pycuda.autoinit
import pycuda.driver as drv
import numpy
 
from pycuda.compiler import SourceModule
mod = SourceModule("""
__global__ void multiply_them(float *dest, float *a, float *b)
{
  //const int i = threadIdx.x;
  const int i =  blockIdx.x * blockDim.x + threadIdx.x;
  dest[i] = a[i] * b[i];
}
""")
 
multiply_them = mod.get_function("multiply_them")
 
a = numpy.random.randn(400).astype(numpy.float32)
b = numpy.random.randn(400).astype(numpy.float32)
 
dest = numpy.zeros_like(a)
multiply_them(
        drv.Out(dest), drv.In(a), drv.In(b),
        block=(40,1,1), grid=(10,1))
 
print ( dest-a*b )

cpu与gpu计算效率的对比:  test.py

import pycuda.autoinit
import pycuda.driver as drv
import numpy as np
from timeit import default_timer as timer
 
from pycuda.compiler import SourceModule
mod = SourceModule("""
__global__ void func(float *a, float *b, size_t N)
{
 const int i = blockIdx.x * blockDim.x + threadIdx.x;
 if (i >= N)
 {
  return;
 }
 float temp_a = a[i];
 float temp_b = b[i];
 a[i] = (temp_a * 10 + 2 ) * ((temp_b + 2) * 10 - 5 ) * 5;
 // a[i] = a[i] + b[i];
}
""")
 
func = mod.get_function("func")
 
def test(N):
  # N = 1024 * 1024 * 90  # float: 4M = 1024 * 1024
 
  print("N = %d" % N)
 
  N = np.int32(N)
 
  a = np.random.randn(N).astype(np.float32)
  b = np.random.randn(N).astype(np.float32)
  # copy a to aa
  aa = np.empty_like(a)
  aa[:] = a
  # GPU run
  nTheads = 256
  nBlocks = int( ( N + nTheads - 1 ) / nTheads )
  start = timer()
  func(
      drv.InOut(a), drv.In(b), N,
      block=( nTheads, 1, 1 ), grid=( nBlocks, 1 ) )
  run_time = timer() - start
  print("gpu run time %f seconds " % run_time)
  # cpu run
  start = timer()
  aa = (aa * 10 + 2 ) * ((b + 2) * 10 - 5 ) * 5
  run_time = timer() - start
 
  print("cpu run time %f seconds " % run_time)
 
  # check result
  r = a - aa
  print( min(r), max(r) )
 
def main():
 for n in range(1, 10):
  N = 1024 * 1024 * (n * 10)
  print("------------%d---------------" % n)
  test(N)
 
if __name__ == '__main__':
  main()
结果:

------------1---------------
N = 10485760
gpu run time 0.023215 seconds
cpu run time 0.068797 seconds
-0.0014648438 0.0014648438
------------2---------------
N = 20971520
gpu run time 0.032089 seconds
cpu run time 0.124529 seconds
-0.0014648438 0.0014648438
------------3---------------
N = 31457280
gpu run time 0.046203 seconds
cpu run time 0.187157 seconds
-0.0014648438 0.0014648438
------------4---------------
N = 41943040
gpu run time 0.055805 seconds
cpu run time 0.244947 seconds
-0.0014648438 0.0014648438
------------5---------------
N = 52428800
gpu run time 0.075256 seconds
cpu run time 0.317744 seconds
-0.0014648438 0.0014648438
------------6---------------
N = 62914560
gpu run time 0.080560 seconds
cpu run time 0.378609 seconds
-0.0014648438 0.0014648438
------------7---------------
N = 73400320
gpu run time 0.101881 seconds
cpu run time 0.439889 seconds
-0.0014648438 0.0014648438
------------8---------------
N = 83886080
gpu run time 0.112525 seconds
cpu run time 0.504098 seconds
-0.0014648438 0.0014648438
------------9---------------
N = 94371840
gpu run time 0.139425 seconds
cpu run time 0.576029 seconds
-0.0014648438 0.0014648438

参考文献:
(1)GPU共享内存:pycuda使用教程:https://blog.csdn.net/qq_36387683/article/details/81075870

(2)pycuda教程:https://documen.tician.de/pycuda/tutorial.html

(3)理论性指导可以看这篇:https://blog.csdn.net/hujingshuang/article/details/53097222
————————————————
版权声明:本文为CSDN博主「MachineLP」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014365862/article/details/85338619

pycuda 之 安装与简单使用相关推荐

  1. docker-compose的安装与简单使用

    docker-compose的安装与简单使用 docker-compose简介 屁话不这么多,直接开干 docker-compose安装步骤 由于docker-compose托管在github上面,所 ...

  2. 内核同步对性能的影响及perf的安装和简单的使用

    更多文章目录:点击这里 GitHub地址:https://github.com/ljrkernel 内核同步对性能的影响及perf的安装和简单的使用 看了一篇关于多线程应用程序性能分析的外文,结合之前 ...

  3. cakephp 安装mysql_CakePHP的安装的简单方法

    在对于CakePHP的作用有了初步认识后,我们可以下载CakePHP来进行一些使用.在安装前,要检查php的版本情况,防止CakePHP框架出现不适配的情况. 对于具体的框架组装,会涉及到依赖库和Co ...

  4. 怎么进入python官网-Python的安装及简单的使用

    原标题:Python的安装及简单的使用 像我们想要抓住一门好的编程语言,如何开始学习呢?我来简单介绍下python Python特性:语法简单,入门上手快,很多女神也在学习,方便找个编程的妹纸---- ...

  5. 刚安装的python如何使用-Python requests的安装与简单运用

    强烈推荐!requests官方文档已有了中文版,请见http://cn.python-requests.org/zh_CN/latest/ . requests是python的一个HTTP客户端库,跟 ...

  6. python requests的安装与简单运用

    强烈推荐!requests官方文档已有了中文版,请见http://cn.python-requests.org/en/latest/. requests是python的一个HTTP客户端库,跟urll ...

  7. memcache的windows下的安装和简单使用

    原文:memcache的windows下的安装和简单使用 memcache是为了解决网站访问量大,数据库压力倍增的解决方案之一,由于其简单实用,很多站点现在都在使用memcache,但是memcach ...

  8. Oracle数据库学习(一)安装和简单使用

    新公司的新项目,需要用到Oracle数据库,所以现在便来解除此数据库,不得不说,这个数据库还这是麻烦. 安装倒是简单,就是中间会遇到各种问题. 安装步骤参考:https://blog.csdn.net ...

  9. 1.Vue 安装与简单使用

    Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了. 1.Vue的安装与简单使用 这 ...

最新文章

  1. 用Python处理图片九宫格
  2. 分析一天1000万北京地铁客流,我们发现...
  3. 冲刺!11.14-11.15
  4. bzoj1967 [AHOI2005]穿越磁场 离散最短路
  5. linux下SVN CVS命令大全
  6. 热门加壳工具VMProtect v3.1发布,新增内存保护,性能改进|附下载
  7. Matlab实现图像识别(四)
  8. CIS芯片测试到底怎么测?
  9. [导入]GIS的下个十年(Cary Mann, vice president, Bentley)
  10. 探索变量之间的关系(python3)
  11. 关于python的经典书籍推荐_5本Python经典书籍推荐,你都读过吗?
  12. 【论文排版术】学习笔记1
  13. iOS开发笔记1:[转]导航栏里的Back按钮显示不出来
  14. PS 中图层为索引,修改成背景可编辑
  15. 省流版-38号车评中心历史车评文字汇总
  16. winform制作音乐播放器
  17. speedoffice表格中如何自动求和
  18. 王爽汇编语言实验8:分析一个奇怪的程序
  19. ip伪装软件对游戏多开有什么用?
  20. 杨强:从大数据到人工智能

热门文章

  1. hypermesh2flac3d
  2. centos 7.4安装codecombat
  3. 关于对linux命令rm -rf 的理解
  4. JAVA基础 装箱类型
  5. 实现KMO和Bartlett的球形度检验的两种方法
  6. MSF建立webshell后门,并监听端口建立session连接
  7. svn教程----svn服务端安装配置
  8. 非门,与非门,或非门
  9. 【安全算法之DES】DES算法(支持ECB/CBC模式)的C语言源码实现
  10. numpymatplotlib