Here’s part of the code :0
__global__ void SWKernel(char *g1,char *g2,char *g3,int *gMaxValue12,int *gMaxValue13,int *gMaxValue23,int seq1Size,int seq2Size,int seq3Size,int *distance12,int *trace12,int *distance13,int *trace13,int *distance23,int *trace23){
int diagonalId,dig,l,u,maxValue,tmp,tmpDist,tmpMaxI,tmpMaxJ,tmpDir,x,y,lx,ly,tx,ty,bx,by,i,caseId;
tmp = tmpDist = tmpMaxI = tmpMaxJ = 0;
tmpDir = STOP;
dig = l = u = -1;
tx = threadIdx.x;
ty = threadIdx.y;
bx = blockIdx.x;
by = blockIdx.y;
lx = x = bx*blockDim.x+tx;
ly = y = by*blockDim.y+ty;
caseId = 0;
diagonalId = x+y;
if(x<seq1Size && y<seq2Size){
caseId = 1;
}else if(x>=seq1Size && x<(seq1Size+seq3Size) && y<seq2Size){
caseId = 2;
lx = x-seq1Size;
}else if(x<seq1Size && y>=seq2Size && y<(seq2Size+seq3Size)){
caseId = 3;
ly = y-seq2Size;
}
printf("tx~%d ty~%d bx~%d by~%d x~%d y~%d diagonalId~%d caseId~%d lx~%d ly~%d\n",tx,ty,bx,by,x,y,diagonalId,caseId,lx,ly);
__shared__ char sgX[BLOCK_SIZE];
__shared__ char sgY[BLOCK_SIZE];
if(y==0 && x<seq1Size){
sgX[tx] = g1[x];
}else if(x==0 && y<seq2Size){
sgY[ty] = g2[y];
}else if(y==0 && x>=seq1Size && x<(seq1Size+seq3Size)){
sgX[tx] = g3[x-seq1Size];
}else if(x==seq1Size && y<seq2Size){
sgY[ty] = g2[y];
}else if(y==seq2Size && x<seq1Size){
sgX[tx] = g1[x];
}else if(x==0 && y>=seq2Size && y<(seq2Size+seq3Size)){
sgY[ty] = g3[y-seq2Size];
}
__syncthreads();
......
}