各位[名词2]好,最近在研究一个GPU加速的例子,本身是一个查找表,要对这个查找表进行并行,大概的结构是一个(N*M)的矩阵,N行都各自独立,且分配一个线程,核函数中是对每一行的数据进行处理。但是现在有个问题是,运行一次核函数,里面需要循环,每一行的结构大概是这样(1+4*n),1代表是要循环多少次(times),然后每次一次的计算是涉及到4个数据,当然这里的n是固定的,并且这一行不一定填满,主要还是看这一行最开头的数据是多少。另外每进行一次循环利用这四个数据的时候,都会涉及到if判断。最终我发现,这样子的核函数运行似乎很慢,我的理解是因为循环和判断过多。(当然我的查找表是直接存放在全局内存,不涉及内存加速访问的效果),想请教一下,我该如何才能加速这个例子。下面是我的代码框架,其中涉及的一些参数我没有给出,大致的意思就是核函数包含一个循环以及一些判断,是否能够通过改进内存的调用或者改进核函数的写法来提高速度??? 拜谢!!!
__global__ void kernel()
{
int tid = blockIdx.x * blockDim.x + threadIdx.x;
int i = tid / mappingWidth;
int j = tid - i * mappingWidth;
if (i > 0 && i < LStitching_height - 1 && j>0 && j < LStitching_width - 1)
{
int numpic=*(lastpano_gpu+(i*mappingWidth+j)*(1+4*

+0);
for(int k=0;k<numpic;k++)
{
int nowpic=*(lastpano_gpu+(i*mappingWidth+j)*(1+4*

+4*k+1);
srcLocationX = *(lastpano_gpu+(i*mappingWidth+j)*(1+4*

+4*k+2);
srcLocationY = *(lastpano_gpu+(i*mappingWidth+j)*(1+4*

+4*k+3);
alpha=*(lastpano_gpu+(i*mappingWidth+j)*(1+4*

+4*k+4);
if(nowpic==0)
{
.....
}
if(nowpic==1)
{
.....
}
if(nowpic==2)
{
.....
}
if(nowpic==3)
{
.....
}
if(nowpic==4)
{
.....
}
if(nowpic==5)
{
.....
}
if(nowpic==6)
{
.....
}
if(nowpic==7)
{
.....
}
}