GPU 线程的线程本地内存的最大大小 (C++ AMP)

Max size of thread local memory of a GPU thread (C++ AMP)

我想在每个线程上创建一个 100 的整数数组和另一个 ~10-100 整数的数组(因用户输入而异)。我将在一个线程上多次重复使用 array_views 中的数据,因此我想将数组视图的内容复制为本地数据以提高内存访问时间。 (每个线程负责 "own" array_view 的 100 个元素,用我的算法不可能为每个元素创建一个线程)如果不可能,tile 静态内存也可以解决问题,但是本地线程会更好。

我的问题是,我可以在本地线程上分配多少字节 variable/array(可在大多数 GPU 上运行的最小数量)? 此外,我可以使用哪种软件查询我的 GPU 的功能(每个线程的寄存器数量、每个图块的静态内存大小等)。CUDA SDK 有一个查询 GPU 功能的实用程序应用程序,但我有一个 AMD一个,Radeon HD 5770,如果我没记错的话,它不会在我的 GPU 上工作。

Opencl api 可以查询 gpu 或 cpu 设备以获得 opencl 程序的功能,但对于任何本机优化的结构,结果应该相似。但如果你的 C++ AMP 是基于 HLSL 或类似的,你可能无法使用 LDS。

每个计算单元 32kB LDS 和 24kB 常量缓存意味着当您选择每个计算单元 32 个线程时,每个线程可以有 1kB LDS + 0.75kB。但是驱动程序可能会将其中的一些用于其他目的,您可以随时测试不同的尺寸。查看恒定缓存带宽,其性能是 LDS bw 的 2 倍。

如果您使用这些数组而不与其他线程共享(或没有任何同步),您可以使用每个计算单元 256kB 寄存器 space(每个线程 8kB(每个 cu 设置 32 个线程))带宽是 LDS 的六倍。但总有一些限制,所以实际可用价值可能是这个的一半。

取自http://developer.amd.com/wordpress/media/2013/07/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide-rev-2.7.pdf

的附录-d