我正在设计一组数学函数并在 CPU 和 GPU(使用 CUDA)版本中实现它们。
其中一些函数基于查找表。大多数表占用 4KB,其中一些需要更多。基于查找表的函数接受一个输入,选择查找表的一个或两个条目,然后通过插值或应用类似技术来计算结果。
我现在的问题是:我应该在哪里保存这些查找表?CUDA 设备有许多存储值的地方(全局内存、常量内存、纹理内存……)。假设每个表可以被多个线程同时读取,并且输入值以及查找索引在每个 warp 的线程之间可以完全不相关(导致不相关的内存访问),那么哪个内存提供最快的访问?
我补充说,这些表的内容是预先计算的并且完全不变。
编辑
澄清一下:我需要存储大约 10 个不同的 4KB 查找表。无论如何,很高兴知道对于这种情况的解决方案是否与例如 100 个 4KB 表或例如 10 个 16KB 查找表的情况相同。