                 {
                         //Listing 9: Warp-based, strip-mined neighbor gathering
                         int v, r, r_end;
-                        int k = threadIdx.x;
+                        int k = lane_id*WARP_SIZE + warp_id;
 
                         if(k < Q_len)
                         {
                                 v = Q_row[k];
+				//v = Q_row[lane_id*WARP_SIZE + warp_id]; //strided access into the queue to provide better load balancing across warps
                                 r = R[v];
                                 r_end = R[v+1];
                         }

{
        int j = threadIdx.x;
        int lane_id = getLaneId();
        __shared__ int  *Q_row;
        __shared__ int *Q2_row;


                                k+=blockDim.x;
                                if(k < Q_len)
                                {
					v = Q_row[k];
					//v = Q_row[lane_id*WARP_SIZE + warp_id]; //strided access into the queue to provide better load balancing across warps
                                        r = R[v];
                                        r_end = R[v+1];
                                }
