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