2011-04-19 116 views
3

所以我想在設備上分配一個具有虛函數的對象,然後調用一個內核並執行一些虛函數。我嘗試了兩種方法來做到這一點,但都沒有成功:在CUDA內核中使用虛函數

1)使用cudaMalloc和cudaMemcpy從主機分配和複製對象。這在包含主機內存指針的虛擬函數表上進行復制,這些指針在設備上執行時顯然會使內核崩潰。

2)從第二個內核分配對象,將設備內存指針保存到對象並將該指針傳遞給原始內核。但是,由於內核不同,內核執行時功能不在設備內存中的相同位置,虛擬功能表不正確,並且在使用內核時崩潰內核。

我只能在內核中創建的對象中使用虛函數來調用函數嗎?

我可以以某種方式引用原始內核,當我分配我的對象來獲得虛函數表正確嗎?

我甚至可以理解實際問題在這裏嗎?

+0

有一個較新的問題,這個重複,[我已經回答](http://stackoverflow.com/questions/12701170/cuda-virtual-class/12704054#12704054)。由於OP自2011年4月以來沒有訪問過SO,所以投票結束這一次。 – harrism 2012-10-03 07:50:08

回答

1

我甚至可以理解實際問題在這裏嗎?

它的一部分。

正如你在cuda中嘗試C++沒有完全支持。僅從4.0開始,您可以使用虛擬功能。

  1. 確保您有4.0驅動程序/ api。

  2. 發佈您的錯誤日誌。

+0

對不起,我使用的是4.0,而且我有一個計算能力2.1卡。如果我分配對象然後在同一個內核中調用該函數,則虛擬函數調用的工作原理應該完全相同。它只是通過內核,我有一個問題。我沒有得到一個錯誤日誌,內核只是在沒有打印它應該打印的東西的情況下拋出。我沒有太多注意錯誤代碼或者它可能產生的任何東西。 – 2011-04-19 23:08:16