2012-07-10 46 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格式主辦