有很多現實世界的原因,你想這樣做。 Ours是因爲我們有一個可變長度數據結構的列表,我們希望能夠改變其中一個元素的大小而不用重新複製它們。如何解決inabilty將cl_mem列表傳遞給內核調用?
這裏是我試過幾件事情:
- 只是有很多的內核參數。當然,聽起來很不合適,但適用於小N.這實際上是我們一直在做的。
- 做1)與某種宏循環擴展內核參數的最大值(我認爲是設備相關的)。我真的不想這樣做......聽起來很糟糕。
- 創建一些包含指針的結構列表,並在內核調用之前填充它。我試過了,我認爲它違反了規範。根據我在nVidia論壇上看到的,在一個內核調用之外保存設備指針的地址是非法的。如果任何人都可以指出規範中的說法,我很想知道,因爲我找不到它。然而,它在ATI硬件上肯定會崩潰,因爲它會移動物體。
- 放棄,將變量大小的對象存儲在一個大數組中,然後編寫一個聰明的算法來使用空的空間,這樣整個數組必須不經常重排。這會起作用,但是是一個不雅,複雜的設計。此外,它需要大量的可怕的指針算術...
其他人有其他想法嗎?試圖做到這一點的經驗呢?有沒有最簡單的方法?爲什麼?