我想知道是否可以编写在我的程序Cuda / Optix中计算的变量的文本文件。这些变量在我的.cu文件中,因此无法由CPU写入。
答案 0 :(得分:4)
据我所知,无法从CUDA内核执行文件I / O.您需要使用cudaMemcpy
并将数据复制回主机内存,然后您可以将值写入文件。
答案 1 :(得分:0)
我没有使用Optix的经验,但就我所知,没有办法从CUDA写入文件。您应该将值下载到主机,以便将它们存储到文件中。
您可以使用cudaMemcpy( dstPointer, srdPointer, size, cudaMemcpyDeviceToHost);
将数据从设备(GPU)复制到主机(CPU)。请参阅:NVIDIA CUDA Library: cudaMemcpy
请注意,您的dstPointer
必须是存储数据的最大值!
答案 2 :(得分:0)
如前面的答案所示,通过CUDA内核将数据写入文件是不可能的。如果你的代码涉及多个循环,你可能会想到你的程序在每个循环上传输和写入数据的速度有多慢;如果是这样,您应该在给定数量的循环后进行数据传输。换句话说,将文件写入多个循环的块中,而不是每个循环。
答案 3 :(得分:0)
在optix中,您可以使用缓冲区将所有数据传输回主机,一旦将其下载回主机内存,您就可以轻松地以csv或txt格式转换数据
答案 4 :(得分:0)
我不知道一种打开文件描述符并直接从设备写入文件的方法;但是,我已经在OptiX中使用rtPrintf
1来将程序的输出重定向到文件。 rtPrintf
将允许您打印变量等的内容,如果在打印内容前加上关键字,则可以grep
轻松地输入特定项目。这种策略是调试早期OptiX代码甚至在某种程度上跟踪其行为的好方法。