我的程序運行2個線程 - 線程A(用於輸入)和B(用於處理)。我還有一對指向2個緩衝區的指針,以便當線程A完成將數據複製到緩衝區1時,線程B開始處理緩衝區1,線程A開始將數據複製到緩衝區2中。然後,當緩衝區2滿時,線程A會複製數據輸入緩衝區1和線程B處理緩衝區2,等等。cudaMemcpy無效的參數
當我嘗試將cudaMemcpy Buffer []放入d_Buffer(之前由主線程cudaMalloc'd,即線程創建之前的Buffer []也被主線程malloc'd)時,我的問題就出現了。我得到一個「無效參數」的錯誤,但不知道哪一個是無效的參數。
我已經將我的程序減少到單線程程序,但仍使用2個緩衝區。也就是說,複製和處理一個接一個地發生,而不是同時發生。 cudaMemcpy行與雙線程完全相同。單線程程序正常工作。
我不確定錯誤在哪裏。
謝謝。
問候, 雷恩
謝謝!我發現cuCtxPushCurrent和cuCtxPopCurrent,它們是驅動程序API。是否有用於上下文遷移的運行時API?我可以將運行時API和驅動程序API混合到同一個程序中嗎? – Rayne 2011-04-11 07:30:31
沒有運行時API上下文管理例程,因爲上下文在運行時API中被隱式/抽象掉了。但是,自CUDA 3.1發佈以來,可以安全地混合運行時API和驅動程序API調用。您可能會發現使用驅動程序API創建上下文並將其從一個線程遷移到另一個線程是最容易的,在上下文中使用運行時API執行其餘操作。請注意,上下文遷移本身並不是免費的,它確實會增加一點延遲,但它是官方的方式來做你想要的CUDA 4.0之前的版本 – talonmies 2011-04-11 07:45:48
我想試用CUDA 4.0。我是否簡單地將CUDA 4.0安裝在當前安裝的CUDA 3.2上?我是否需要刪除任何內容司機等? – Rayne 2011-04-12 03:10:01