2015-04-06 86 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的开发者之一