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