有谁知道这个函数还能怎么优化?

代码比较初级,要运行19ms,开200000个线程,<<<200000+255/256,256>>>,有哪位大侠知道这个内核函数还能怎么优化?欢迎大家一起讨论哈。。。3q!!
// 滑动构造矩阵函数
global void ConstructMatrix(Complex* input,int r_a, Complex* output, int c_b)
{
//每个线程对应input的每一个元素,并负责填output每一列相对应的元素,一个block有512个thread线程
shared Complex shared[512];
int idx=blockIdx.xblockDim.x+threadIdx.x;
if(idx < r_a)
{
shared[threadIdx.x]=input[idx];
__syncthreads();
for(int i=0;i<c_b;i++)
{
if(idx+i<r_a)
{
output[r_a
i+idx+i].x=shared[threadIdx.x].x;
output[r_a*i+idx+i].y=shared[threadIdx.x].y;
}
}
}
}

具体不明白你干什么,但是你的肯定是由bank冲突的,比如input你是采用的二元组的结构你,那么线程多谢shared mem的时候 线程读取的数据之间的间距是偶数而非奇数,所以存在bank冲突,建议你看看张舒的《GPU高性能计算之CUDA》160页关于共享存储器的优化一节

谢谢!我是对复数进行操作的,这样取数的话就会出现2路的bank冲突,可是不指点这个问题应该如何解决。书上数的方法看了,还是不懂。。。求指教啊!!!