有人知道如何声明ArrayFire中的数据数组应该存储在共享内存中,而不是全局内存中吗?这可能吗?我有一个小数据集,需要所有线程随机访问。它是一个常量查找表,应该在应用程序的生命周期内可用。也许我只是错过了显而易见的东西,但阅读ArrayFire的文档和谷歌搜索并没有找到任何关于我如何告诉ArrayFire我的数据需要进入共享内存的信息。
在CUDA中,共享内存(OpenCL中的本地内存)是位于GPU上的一种非常快速的内存类型。它的生存期与线程块上的生存期相同,并且只能由同一线程块中的线程访问。因此,它不能用于存储需要由多个内核使用的持久数据,即使在原始CUDA中也是如此。您可能需要查看常量或纹理内存来实现查找表(LUT)。这些内存类型通常更适合LUT通常遇到的访问类型。
ArrayFire拥有高水平的API,这使得GPU编程变得简单,是许多常用函数中最快的实现之一。使用ArrayFire,您将无法指定创建哪种类型的内存,但您可以在自己的内核中自由使用数据。如果你正在使用我们的一个函数,那么我们很可能会在有意义的地方使用共享/纹理/常量内存。
Umar
披露:我是ArrayFire 的开发者之一