2014-05-12 110 views
1

我使用的結構如下。我們可以在opencl中使用結構體的結構嗎?

struct domain_data 
{ 
    int *no_h_domains, 
    *no_v_domains, 
    *domain_hsize, 
    *domain_vsize, 
    *domain_hstep, 
    *domain_vstep; 
    struct domain_pixels 
    { 
      int dom_x, dom_y; 
      double sum,sum2; 
      int sym; 
    } ***pixel; 

} domain; 

但是當我嘗試

domain.pixel =(結構domain_pixels ***)的malloc(I *的sizeof(結構domain_pixels **));

然後它給出以下錯誤。

錯誤C2440: '=':不能從轉換 'domain_pixels ' 到 'domain_data :: domain_pixels'

類型的值「domain_pixels *「不能被分配給類型爲」domain_data :: domain_pixels *「的實體」

但是,相同的代碼在win32應用程序中執行得非常好。

誰能告訴我,我是否可以在opencl中做到這一點?如果是,那麼如何?

+0

我不完全確定這是如何編譯在一個正常的C/C++應用程序,所以我不會發布這個答案。它似乎在使用指向其他結構的指針,所以它在opencl或cuda中不起作用。指向全局內存的指針不允許作爲或在參數中傳遞。 – mfa

+0

當你問你是否可以在OpenCL中做到這一點時,我不確定你的意思。 「malloc」在OpenCL C中無效,因此您必須詢問您的主機代碼,但主機代碼是常規的C/C++,並且您說這在win32應用程序中可以正常工作。我認爲這只是一個「C」問題,與OpenCL無關。 – Dithermaster

+0

謝謝Dithermaster!即使這是一個c問題,當我使用openCL SDK的項目類型時,它會給出這個錯誤,並且在win32應用程序中正常工作。我也想把這些數據發送到設備上!那麼我可以將這些數據發送到設備上嗎? – MenkaMore

回答

0

它應該是可行的使用OpenCL 2.0 &支持細粒度緩衝區的SVM。 英特爾正計劃開始使用BDW進行SVM支持。

+0

您能否澄清/鏈接SVM和BDW在這方面的含義? –

+0

SVM - 共享虛擬內存 BDW - Broadwell – Elalfer

1

問題不在於結構的結構,問題出在你的結構的指針和三指針上。

不允許在OpenCL中傳遞指針。 即使沒有,它也不會工作,因爲OpenCL中不允許malloc。

在嘗試複製粘貼一個期望它直接工作的怪獸C代碼之前,請閱讀指南和教程。

0

當我創建另一個OpenCl項目並在那裏複製相同的代碼時,那麼該錯誤被刪除!所以謝謝大家的回覆!

相關問題