将C++ /CUDA类传递到PycUDA的SoReMoDuu

2024-10-01 11:41:31 发布

您现在位置:Python中文网/ 问答频道 /正文

<>我有C++编写的一个类,它还使用了来自CUAAYRunTime.h的一些定义,这是一个名为ADOR-C的开源项目的一部分,你可以看看{{A1}!在

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

我问了一个类似的问题,但在这里我想解释一下。所以,有一个解决方案,用nvcc-cubin编译我的C代码(感谢talonmies),然后用来自_文件的driver.module(),但是,我希望使用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];
    // ... 
}
"""

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

谢谢你的帮助!在


Tags: 文件fromimportpycuda定义driverfloat内核
1条回答
网友
1楼 · 发布于 2024-10-01 11:41:31

PyCUDA SourceModule系统实际上只是一种将传递到文件中的代码,使用nvcc将该文件编译为cubin文件,并(可选)将该cubin文件加载到当前CUDA上下文中。PycUDA编译器模块对CUDA内核语法或代码一无所知,并且几乎对编译的代码没有影响(几乎限定符是因为它可以用^ {< CD2}}声明来约束用户提交的代码以停止C++符号的颠倒)。在

因此,为了实现我认为您所要求的,您只需要一个#include语句来表示设备代码在提交的字符串中需要的任何头,以及一组合适的搜索路径 在通过include_dirs关键字选项传递的python列表中。如果你这样做:

from pycuda import driver, gpuarray 
from pycuda.compiler import SourceModule 
import pycuda.autoinit 
kernel_code_template="""

#include "adoublecuda.h" 
__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]; 
    // ...  
}

""" 

module = SourceModule(kernel_code_template, include_dirs=['path/to/adoublecuda'])

它应该自动工作(注意未经测试,使用风险自负)。在

相关问题 更多 >