CUDA 核函数参数示例:函数指针
#include <stdio.h>
global void kernel(int n, int (*func)(int)) { int index = blockIdx.x * blockDim.x + threadIdx.x; if (index < n) { printf('Result for index %d: %d\n', index, func(index)); } }
device int square(int x) { return x * x; }
int main() { int n = 10; kernel<<<1, n>>>(n, square); cudaDeviceSynchronize(); return 0; }
该示例中,我们定义了一个 CUDA 核函数 kernel,它有两个参数:
- 整数
n,表示要处理的元素个数。 - 一个函数指针
func,指向一个函数,该函数将被用于计算每个元素的结果。
在 kernel 函数内部,我们可以使用 blockIdx.x 和 threadIdx.x 计算当前线程的索引,然后调用传递进来的函数指针 func 来计算当前元素的结果,并打印出来。
在 main 函数中,我们定义了一个整数 n,表示要处理的元素个数,并调用 kernel 函数来处理这些元素。我们将 n 和一个指向 square 函数的函数指针传递给 kernel 函数。square 函数是一个设备函数,它将计算传递进来的整数的平方,并返回结果。最后,我们调用 cudaDeviceSynchronize 来等待所有核函数完成,以确保我们可以正确地获取结果并打印它们。
原文地址: https://www.cveoy.top/t/topic/ntB6 著作权归作者所有。请勿转载和采集!