         word[i + 2*SKIP] = 0;
       }
 #pragma unroll
-      for (j = 0; j <= 2*SKIP; j++) {                      // clear the products matrix
+      for (j = 0; j <= 2*SKIP; j++) {                       // clear the products matrix
         prods[i][j] = 0;
       }
     }
 
     for (i = tid; i < nrows; i += dxy) {                    // Now iterate over the rows of this block
 #pragma unroll
-      for (j = 0; j < WINLEN + 2*SKIP ; j++) {             // Read A with edges
+      for (j = 0; j < WINLEN + 2*SKIP ; j++) {              // Read A with edges
         aa[j] = A[i + word[j] * nrows];
       }
 #pragma unroll

  int iend = (int)((1L * (blockIdx.x+1) * ncols) / gridDim.x);

#pragma unroll
  for (i = 0; i < 2*SKIP; i++) {                           // init context words on edges
    if (i + istart - SKIP > 0) {
      word[i + WINLEN] = W[i + istart - SKIP];
    }


  for (icol = istart; icol < iend; icol += WINLEN) {        // Iterate over columns in blocks of WINLEN
#pragma unroll
    for (j = 0; j < 2*SKIP; j++) {                          // Shift edge words from last time
      word[j] = word[j + WINLEN];
    }
#pragma unroll
