     t13 = totals[threadIdx.x][13];
     t14 = totals[threadIdx.x][14];
     t15 = totals[threadIdx.x][15];
-    /*    t16 = totals[threadIdx.x][16];
-    t17 = totals[threadIdx.x][17];
-    t18 = totals[threadIdx.x][18];
-    t19 = totals[threadIdx.x][19];
-    t20 = totals[threadIdx.x][20];
-    t21 = totals[threadIdx.x][21];
-    t22 = totals[threadIdx.x][22];
-    t23 = totals[threadIdx.x][23];
-    t24 = totals[threadIdx.x][24];
-    t25 = totals[threadIdx.x][25];
-    t26 = totals[threadIdx.x][26];
-    t27 = totals[threadIdx.x][27];
-    t28 = totals[threadIdx.x][28];
-    t29 = totals[threadIdx.x][29];
-    t30 = totals[threadIdx.x][30];
-    t31 = totals[threadIdx.x][31]; */
 
     fthresh = *((float *)&t0);
 

    totals[29][threadIdx.x] = trees[threadIdx.x + 29*tstride + ns * __shfl(tp, 29)];
    totals[30][threadIdx.x] = trees[threadIdx.x + 30*tstride + ns * __shfl(tp, 30)];
    totals[31][threadIdx.x] = trees[threadIdx.x + 31*tstride + ns * __shfl(tp, 31)];
    t0 = totals[threadIdx.x][0];
    t1 = totals[threadIdx.x][1];
    t2 = totals[threadIdx.x][2];

  }
}

// restrict to at most 16 features per tree node.
__global__ void __treeprod16f(int *trees, float *feats, int *tpos, int *otpos, int nrows, int ncols, int ns, int tstride, int ntrees) {
  __shared__ float totals[32][17];

  int t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30,t31;
