标签: pycuda

pyCUDA与C的性能差异?

我是CUDA编程的新手,我想知道如何将pyCUDA的性能与普通C中实现的程序进行比较.性能大致相同吗?我应该注意哪些瓶颈?

编辑: 我显然首先试图谷歌这个问题,并惊讶于没有找到任何信息.即我会排除pyCUDA人在他们的常见问题解答中回答这个问题.

c cuda pycuda

17
推荐指数
2
解决办法
7529
查看次数

使用PyCUDA进行Python多处理

我有一个问题,我想拆分多个CUDA设备,但我怀疑我当前的系统架构阻碍了我;

我设置的是一个GPU类,其功能可以在GPU上执行操作(奇怪的是).这些操作都是这种风格

for iteration in range(maxval):
    result[iteration]=gpuinstance.gpufunction(arguments,iteration)
Run Code Online (Sandbox Code Playgroud)

我想象N个设备会有N个gpuinstances,但是我对多处理没有足够的了解,看看应用这个的最简单的方法,以便每个设备都被异步分配,奇怪的是我遇到的几个例子给了处理后整理结果的具体演示.

任何人都可以在这方面给我任何指示吗?

更新 感谢Kaloyan在多处理领域的指导; 如果CUDA不是特定的关键点我会标记你的回答.抱歉.

实际上,为了使用这个实现,gpuinstance类启动了CUDA设备import pycuda.autoinit但是看起来不起作用,invalid context一旦每个(正确范围的)线程遇到cuda命令就抛出错误.然后我尝试__init__在类的构造函数中手动初始化...

pycuda.driver.init()
self.mydev=pycuda.driver.Device(devid) #this is passed at instantiation of class
self.ctx=self.mydev.make_context()
self.ctx.push()    
Run Code Online (Sandbox Code Playgroud)

我的假设是在创建的gpuinstance列表和线程使用它们之间保留上下文,因此每个设备都位于自己的上下文中.

(我还实现了一个析构函数来处理pop/detach清理)

问题是,invalid context一旦线程试图触摸CUDA ,异常仍然出现.

有什么想法吗?并且感谢这么远.为在他们的答案中工作'香蕉'的人自动投票!:P

python parallel-processing cuda multiprocessing pycuda

16
推荐指数
1
解决办法
1万
查看次数

使用PyCUDA后没有输出

我已经安装PyCUDA使用pip.我试过两台电脑.
一个全新安装,Python 3.7.1一个安装Python 3.6.5.

使用后一切都失败PuCUDA,没有错误消息.

最小的例子是这样的:

import sys
import pycuda.driver as cuda
import pycuda.autoinit # <-- Comment in order for `print` to work

if __name__ == '__main__':
    print('Print works')
    sys.stdout.write("Sys print works")
Run Code Online (Sandbox Code Playgroud)

除非我删除,否则不会打印任何内容pycuda.autoinit.

另一个例子是使用printf:

import pycuda.driver as cuda
import pycuda.autoinit
from pycuda.compiler import SourceModule

if __name__ == '__main__':
    mod = SourceModule("""
        #include <stdio.h>

        __global__ void test() {
          printf("I am %d.%d\\n", threadIdx.x, threadIdx.y);
        }
        """)

    func = …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing python-3.x pycuda

14
推荐指数
1
解决办法
217
查看次数

PyCUDA和NumbaPro CUDA Python有什么区别?

我是CUDA的新手,我正在试图弄清楚PyCUDA(免费)NumbaPro CUDA Python(非免费)对我来说会更好(假设图书馆成本不是问题).

两者似乎都要求您使用各自的Python方言.但是,似乎PyCUDA要求你在C代码中编写一个内核函数,这比使用NumbaPro更麻烦,NumbaPro似乎为你做了所有艰苦的工作.

确实如此吗?会有显着的性能差异吗?

python cuda pycuda numba numba-pro

12
推荐指数
2
解决办法
8982
查看次数

带Flask的pyCUDA给出了pycuda._driver.LogicError:cuModuleLoadDataEx

我想在flask服务器上运行pyCUDA代码.文件直接正确运行python3但在使用时调用相应的函数失败flask.

这是相关代码:

cudaFlask.py:

import pycuda.autoinit
import pycuda.driver as drv
import numpy

from pycuda.compiler import SourceModule

def cudaTest():
    mod = SourceModule("""
        int x = 4;
    """)

    print ("done")
    return

if __name__ == "__main__":
    cudaTest()
Run Code Online (Sandbox Code Playgroud)

server.py(只调用该函数的部分):

@app.route('/bundle', methods=['POST'])
def bundle_edges():
    cudaTest()
    return "success"
Run Code Online (Sandbox Code Playgroud)

在运行时,python cudaFlask.py我得到了done预期的输出,但在启动服务器并执行POST请求时,website/bundle我在烧瓶控制台上收到以下错误:

pycuda._driver.LogicError: cuModuleLoadDataEx failed: invalid device context - 
Run Code Online (Sandbox Code Playgroud)

在线上 mod = SourceModule...

