我希望能够写一些接近的东西:
std::cout << "Hello" << my_world_string << ", " << std::setprecision(5) << my_double << '\n';
在CUDA设备端代码中,用于调试模板功能-并使此类代码行产生不间断的单个输出行(即,等效于单个CUDA printf()
调用-通常不会被其他线程的输出弄糟了。
当然,这是不可能的,因为在设备端代码中没有文件或文件描述符,在设备端代码中也没有可用的std::ostream
代码。本质上,我们必须配合使用的是启用printf()
的CUDA的硬件和软件黑客。但是显然有可能得到类似的东西:
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
,但它不一定是流。代码也不需要看起来像我布置的那样。关键是我可以在模板化的设备功能中使用打印代码。目前,我正在考虑的实现方式是:
std::stringstream
类,该类可以从其他地方(在构造中)进行初始存储。printf("%s\n", my_gpu_sstream.str())
。malloc()
分配大小可变的缓冲区。鲍勃是你的叔叔。
但是,我真的很想避免自己实现一个完善的字符串流。似乎有很多多余的工作和代码。