gpt4 book ai didi

python - 使用 pycuda (lerp) 进行线性插值

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:18 28 4
gpt4 key购买 nike

我是一个刚刚接触 pyCUDA 的休闲 Python 爱好者。我试图弄清楚如何使用 pyCUDA 实现线性插值(lerp)。 CUDA CG函数为:http://http.developer.nvidia.com/Cg/lerp.html

我的最终目标是从一组加权随机点在 pycuda 中进行双线性插值。我从未编写过 C 或 CUDA 程序,并且正在边学习边学习。

这就是我已经走了多远:

import pycuda.autoinit
import pycuda.driver as drv
import pycuda.compiler as comp

lerpFunction = """__global__ float lerp(float a, float b, float w)
{
return a + w*(b-a);
}"""

mod = comp.SourceModule(lerpFunction) # This returns an error telling me a global must return a void. :(

对此的任何帮助都非常棒!

最佳答案

错误消息非常明确 - CUDA 内核无法返回值,它们必须声明为 void,并且可修改的参数作为指针传递。将 lerp 实现声明为设备函数会更有意义,如下所示:

__device__ float lerp(float a, float b, float w)
{
return a + w*(b-a);
}

然后从内核内部调用每个需要插值的值。您的 lerp 函数缺乏大量“基础设施”来成为有用的 CUDA 内核。

<小时/>

编辑:一个真正基本的内核沿着相同的路线可能看起来像这样:

__global__ void lerp_kernel(const float *a, const float *b, const float w, float *y)
{
int tid = threadIdx.x + blockIdx.x*blockDim.x; // unique thread number in the grid
y[tid] = a[tid] + w*(b[tid]-a[tid]);
}

关于python - 使用 pycuda (lerp) 进行线性插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8751310/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com