Cuda 在共享内存中创建阵列,不使用PyOpenCL中的模板

Cuda 在共享内存中创建阵列,不使用PyOpenCL中的模板,cuda,pycuda,Cuda,Pycuda,如何在共享内存中创建一个数组,而不使用中所示的模板修改内核。还是使用模板是官方的方式 在PyOpenCL中,我可以通过设置内核参数在本地内存中创建一个数组 kernel.set_arg(1,numpy.uint32(a_width)) ... KERNEL_CODE = """ __kernel void matrixMul(__local float* A_temp,...) { ...} """ 我不完全理解这个问题。我不使用Python,但非常了解OpenCL 在OpenCL

如何在共享内存中创建一个数组,而不使用中所示的模板修改内核。还是使用模板是官方的方式

在PyOpenCL中,我可以通过设置内核参数在本地内存中创建一个数组

kernel.set_arg(1,numpy.uint32(a_width))

... 
KERNEL_CODE = """
__kernel void matrixMul(__local float* A_temp,...)
    { ...} """

我不完全理解这个问题。我不使用Python,但非常了解OpenCL

在OpenCL中,有两种可能创建共享/本地内存缓冲区:

1) 您添加了一个内核参数,因为您有问题。 2) 请在内核内部静态定义缓冲区,如下所示:

__local buffer[1024];

使用OpenCL没有其他机会做到这一点。如何创建内核代码字符串以将其传递给OpenCL是另一个与Python相关的问题。我不是这方面的专家。

我不完全理解这个问题。我不使用Python,但非常了解OpenCL

在OpenCL中,有两种可能创建共享/本地内存缓冲区:

1) 您添加了一个内核参数,因为您有问题。 2) 请在内核内部静态定义缓冲区,如下所示:

__local buffer[1024];

使用OpenCL没有其他机会做到这一点。如何创建内核代码字符串以将其传递给OpenCL是另一个与Python相关的问题。我不是这方面的专家。

CUDA支持内核运行时的动态共享内存分配,但机制与OpenCL稍有不同。在CUDA运行时API中,使用动态分配/调整大小的共享内存的内核和调整内存大小的启动使用以下语法:

__global__ void kernel(...)
{
    extern __shared__ typename buffer[];

    ....
}
....
kernel <<< griddim, blockdim, sharedmem, streamID >>> (...)

将共享内存分配大小传递给
prepare
方法。

CUDA支持内核运行时的动态共享内存分配,但机制与OpenCL稍有不同。在CUDA运行时API中,使用动态分配/调整大小的共享内存的内核和调整内存大小的启动使用以下语法:

__global__ void kernel(...)
{
    extern __shared__ typename buffer[];

    ....
}
....
kernel <<< griddim, blockdim, sharedmem, streamID >>> (...)

将共享内存分配大小传递给
prepare
方法。

您的标记错误。你在寻找OpenCL的帮助,而不是CUDA。我在寻找PyCUDA中的特性,它存在于PyOpenCL和CUDA中。我试图将其标记为“PyCUDA”,但该标记尚不存在。我一直想为PyCUDA添加一个标记。现在完成。你的标签错了。你在寻找OpenCL的帮助,而不是CUDA。我在寻找PyCUDA中的特性,它存在于PyOpenCL和CUDA中。我试图将其标记为“PyCUDA”,但该标记尚不存在。我一直想为PyCUDA添加一个标记。现在完成。