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