簡體   English   中英

使用 pthreads 和 CUDA - 設計問題

[英]Using pthreads with CUDA - design questions

我正在編寫一些需要一些磁盤 I/O 的代碼,並調用我編寫的一個庫,該庫執行一些計算和 GPU 工作,然后更多的磁盤 I/O 將結果寫回文件。

我想將其創建為多線程代碼,因為文件非常大。 我希望能夠讀取文件的一部分,將其發送到 GPU 庫,然后將一部分寫回文件。 所涉及的磁盤 I/O 相當大(如 10GB),並且在 GPU 上的計算速度相當快。

我的問題更像是一個設計問題。 我是否應該使用單獨的線程來預加載進入 GPU 庫的數據,並且只有主線程實際執行對 GPU 庫的調用,然后將結果數據發送到其他線程以寫回磁盤,或者我是否應該提前 go 並讓所有單獨的線程各司其職 - 獲取一大塊數據,在 GPU 上執行,然后寫入磁盤,然后 Z34D1F91FB2E514B8576FAB1A75A8A9 的下一個數據塊?

我正在為我的 GPU 庫使用 CUDA。 cuda 是否足夠聰明,不會嘗試同時在 GPU 上運行兩個內核? 我想我將不得不手動進行管理以確保兩個線程不會嘗試向 GPU 添加更多數據而不是空間?

任何關於多線程和 CUDA 組合使用的好的資源都值得贊賞。

線程對磁盤 I/O 沒有幫助。 通常人們傾向於通過創建大量線程來解決阻塞問題。 事實上,這只會讓事情變得更糟。 您要做的是使用異步 I/O而不是在寫入(和讀取)時阻塞。 您可以為此使用一些通用解決方案,例如libeventAsio ,或者使用您平台上可用的較低級別的 API。 在 Linux 上, AIO似乎是最好的文件,但我還沒有嘗試過。 希望能幫助到你。

我在研究工作中遇到過大文件的這種情況。

據我所知,磁盤 I/O 工作線程化並沒有太大的收獲,因為與 GPU I/O 相比非常慢。

我使用的策略是從磁盤同步讀取並加載數據並在 GPU 上異步執行。

就像是:

read from disk
loop:
 async_load_to_gpu
 async_execute
 push_event
 read from disk
 check event complete or read more data from disk

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM