pycuda 下 使用双GPU

原创 2018年04月17日 18:04:00

因为程序原因,所以要求同时开启电脑的 俩个GPU 进行 计算,下边是开启双GPU的方法。

首先我们要知道一些概念:

  同一时间,一个cpu下的进程只能有一个device也就是GPU,而在device上进行的内存分配等操作都需要一个context去管理。

  所以,我们的思路就是,在CPU下使用多进程去开启不同的device。下面是测试代码:

import pycuda
from pycuda import  gpuarray
import pycuda.driver as cuda
from pycuda.compiler import SourceModule
import threading
import numpy
import time

class GPUThread(threading.Thread):
    def __init__(self, number, some_array):
        threading.Thread.__init__(self)

        self.number = number
        self.some_array = some_array

    def run(self):
        self.dev = cuda.Device(self.number)
        self.ctx = self.dev.make_context()

        self.array_gpu = gpuarray.to_gpu(self.some_array)

        uuout = test_kernel(self.array_gpu)

        print("device name is:",self.dev.name())
        print ("successful exit from thread:" ,self.getName())
       
        self.ctx.pop()

        del self.array_gpu
        del self.ctx

def test_kernel(input_array_gpu):
    mod = SourceModule("""
        __global__ void f(float * out, float * in)
        {
            int idx = threadIdx.x;
            out[idx] = in[idx] + 6;
        }
        """)
    func = mod.get_function("f")


    output_array_gpu = gpuarray.zeros((64,), numpy.float32)

    func(output_array_gpu,
          input_array_gpu,
         block=(64, 1, 1), grid=(1,1))

    uuout = output_array_gpu.get()

    return uuout

cuda.init()
some_array = numpy.full((64,), 1).astype(numpy.float32)
num = cuda.Device.count()

gpu_thread_list = []
start_time = time.time()
for i in range(num):
    gpu_thread = GPUThread(i, some_array)
    gpu_thread.start()
    gpu_thread_list.append(gpu_thread)
for i in gpu_thread_list:
 i.join()

在pycuda下有俩种方式进行device操作,

1第一种是交给import pycuda.autoinit, 

2第二种是手动开启:

import pycuda
import pycuda.driver as cuda

cuda.init()
num = cuda.Device.count()
self.dev = cuda.Device(num)
self.ctx = self.dev.make_context()//开启一个上下文

self.ctx.pop()//自己开启的上下文使用完后要弹出





3D游戏引擎之GPU渲染(DX篇)

-
  • 1970年01月01日 08:00

GPU共享内存小结---pycuda

先来点题外话,由于导师的要求使用GPU加速但是又没有系统的学习就开始了使用pycuda进行GPU的编程,变用边学。 在优化程序的时候shared memory是必用的,所以理解共享内存是个什么东西才...
  • fupotui7870
  • fupotui7870
  • 2017-10-26 21:48:48
  • 508

在GPU下做fft和Ifft----pycuda

1.调用keikna库 keikna库中有fft,所以为了减小任务量我就调用keikan的fft的库来完成。 http://blog.sina.com.cn/s/blog_4513dde60102vs...
  • fupotui7870
  • fupotui7870
  • 2017-09-10 12:55:32
  • 449

复数类型矩阵相乘GPU加速--pycuda

开发环境Ubuntu16.04 ,python3 复数类型矩阵相乘GPU加速–pycuda我在用卷积定理做卷积时遇到的一个问题就两矩阵做完FFT之后都是为复数怎么用pycuda做矩阵相乘,在给GPU...
  • fupotui7870
  • fupotui7870
  • 2017-09-10 19:50:46
  • 396

Pycuda 学习笔记(二)gpuarray学习

本博客参照学习文档https://documen.tician.de/pycuda/array.html 通过GPUArray 矩阵类可以将numpy中的数组和矩阵直接转换成cuda可处理类型,该...
  • u012915829
  • u012915829
  • 2017-06-02 08:56:11
  • 1479

使用Python写CUDA程序

本文讲述了两种使用Python编写CUDA程序使用的方式,包括Numba和PyCUDA,并对比分析了这两种方法。...
  • taonull
  • taonull
  • 2016-09-26 20:59:28
  • 7268

为python安装pycuda模块让GPU加速numpy的运算

直接用pip来安装就好,pip install pycuda pycuda的使用请参考官方教程:https://documen.tician.de/pycuda/ 这里要说的是安装过程出现...
  • qq_34877350
  • qq_34877350
  • 2017-11-24 11:23:44
  • 463

获取GPU详细信息

  • 2012年11月20日 09:09
  • 2KB
  • 下载

实验室中搭建Spark集群和PyCUDA开发环境

本文详细的描述了部署Spark集群以及配置GPU开发环境的技术流程
  • zhouqingtaostudy
  • zhouqingtaostudy
  • 2016-03-17 20:33:24
  • 1308

windows 10 安装CUDA 7.5和PyCUDA(在GPU上运行theano)

搭建环境之前自己曾在网上搜索过相关博客,能找到的中文资料确实不敢恭维,主要存在的问题是版本过低。因此”我曾经跨过山和大海,也穿过人山人海”,参考了别人的很多经验,才有了这篇相对版本较新的中文资料,供大...
  • Parasol5
  • Parasol5
  • 2016-02-16 23:36:08
  • 4214
收藏助手
不良信息举报
您举报文章:pycuda 下 使用双GPU
举报原因:
原因补充:

(最多只允许输入30个字)