       // unrolled convolution loop
       for(oo = oo_start; oo < oo_end; oo++) {
         for(ii = ii_start; ii < ii_end; ii++) {
-          for(yy = yy_start; yy < yy_end; yy++) {
-            for(xx = xx_start; xx < xx_end; xx++) {
+          for(yy = yy_start; yy < yy_end; yy+=yy_step) {
+            for(xx = xx_start; xx < xx_end; xx+=xx_step) {
               // Dot product in two dimensions... (between input image and the mask)
               float *input_p = input + ii*input_h*input_w + yy*stride_h*input_w + xx*stride_w;
               float *output_p = output + oo*output_h*output_w + yy*output_w + xx;

      // default convolution loop
      for(oo = oo_start; oo < oo_end; oo++) {
        for(ii = ii_start; ii < ii_end; ii++) {
          for(yy = yy_start; yy < yy_end; yy++) {
            for(xx = xx_start; xx < xx_end; xx++) {
              // Dot product in two dimensions... (between input image and the mask)
              float *input_p = input + ii*input_h*input_w + yy*stride_h*input_w + xx*stride_w;
              float *output_p = output + oo*output_h*output_w + yy*output_w + xx;


  }

  // sync
  cudaThreadSynchronize();

  // clean up
  THCudaTensor_free(input);
  THCudaTensor_free(kernel);

  // check potential errors
  cudaError errcode = cudaGetLastError();
  if(errcode != cudaSuccess)
    THError(cudaGetErrorString(errcode));
