有人知道如何声明ArrayFire中的数据数组应该存储在共享内存中而不是全局内存中吗?这个是可能的吗?我有一小部分数据需要被所有线程随机访问。它是一个常量的查找表,应该可以在应用程序的生命周期内使用。也许我只是错过了一些显而易见的东西,但是阅读ArrayFire文档和谷歌搜索并没有发现任何关于我如何告诉ArrayFire我的数据需要进入共享内存的信息。
发布于 2015-04-07 04:42:08
在CUDA中,共享内存(OpenCL中的本地内存)是位于GPU上的一种非常快速的内存类型。它的生存期与线程块相同,只能由同一线程块中的线程访问。因此,它不能用于存储需要多个内核使用的持久性数据,即使在原始数据自动化系统中也是如此。您可能需要查看常量或纹理内存来实现查找表(LUT)。这些内存类型通常更适合于您通常遇到的LUT访问类型。
ArrayFire有一个高级别的API,这使得GPU编程变得容易,它是许多常用函数中最快的实现之一。使用ArrayFire,您将无法指定创建了哪种类型的内存,但是您可以在自己的内核中自由地使用这些数据。如果您正在使用我们的函数之一,那么很可能我们将在有意义的地方使用共享/纹理/常量内存。
奥马尔
披露:我是ArrayFire的开发人员之一。
https://stackoverflow.com/questions/29469756
复制相似问题