2009-12-24 99 views
2

我對OpenCL相當陌生,請耐心等待。OpenCL紋理內存

在我的代碼的第一次迭代中,我使用了大型數據集的基本內存緩衝區並將它們聲明爲全局的。但是現在我正在尋找改進時機,我想爲此使用紋理內存。在CUDA版本中,我們使用cudaBindTexture和tex1Dfetch來獲取大型1D浮點數組的數據。根據我對規範的理解,紋理內存與圖像內存是一樣的。但是,由於只有最大高度和寬度的2D和3D圖像對象,所以我遇到了一些問題。我的數組大於最大高度/寬度,但不是最大高度*最大寬度。我必須將我的一維數組轉換爲2D嗎?還是有更好的方法來做到這一點?

還是我完全沒有?

我的確讀過http://forums.nvidia.com/index.php?showtopic=151743http://forums.nvidia.com/index.php?showtopic=150454,但他們對於最佳實踐和編程指南中提到的紋理存儲器是否實際上是圖像對象並不完全確定。

感謝和任何幫助/建議,非常歡迎!

回答

3

我找到了最好的答案,作爲對我在NVidia論壇here上的帖子的回覆。

+0

是的,這解釋得很好。 – goger 2009-12-31 18:10:35

1

我的數組大於最大高度/寬度,但不是最大高度*最大寬度。我必須將我的一維數組轉換爲2D嗎?

是的,紋理硬件對最大索引值有約束。如果您超過這些值,則需要轉換爲使用多個索引值。

這就是說,我並不是暗示轉換到紋理訪問會加快你的程序。

+0

在使用全局內存的情況下,read_only映像紋理內存通常會因內核緩存而提供更好的性能。我從中獲得了不錯的性能提升。 – achinda99 2009-12-31 17:24:35

+0

對這個問題有什麼想法? http://forums.nvidia.com/index.php?showtopic=154686 – achinda99 2009-12-31 17:29:32

1

OpenCL 1.2支持1D紋理。問題是,NVIDIA只支持OpenCL 1.1,不像AMD或Intel ...