如何在 CUDA 中实现压缩表
How to implement a compression table in CUDA?
我正在尝试优化我的C++代码,我不知道是否有办法使用 CUDA-C 在 GPU 中存储表。表C++中的当前代码为:
double m_alpha = 0.5;
unsigned char* compressionTable = new unsigned char[65536];
double denom = exp(m_alpha * log(65535.0)) / 255.0;
for (unsigned int i = 0; i < 65536; ++i)
compressionTable[i] = exp(m_alpha * log(i)) / denom;
在我循环访问此表后:
bmode[i][j] = compressionTable[round(abs(sH[i][j]))];
sH 是由短 int 类型数据数组(压缩表2 16 的存储器)获得的希尔伯特变换(复数组)。访问的循环不是一个微不足道的问题,但我的主要问题是压缩表的快速实现。我将不胜感激任何帮助。
如果您确实需要使用查找表,在具有 SM 2.0 或更高版本的 GPU 上,您应该将其放入设备内存中,让缓存处理内存流量。 对于查找表,其他内存空间并不比 L1/L2 更好。
但这看起来像是在 CPU 上运行良好的优化在 GPU 上根本不需要的情况。 CUDA 硬件可以计算单精度对数和指数,延迟仅为 4 个时钟周期。 重写算法以内联方式执行计算,而不是使用查找表。生成的代码将具有较少的数据依赖性能,并且内存子系统将被释放出来,以服务运行内核实际所需的内存流量。
相关文章:
- 如果没有malloc,链表实现将失败
- C++中高效的大型稀疏块压缩线性方程
- 嵌入方指针压缩已禁用
- C++使用整数的压缩数组初始化对象
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 在C++中将函数压缩为两种方式
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在C++中使用LZ4压缩目录
- 在c++中实现LinkedList时,应出现未处理的错误
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- 如何在 CUDA 中实现压缩表
- 实现部分写入压缩数据的存储写入程序