0

我想知道是否可以编写在我的程序 Cuda / Optix 中计算的变量的文本文件。那是变量在我的 .cu 文件中,因此不能由 CPU 写入。

4

6 回答 6

5

据我所知,不可能从 CUDA 内核执行文件 I/O。您需要使用cudaMemcpy数据并将其复制回主机内存,然后您可以从那里将值写入文件。

于 2012-07-10T07:55:52.340 回答
0

正如前面的答案所暗示的,不可能通过 CUDA 内核将数据写入文件。如果您的代码涉及多个循环,您可能会想您的程序在每个循环上传输和写入数据的速度有多慢;如果是这样,您应该在给定数量的循环后进行数据传输。换句话说,将文件写入多个循环的块中,而不是在每个循环中。

于 2012-07-10T17:37:29.727 回答
0

我没有使用 Optix 的经验,但据我所知,没有办法从 CUDA 写入文件。您应该将值下载到主机,以便将它们存储到文件中。

您可以使用cudaMemcpy( dstPointer, srdPointer, size, cudaMemcpyDeviceToHost);将数据从设备 (GPU) 复制到主机 (CPU)。请参阅:NVIDIA CUDA 库:cudaMemcpy 请注意,您dstPointer必须足够大才能存储数据!

于 2012-07-10T08:00:59.173 回答
0

不,您无法在设备代码中打开文件;您可以对控制台执行 printf() 以进行调试(在 optix 或 cuda 中,没关系),但无法打开或写入文件。

可能最简单的解决方案是创建一些可以在主机和设备上读写的 CUDA 托管内存 (cudaMallocManaged());将您的变量值写入设备上,然后打开一个文件并将它们转储到主机上。这也适用于 cuda 和 optix。

于 2021-12-14T21:48:57.667 回答
0

我不知道如何打开文件描述符并直接从设备写入;但是,我在 OptiX 中使用rtPrintf1将程序的输出重定向到文件rtPrintf将允许您打印变量等的内容,如果您在打印前加上关键字,您可以grep轻松地打印特定项目。这种策略是调试早期 OptiX 代码甚至在某种程度上跟踪它正在做什么的好方法。

于 2019-06-03T20:29:35.247 回答
0

在 optix 中,您可以使用缓冲区将所有数据传输回主机,一旦将其下载回主机内存,您就可以轻松地将数据转换为 csv 或 txt 格式

于 2015-12-26T16:11:04.847 回答