簡體   English   中英

如何在此數組(OpenCL)中分配指向某個結構的數組元素的指針?

[英]How to assign pointer to element of array of some struct in this array(OpenCL)?

也許您可以建議我如何在OpenCL中創建層次結構。 如果您擁有“ new”或“ malloc”,這很容易,但是我不知道如何在GPGPU中使用它。 所以我創建了3個內核:

  1. 將sizeof結構發送到主機。
  2. 初始化數據。
  3. 而內核使用在第二個內核中初始化的數據。

我在OpenCL中有這個結構:

    typedef struct some some;
struct some{
    char data[4];
    some* children[8];
};

第一個內核說這個結構的大小是36個字節(數據4個字節,指針32個字節)。

接下來,我根據先前的信息在GPU上分配內存,並調用第二個內核:

kernel void import(global some *buffer){
for(int i=0;i<4;i++){
buffer[0].data[i]=255; //For example, doesn't matter
}
//Now I need to assign pointer to next element of array(buffer) to first element
buffer[0].children[0]=&buffer[1];
}

但是內核無法編譯。 我也嘗試過:

*buffer[0].children[0]=buffer[0];

它可以編譯,但是當然會崩潰。 這在邏輯上是錯誤的)如果沒有分配指針,一切都會很好。 很酷的程序(1個元素)

嘗試使用偏移量或數組索引而不是指針。

typedef struct some some; struct some{ char data[4]; size_t children[8]; // an array of subscripts };

...

// buffer[0].children[0]=&buffer[1]; becomes buffer[0].children[0] = 1;

所以現在您可以通過下標引用一個孩子

buffer[ buffer[0].children[0] ].char[0]

如果您的設備支持OpenCL 2.0,則可以使用Shared Virtual Memory 在主機上創建的指針也將在設備上有效。

Shared Virtual Memory概念的描述以及可在此處此處找到的示例。

暫無
暫無

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

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