在CUDA设备端代码中,我们无法访问std :: string和其他标准库的好东西,我们的字符串是char *,char数组或文字常量,作为上述之一传递。
无论如何,假设我想要一个printf()的变体,它总是预先设置线程的索引。我不能使用两个printf调用,因为它会与其他线程的printf交错。我不能冲刺 - 除非我实施。
我可以很容易地做到这一点就是使用一个宏(为了简单起见,只需采用x维并忽略块索引):
#define tprintf(format_str, ... ) \
printf("%u: " format_str, threadIdx.x, __VA_ARGS__)
但是我们不喜欢宏...变量数量参数问题很容易被可变参数模板处理,但是格式字符串连接 - 不是那么多。
我想避免在运行时连接字符串,不得不使用malloc-then-free等。是否有一种简单的(ish)方法可以做到这一点?