【发布时间】:2022-04-25 03:27:45
【问题描述】:
我在互联网上找不到任何东西。由于可以在__device__ 函数中使用printf,我想知道是否有类似sprintf 的函数,因为printf 正在“使用”来自sprintf 的结果显示在stdout。
【问题讨论】:
我在互联网上找不到任何东西。由于可以在__device__ 函数中使用printf,我想知道是否有类似sprintf 的函数,因为printf 正在“使用”来自sprintf 的结果显示在stdout。
【问题讨论】:
不,CUDA 中没有为此内置任何东西。
在 CUDA 中,设备 printf 的实现是一种特殊情况,它不使用与 C 库 printf 相同的机制。
【讨论】:
sprintf() 实现共享。
printf(),但由于该存储库被放弃了,我统一了所有的分支,承担了维护工作,以及fixed many bugs and other issues。这导致了:eyalroz/printf,我现在可以推荐它作为任何系统的独立实现。
sprintf()、snprintf() 和其他 printf()-family 函数现在可在 CUDA Kernel Author's Toolkit(又名 cuda-kat)的开发分支上使用。签名:
namespace kat {
__device__ int sprintf(char* s, const char* format, ...);
__device__ int snprintf(char* s, size_t n, const char* format, ...);
}
... 他们完全按照您的预期行事。特别是,它们支持 CUDA printf() 不 的 C 标准特性,然后是一些(例如,使用额外参数指定字符串参数的字段宽度;size_t 和 @987654328 的格式说明符@,并以 base-2 打印)。
警告:我是 cuda-kat 的作者,所以我有偏见......
总是更喜欢snprintf(),它占用缓冲区大小而不是sprintf(),这可能会溢出。
【讨论】: