2016-11-29 85 views
0

是否可以在OpenCL中的多個內核之間共享指針數組。如果是這樣,我將如何去實施它?如果我沒有完全錯誤 - 可能是這種情況 - 在內核之間共享內容的唯一方式將是一個共享的cl_mem,但是我也認爲它們不能包含指針。OpenCL內核之間共享的指針陣列

+0

請考慮刪除C標籤,因爲這個問題似乎不是關於特定於C編程語言的問題。 –

回答

1

這在OpenCL 1.x中是不可能的,因爲主機和設備具有完全分離的存儲空間,所以包含主機指針的緩衝區在設備端沒有意義。

但是,OpenCL 2.0支持共享虛擬內存(SVM),因此包含指針的內存是合法的,因爲主機和設備共享一個地址空間。儘管有三個不同的粒度級別,這將限制你可以指向哪些指針。在最粗糙的情況下,它們只能引用設備當前擁有的相同緩衝區或其他SVM緩衝區內的位置。是的,cl_mem仍然是將緩衝區傳遞給內核的方式,但在帶有SVM的OpenCL 2.0中,緩衝區可能包含指針。

編輯/增加: OP指出他們只是想共享內核之間的指針。如果這些只是設備指針,那麼可以將它們存儲在一個內核的緩衝區中,並從另一個內核的緩衝區中讀取它們。他們只能引用__global,而不是__local內存。沒有SVM,它們不能在主機上使用。主機當然需要分配緩衝區並將其傳遞給兩個內核以供其使用。就主機而言,它只是不透明的內存。只有內核知道它們是__全局指針。

+0

我知道主機指針不能在GPU上工作。我也瞭解SVM,但這不是我所問的。我只想分享幾個不同內核之間的指針數組。 – Addi

+0

設備指針?然後將它們存儲在一個內核的緩衝區中,並從另一個內核的緩衝區中讀取它們。它們不能在主機上使用。主機當然需要分配緩衝區並將其傳遞給兩個內核以供其使用。 – Dithermaster

+0

好吧,問題是關於如何做到這一點。 – Addi