我正在尝试优化我的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是从 short int 类型数据数组(压缩表216的内存)获得的希尔伯特变换(复杂数组)。访问循环不是一个小问题,但我的主要问题是compressionTable的快速实现。我将不胜感激。

最佳答案

如果确实需要使用查找表,则在SM 2.0或更高版本的GPU上,应将其放在设备内存中,并让缓存处理内存流量。对于查找表,其他内存空间的工作情况都不比L1 / L2好。

但这似乎是在GPU上根本不需要在CPU上运行良好的优化的情况。 CUDA硬件可以以仅4个时钟周期的延迟来计算单精度对数和指数。重写算法以进行内联计算,而不使用查找表。生成的代码将具有较少的与数据相关的性能,并且将释放内存子系统以服务运行内核实际所需的内存流量。

关于c++ - 如何在CUDA中实现压缩表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29817416/

10-11 21:07