【发布时间】:2019-10-16 19:20:09
【问题描述】:
我希望能够写出接近于:
std::cout << "Hello" << my_world_string << ", " << std::setprecision(5) << my_double << '\n';
在 CUDA 设备端代码中,用于调试模板化函数 - 并且这种代码行会产生单个完整的输出行(即相当于单个 CUDA printf() 调用 - 通常不会' t 被其他线程的输出破坏)。
当然,这是不可能的,因为设备端代码中没有文件或文件描述符,std::ostream 代码也不能在设备端代码中使用。本质上,我们必须使用的是 CUDA 的硬件+软件 hack 启用 printf()s。但显然有可能得到类似的东西:
stream << "Hello" << my_world_string << ", " << foo::setprecision(5) << my_double << '\n';
stream.flush();
或:
stream << "Hello" << my_world_string << ", " << foo::setprecision(5) << my_double << '\n';
printf("%s", stream.str());
我的问题是:我应该实现什么才能让我编写尽可能接近上述的代码,从而最大限度地减少编写代码的工作量/数量?
注意事项:
- 我使用了标识符
stream,但它不一定是流。代码也不需要看起来像我列出的那样。关键是我能够在模板化的设备函数中打印代码。 - 所有代码都将使用 C++11 编写。
- 代码可能假定编译是使用 C++11 或更高版本的标准执行的。
- 我可以使用现有的 FOSS 代码,但前提是它的许可证是许可的,例如3-BSD、CC-BY-SA、MIT - 但不是 GPL。
【问题讨论】:
标签: c++ debugging cuda iostream stringstream