我的CUDA程序遭受了不连续的全局内存访问问题。虽然第idx个线程只处理数组中的[idx]单元格,但下面显示了许多间接内存访问。
int idx=blockDim.x*blockIdx.x+threadIdx.x;
.... = FF[m_front[m_fside[idx]]];
对于m_fside[idx],我们已经合并了访问,但实际上我们需要的是FF[m_front[m_fside[idx]]]。存在两级间接访问。
我试图找到m_front或m_fside中数据的一些模式,以使其成为直接顺序访问,但发现它们几乎是“随机”的。
有没有可能解决这个问题?