2011-03-24 136 views
1

我有一個100MB的字符數組(h_array),使用cudaHostAlloc()分配的標記爲cudaHostAllocWriteCombined重寫通過cudaHostAlloc()分配的內存

該程序首先將數據複製到主機上的h_array。當h_array已滿時,它將在設備上覆制h_arrayd_array,並完成一些處理。當處理完成時,h_array重複使用,意思是新數據再次從h_array[0]複製到它。新數據旨在覆蓋之前存儲在h_array中的內容。

但是,如果在處理完成後將新數據複製到h_array,則會出現分段錯誤。當我使用常規的malloc時,沒有seg故障錯誤。

出了什麼問題?我是否可以在固定內存時重寫內存?

謝謝!

+1

你是否用cudaSafeCall封裝了所有CUDA運行時調用,並且在內核調用後使用了cudaCheckError?這意味着在分段故障之前的很多問題。 – 2011-03-24 10:37:18

+0

你應該可以做到這一點。你能減少代碼大小來舉例說明你的問題並向我們展示嗎?通常問題在於細節... – CygnusX1 2011-03-24 13:09:35

回答

1

您的CUDA上下文可能會以某種方式從您的下拉開。

例如,如果您在一個隨後退出的線程中分配固定主機內存,內存將消失。

確保執行分配的線程堅持到位!