我哪里错了?有一个类似的问题,但尚未得到回答.

python flask pycuda

11
推荐指数
1
解决办法
965
查看次数

pycuda - 'CUDA_ROOT未设置,nvcc不在路径中.'

虽然我已经安装了pycuda并使用它,但它开始(没有做某事)不工作.所以,ii试图再次安装,但是当我做的时候

python configure.py --cuda-root =/usr/local/cuda/bin

它给了我标题中的错误.

nvcc文件位于上面的目录中.

pycuda

8
推荐指数
1
解决办法
2万
查看次数

pycuda vs theano vs pylearn2

我目前正在学习GPU编程,以提高机器学习算法的性能.最初我尝试用纯c学习编程cuda,然后我发现pycuda对我来说是cuda库的包装,然后我找到了theano和pylearn2并且有点困惑:

我这样理解他们:

  1. pycuda:cuda库的python包装器
  2. theano:类似于numpy但对GPU和CPU透明
  3. pylearn2:基于theano的深度学习包,实现了多种机器学习/深度学习模型

由于我是GPU编程的新手,我应该从C/C++实现开始学习还是从pycuda开始就足够了,甚至从theano开始?例如,我想在学习GPU编程后实现randomForest模型.谢谢.

pycuda theano deep-learning

8
推荐指数
1
解决办法
2607
查看次数

使用 Flask 时 PyCUDA 上下文错误

我正在使用 PyCUDA 来实现 smooth_local_affine,如下所示。当我简单地在Linux上运行该程序时,它运行得很好。但是当我尝试在 Flask 上下文下导入它时:

from smooth_local_affine import smooth_local_affine
from flask import Flask
app = Flask(_name_)
...
Run Code Online (Sandbox Code Playgroud)

出现以下错误:

-------------------------------------------------------------------  
PyCUDA ERROR: The context stack was not empty upon module cleanup.
-------------------------------------------------------------------   
A context was still active when the context stack was being cleaned up.  
At this point in our execution, CUDA may already have been deinitialized, 
so there is no way we can finish cleanly. The program will be aborted now. 
Use Context.pop() to avoid this problem. …
Run Code Online (Sandbox Code Playgroud)

python image-processing flask pycuda server

8
推荐指数
1
解决办法
6946
查看次数

在 ROS 中运行tensorRT时出现“LogicError:explicit_context_dependent失败:无效的设备上下文 - 没有当前活动的上下文?”

我在 TensorRT(使用 python)中有一个推理代码。我想在 ROS 中运行此代码,但在尝试分配缓冲区时出现以下错误:

LogicError: explicit_context_dependent failed: invalid device context - no currently active context?

该代码在 ROS 包之外运行良好。ROS 节点发布图像,给定的代码获取图像进行推理。推理代码如下所示:

#!/usr/bin/env python
# Revision $Id$

import rospy
from std_msgs.msg import String
from cv_bridge import CvBridge
import cv2
import os
import numpy as np
import argparse
import torch
from torch.autograd import Variable
from torchvision import transforms
import torch.nn.functional as F
import torch._utils
from PIL import Image
from sensor_msgs.msg import Image as ImageMsg
import tensorrt as trt
import pycuda.driver as cuda
import …
Run Code Online (Sandbox Code Playgroud)

python-2.7 pycuda ros tensorrt

8
推荐指数
1
解决办法
8851
查看次数

将C++/CUDA类传递给PyCUDA的SourceModule

我有一个用C++编写的类,它也使用了cuda_runtime.h中的一些定义,这是一个名为ADOL-C的开源项目的一部分,你可以看看这里!

这在我使用CUDA-C时有效,但我想以某种方式在PyCUDA中导入这个类,如果有可能的话.因此,我将在内核(而不是'main')中使用此类来定义用于计算函数派生的特定变量.有没有办法将这个类传递给PyCUDA的SourceModule?

我问了一个类似的问题,但在这里我想再解释一下.所以,有一个解决方案使用nvcc -cubin编译我的C代码(感谢talonmies)然后用driver.module_from_file()导入它,但是,我想使用SourceModule并在.py文件中写入这些内核,所以它可能更加用户友好.我的例子看起来像这样:

from pycuda import driver, gpuarray
from pycuda.compiler import SourceModule
import pycuda.autoinit
kernel_code_template="""
__global__ void myfunction(float* inx, float* outy, float* outderiv)
{
    //defining thread index
    ...
    //declare dependent and independet variables as adoubles
    //this is a part of my question
    adtl::adouble y[3];
    adtl::adouble x[3];
    // ... 
}
"""
Run Code Online (Sandbox Code Playgroud)

......这只是一个想法,但是SourceModule不知道什么是"adouble",因为它们是在类定义adoublecuda.h中定义的,所以我希望你现在更好地理解我的问题.有谁知道我应该从哪里开始?如果没有,我将在CUDA-C中编写这个内核,并使用nvcc -cubin选项.

感谢帮助!

python cuda boost-python pycuda

7
推荐指数
1
解决办法
3293
查看次数