2012-07-10 98 views

回答

4

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

0

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

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

0

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

+0

我很抱歉,但我不”你真的明白你想说什么。 'loop'是什么意思?内核运行?我会说数据输出的频率取决于** Emmanuel **想要做的事情。请澄清你的答案。此外,标点可能有助于...... ;-) – kroneml 2012-07-11 07:39:28

+0

我想说的是,如果内核是通过多个循环执行的,并且需要为文件写入某个变量或一组变量,并且该变量的值为在每个循环中更新,你应该把它写在多个循环块中,而不是在每一个循环中,以便节省你的代码传输时间(例如,通过单个传输和写入写入x(1:1000),而不是传输和写入每个x(i)),如果没有,则这是有用的。的循环过高,你需要监视变量的行为,而不是等待整个循环完成,这是一个小小的提示,不是一个大问题 – Alphajet 2012-07-11 10:16:16

0

在Optix公司,您可以将所有的数据传送回使用缓冲区,一旦它被下载回主机内存,你可以很容易地将数据转换成CSV或TXT格式主办