我有一段代碼,它由沒有修改權限的對象組成。另一方面,我必須編寫CUDA內核來進行一些計算。此刻,我將所需的信息轉換爲數組或結構並傳遞給它。是否有可能將對象傳遞給CUDA內核,並且CUDA內核是否有權訪問該類的私有成員?有些人也向我建議。將C++對象傳遞給CUDA內核
回答
您可以在您的CUDA代碼中使用C++功能。它有一些額外的要求。例如內核函數不能是我的一個類的成員。對於使用你自己的數據結構,它需要符合一些要求。作爲__device__
__device__
構造函數,你需要在設備代碼中使用
- 成員應註明。
- 如果你的結構封裝指針,這需要在設備內存中分配。
- 您可以使用模板,但不能使用具有虛擬功能的類。
您可以在編程指南的附錄D. C/C++語言支持中看到C++數據結構的一些示例。
至於你的具體問題:
- 是的,你可以在內核傳遞對象。您需要爲其實施
__device__
複製構造函數。 - 您可以通過班級方法訪問私人成員。您應該使用
__device__
訪問器方法在課堂外使用它。 但是你不能通過內核調用傳遞具有私有成員的類。
首先感謝您的回答。我仍然對主查詢有疑問。假設我有一個C++類ex: - class A(){private:int x;}。現在,我將這個類的一個對象傳遞給另一個文件中的cuda內核。現在,內核如何訪問私有變量。我必須包含內核的類定義才能理解。但是,然後我得到它是無法訪問的錯誤。如果我在類定義中包含__global__函數(),那麼g ++將無法編譯它。如何去做。 –
你能提供一些代碼的例子嗎? – geek
我有一個C++文件fil1.c頭文件file.h,它有一個類的定義 - class A {private:int x; void funct();}。在file1.c中實現的funct函數中,我調用了file2.cu中的函數,並說B(),並且我將B的對象objx傳遞給B。現在B()調用cuda內核K <<<1,1000> >>(objxDev )其中objxDev是類A的一個對象,並且在設備端用適當的memcpy進行了連接。問題是,在內核代碼中,我查詢objx.x,並且出現無法訪問的錯誤。我必須賦予這個內核函數訪問私有成員x的權力,並且不需要afftg A級。 –
- 1. 將結構傳遞給CUDA內核
- 2. 將類對象傳遞給內核
- 3. 虛擬繼承傳遞給cuda內核函數的對象
- 4. Cuda編程 - 將嵌套結構傳遞給內核
- 5. 將C++對象傳遞給C#
- 6. 將C++/CUDA類傳遞給PyCUDA的SourceModule
- 7. 將參數傳遞給內部對象
- 8. 將數組傳遞給Cuda
- 9. ASP.NET C#將對象傳遞給方法
- 10. 將C#對象傳遞給vbscript
- 11. 將元素傳遞給C#對象 - LINQ
- 12. 將RtMidi對象傳遞給函數(C++)
- 13. 將PySide對象傳遞給C++
- 14. C++將類對象傳遞給函數
- 15. 將對象傳遞給Arraylist
- 16. 將對象傳遞給onreadystatechange
- 17. 將對象傳遞給UserControl
- 18. 將對象傳遞給viewmodel
- 19. 將對象傳遞給Spark
- 20. 將對象傳遞給UITypeEditor
- 21. 如何使用常量內存將結構數組傳遞給CUDA內核
- 22. 將參數傳遞給內核模塊
- 23. 將struct傳遞給cudafy.net中的內核
- 24. 將對象內的對象作爲參數傳遞給函數
- 25. 如何將所需的jQuery對象傳遞給內部對象?
- 26. 將對象傳遞給jrxml,並將對象傳遞給其子報表
- 27. 在cuda內核中聲明CPP對象
- 28. 本地對象參數至CUDA內核
- 29. 只能將一個類傳遞給CUDA內核進行並行評估?
- 30. 將抽象Graphics對象傳遞給paintComponent()
請教[這個答案](http://stackoverflow.com/a/14119245/1593077)到一個相關的問題。 – einpoklum