2015-04-06 59 views
0

有誰知道如何聲明ArrayFire中的數據數組應該存儲在共享內存而不是全局內存中?這可能嗎?我有一小部分數據需要被所有線程隨機訪問。這是一個不斷查找的表格,應該可以在應用程序的整個生命週期中使用。也許我只是想念明顯的東西,但是閱讀ArrayFire文檔和谷歌搜索沒有提供任何有關我如何告訴ArrayFire我的數據需要進入共享內存的信息。在ArrayFire中使用共享內存

+0

共用存儲器具有內核的壽命,並且是本地的一個塊。你想用於像一個小的,不變的查找表是_constant_內存。但是,我不認爲ArrayFire允許你真正地指定數組應該駐留的內存。 – Oblomov 2015-04-08 18:59:20

回答

1

在CUDA中共享內存(OpenCL中的本地內存)是位於GPU上的非常快速的內存類型。它具有與線程塊相同的生命週期,並且只能由同一個線程塊中的線程訪問。因此,它不能用於存儲即使在原始CUDA中也需要由多個內核使用的持久性數據。您可能想要查看常量或紋理內存來實現查找表(LUT)。這些內存類型通常更適合您通常遇到的LUT訪問類型。

ArrayFire具有高級API,可以通過許多常用函數的最快實現之一輕鬆實現GPU編程。使用ArrayFire,您將無法指定創建哪種類型的內存,但您可以自由使用您自己的內核中的數據。如果你正在使用我們的一個函數,那麼我們很可能會在它有意義的地方使用共享/紋理/常量內存。

歐麥爾

披露:我的ArrayFire的開發者之一