【发布时间】:2016-06-07 04:03:25
【问题描述】:
我想在以下代码中优化随机访问读取和随机访问写入:
__global__ void kernel(float* input, float* output, float* table, size_t size)
{
int x_id = blockIdx.x * blockDim.x + threadIdx.x;
if (x_id > size)
return;
float in_f = input[x_id];
int in_i = (int)(floor(in_f));
int table_index = (int)((in_f - float(in_i)) * 1024000.0f );
float* t = table + table_index;
output[table_index] = t[0] * in_f;
}
如您所见,表和输出的索引是在运行时确定的,并且完全随机。
我知道我可以使用纹理内存或__ldg() 来读取此类数据。
所以,我的问题是:
- 有没有比使用纹理内存或
__ldg()读取随机索引数据更好的方法? - 如上面
output[table_index]的情况,随机访问写呢?
实际上,我在这里添加代码是为了给出随机访问读写的示例。我不需要代码优化,我只需要对处理这种情况的最佳方法进行高级描述。
【问题讨论】: