the value of the variable s and q changed inside the else if statement … I don’t know why !!! also I can’t debug using parallel Nsight even
#include <iostream>
#include <cuda.h>
#include <cuda_runtime.h>
#include <device_launch_parameters.h>
using namespace std;
# define N 20
__shared__ int partial_c[N];
__global__ void Dev_Matrix_Filling(char* sq1 ,char* sq2, int *c,int len1, int len2)
{
int tid= threadIdx.x+ blockIdx.x*blockDim.x;
int ss,qq;
ss=tid % len1;
qq=tid/ len1;
if (tid<N)
{
if(sq1[ss]==sq2[qq])
partial_c[tid]=2;
else
partial_c[tid]=0;
}
#if defined(__cplusplus) && defined(__CUDACC__)
__syncthreads ();
#endif
int updiag= tid - (len1+1);
int downdiag= tid + len1 +1;
if(tid < N)
{
if (partial_c[tid]==0)
c[tid]=0;
else if (partial_c[tid]!=0)
{
if(((ss==0) && (qq==len2-1)) || ((ss==len1-1) && (qq==0)))
c[tid] = 2;
else if((ss==0)||(qq==0))
{
if(partial_c[downdiag]==0)
c[tid]=2;
else //if (partial_c[downdiag]!=0)
c[tid]=4;
}// up and left
else if((ss=len1-1)||(qq==len2-1))
{
if(partial_c[updiag]==0)
c[tid]=2;
else //if(partial_c[updiag]!=0)
c[tid]=4;
}//down and right
else
{
if((partial_c[updiag]==0)&& (partial_c[downdiag]==0))
c[tid]=2;
else if((partial_c[updiag]!=0&&partial_c[downdiag]==0) || (partial_c[updiag]==0&&partial_c[downdiag]!=0))
c[tid]=4;
else if((partial_c[updiag]!=0 && partial_c[downdiag]!=0))
c[tid]=6;
}
}//big else IF
# if __CUDA_ARCH__>=200
printf(" block %d, thread %d -->>> s=%d,q=%d -->tid=%d updiag=%d down diag= %d c[%d]=%d\n\n",blockIdx.x,threadIdx.x ,ss,qq, tid,updiag,downdiag,tid,c[tid]);
#endif
}//TID<N
}