Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.46 KB | None | 0 0
  1. __global__ void SW_GPU(double* memory,long int const m,long int const n, double const d, double const e, long int const N,const char* s1, const char* s2,int* semaphore)
  2. {
  3.     //extern __shared__ int s[];
  4.     //printf("Bez: %d, blockDim: %d, n = %ld\n",(int)n,blockDim.x,n);
  5.     int index = threadIdx.x + blockIdx.x * blockDim.x;
  6.     int stride = blockDim.x * gridDim.x;
  7.     //printf("index: %d Stride: %d N: %ld\n",index,stride,N);
  8.     //printf("%f\n",(float)(m-1)/(blockDim.x/2));
  9.     //printf("blockIdx.x-int((double)(n-1)/(blockDim.x/2)) = %f\n",blockIdx.x-int((double)(n-1)/(blockDim.x/2)));
  10.     //printf("semaphore[blockIdx.x-int((double)(n-1)/(blockDim.x/2))] = %f \n",semaphore[blockIdx.x-int((double)(n-1)/(blockDim.x/2))]);
  11.     //printf("index = %d, blockidx = %d, Semaphor = %d\n",index,blockIdx.x,semaphore[blockIdx.x]);
  12.     //printf("gridDim: %d\n",gridDim.x);
  13.     for (int i = index; i < N; i += stride)
  14.     {
  15.         __syncthreads();
  16.         while(1)
  17.         {
  18.            
  19.             //printf("index = %d i = %d, blockidx = %d, threadID = %d, Semaphor = %d, memory = %f\n",index,i,blockIdx.x,threadIdx.x,semaphore[blockIdx.x],memory[i-1]);
  20.             if(i==0) break;
  21.             //if(blockIdx.x<(int)(double)(n-1)/(blockDim.x/2) && semaphore[blockIdx.x-1]==1) break;
  22.             //if(blockIdx.x>=(int)(double)(n-1)/(blockDim.x/2) && semaphore[blockIdx.x-1]==1 && semaphore[blockIdx.x-int((double)(n-1)/(blockDim.x/2))]==1) break;
  23.             //if(blockIdx.x%(int)(double)(n-1)/(blockDim.x/2)==0 && semaphore[blockIdx.x-int((double)(n-1)/(blockDim.x/2))]==1) break;
  24.  
  25.             if(i<(int)n && semaphore[(i-1)%gridDim.x]>0)
  26.             {
  27.                 semaphore[(i-1)%gridDim.x]--;
  28.                 break;
  29.             }
  30.             if(i>=(int)n && semaphore[(i-1)%gridDim.x]>0 && semaphore[(i-int(n))%gridDim.x]>0)
  31.             {
  32.                 semaphore[(i-int(n))%gridDim.x]--;
  33.                 semaphore[(i-1)%gridDim.x]--;
  34.                 break;
  35.             }
  36.             if(i%(int)n==0 && semaphore[(i-int(n))%gridDim.x]>0)
  37.             {
  38.                 semaphore[(i-int(n))%gridDim.x]--;
  39.                 break;
  40.             }
  41.         }
  42.         if(i%n!=0 && i > n)
  43.         {  
  44.             double simil;
  45.             if(s1[find_index_left(i,n)]==s2[find_index_upper(i,n)]) simil = 1;
  46.             else simil = -3;
  47.             //printf("Hello from block %d, thread %d, index %d, Memory is %f\n", blockIdx.x, threadIdx.x,index,memory[index]);
  48.             //printf("Index: %d\n", i);
  49.             //printf("memory[i-n-1] = %f\n", memory[i-n-1]);
  50.             //printf("find_L:\n");
  51.             //printf("find_ind_l = %d\n",find_index_left(i,n));
  52.             //printf("s1[find_index_left(i,n)] = %c\n",s1[find_index_left(i,n)]);
  53.             //printf("s1 finished\n");
  54.             //printf("s2[find_index_upper(i,n)] = %c\n",s2[find_index_upper(i,n)]);
  55.             //printf("s2 finished\n");
  56.             //printf("sim: = %f\n",simil);
  57.             //printf("sim finished\n");
  58.             //printf("Index: %d, memory[i-n-1] = %f, sim: %d find_ind_l = %d, find_ind_u = %d, memory[i-n] = %f, memory[i-1] = %f\n",i, memory[i-n-1],simil, find_index_left(i,n), find_index_upper(i,n), memory[i-n], memory[i-1]);
  59.             memory[i]=max((double)0,max(memory[i-n-1]+simil,max(memory[i-n] - d,memory[i-1] - d)));
  60.         }
  61.         semaphore[(blockIdx.x)%gridDim.x]=2;
  62.     }
  63.    
  64.    
  65.     //semaphore[blockIdx.x+1]=1;
  66.     //semaphore[blockIdx.x+n]=1;
  67.    
  68.  
  69.     return;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement