【发布时间】:2023-03-12 20:32:01
【问题描述】:
我想知道是否可以编写一个包含在我的程序 Cuda / Optix 中计算的变量的文本文件。那是变量在我的 .cu 文件中,因此不能由 CPU 写入。
【问题讨论】:
我想知道是否可以编写一个包含在我的程序 Cuda / Optix 中计算的变量的文本文件。那是变量在我的 .cu 文件中,因此不能由 CPU 写入。
【问题讨论】:
据我所知,不可能从 CUDA 内核执行文件 I/O。您需要使用cudaMemcpy 并将数据复制回主机内存,然后您可以从那里将值写入文件。
【讨论】:
我没有使用 Optix 的经验,但据我所知,没有办法从 CUDA 写入文件。您应该将值下载到主机,以便将它们存储到文件中。
您可以使用cudaMemcpy( dstPointer, srdPointer, size, cudaMemcpyDeviceToHost); 将数据从设备 (GPU) 复制到主机 (CPU)。见:NVIDIA CUDA Library: cudaMemcpy
请注意,您的 dstPointer 必须足够大才能存储数据!
【讨论】:
正如前面的答案所暗示的,不可能通过 CUDA 内核将数据写入文件。如果您的代码涉及多个循环,您可能会想您的程序在每个循环上传输和写入数据的速度有多慢;如果是这样,您应该在给定数量的循环后进行数据传输。换句话说,将文件写入多个循环的块中,而不是在每个循环中。
【讨论】:
在 optix 中,您可以使用缓冲区将所有数据传输回主机,一旦将数据下载回主机内存,您就可以轻松地将数据转换为 csv 或 txt 格式
【讨论】:
我不知道如何打开文件描述符并直接从设备写入;但是,我在 OptiX 中使用了rtPrintf1 来将程序的输出重定向到文件。 rtPrintf 将允许您打印变量的内容等,如果您在打印前加上关键字,您可以轻松地为特定项目使用grep。这种策略是调试早期 OptiX 代码的好方法,甚至可以在某种程度上跟踪它正在做的事情。
【讨论】:
不,您无法在设备代码中打开文件;您可以对控制台执行 printf() 以进行调试(在 optix 或 cuda 中,没关系),但无法打开或写入文件。
可能最简单的解决方案是创建一些可在主机和设备上读写的 CUDA 托管内存 (cudaMallocManaged());将您的变量值写入设备上,然后打开一个文件并将它们转储到主机上。这也适用于 cuda 和 optix。
【讨论】: