将结果写入CUDA/Optix中的文本文件

将结果写入CUDA/Optix中的文本文件,cuda,optix,Cuda,Optix,我想知道是否有可能编写一个文本文件,其中包含在我的程序Cuda/Optix中计算的变量。这是因为变量在我的.cu文件中,因此无法由CPU写入。据我所知,不可能从CUDA内核执行文件I/O。您需要使用cudaMemcpy并将数据复制回主机内存,然后从那里可以将值写入文件。据我所知,不可能从CUDA内核执行文件I/O。您需要使用cudaMemcpy并将数据复制回主机内存,然后从主机内存将值写入文件。我没有使用Optix的经验,但据我所知,无法从CUDA写入文件。您应该将值下载到主机,以便将其存储到文

我想知道是否有可能编写一个文本文件,其中包含在我的程序Cuda/Optix中计算的变量。这是因为变量在我的.cu文件中,因此无法由CPU写入。

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

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

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

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

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

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

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

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

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

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

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

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

对不起,我真的不明白你想说什么。你说的“循环”是什么意思?内核运行?我想说,数据输出的频率取决于Emmanuel想要做什么。请澄清你的答案。此外,标点符号可能有助于…;-)我想说的是,如果内核是通过多个循环执行的,您需要将某个变量或一组变量写入一个文件,并且该变量的值在每个循环中更新,那么您应该将其写入多个循环的块中,而不是每个循环中,以节省代码的传输时间(即写入x(1:1000)通过一次传输和写入,而不是每次传输和写入x(i)),如果循环数量太多,并且您需要监视变量的行为,而不是等待整个循环完成,这是一个小提示,不是一个大交易,很抱歉,但我真的不明白您想说什么。你说的“循环”是什么意思?内核运行?我想说,数据输出的频率取决于Emmanuel想要做什么。请澄清你的答案。此外,标点符号可能有助于…;-)我想说的是,如果内核是通过多个循环执行的,您需要将某个变量或一组变量写入一个文件,并且该变量的值在每个循环中更新,那么您应该将其写入多个循环的块中,而不是每个循环中,以节省代码的传输时间(即写入x(1:1000)通过一次传输和写入,而不是每次传输和写入x(i)),如果循环的数量太多,并且您需要监视变量的行为,而不是等待整个循环完成,这是一个小提示,不是什么大问题,那么这将非常有用