#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,它有两个参数:

  1. 整数 n,表示要处理的元素个数。
  2. 一个函数指针 func,指向一个函数,该函数将被用于计算每个元素的结果。

kernel 函数内部,我们可以使用 blockIdx.xthreadIdx.x 计算当前线程的索引,然后调用传递进来的函数指针 func 来计算当前元素的结果,并打印出来。

main 函数中,我们定义了一个整数 n,表示要处理的元素个数,并调用 kernel 函数来处理这些元素。我们将 n 和一个指向 square 函数的函数指针传递给 kernel 函数。square 函数是一个设备函数,它将计算传递进来的整数的平方,并返回结果。最后,我们调用 cudaDeviceSynchronize 来等待所有核函数完成,以确保我们可以正确地获取结果并打印它们。

CUDA 核函数参数示例:函数指针

原文地址: https://www.cveoy.top/t/topic/ntB6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录