我知道我们不能用可变数量的参数编写CUDA内核:
Is it possible to have a CUDA kernel with varying number of parameters?
(至少不是C可变参数;我们可以使用C ++可变参数模板。)
但是非内核设备端代码,即__device__
函数呢?这些可以是varargs函数吗?
幸运的是,这不是真的。我们can在设备端代码中使用varargs函数!
例如:
#include <stdio.h>
#include <stdarg.h>
__device__ void foo(const char* str, ...)
{
va_list ap;
va_start(ap, str);
int arg = va_arg(ap, int);
printf("str is \"%s\", extra arg is %d\n", str, arg);
}
此compiles很好(并且可以工作,只要您实际传递一个字符串和一个int)。