         d_output.b_size = batch_size;
         long* d_olens;
         cudaMalloc((void **) &(d_olens), sizeof(long)*batch_size);
-        printf("Done allocating d_olens \n");
+        if (DEBUG) {
+            printf("Done allocating d_olens \n");
+        }
         
         err = cudaGetLastError();
         if (err != cudaSuccess)
             printf("***ERROR***: %s\n", cudaGetErrorString(err));
         
         cudaMemcpy(d_olens, outputs[batch].lens, sizeof(long)*batch_size, cudaMemcpyHostToDevice);
-        printf("Done transfering wordvecs[batch].lens -> d_olens \n");
+        if (DEBUG) {
+            printf("Done transfering wordvecs[batch].lens -> d_olens \n");
+        }
         d_output.lens = d_olens;
         
         err = cudaGetLastError();

        d_wordvec.b_size = batch_size;
        long* d_wlens;
        cudaMalloc((void **) &(d_wlens), sizeof(long)*batch_size);
        printf("Done allocating d_wlens \n");
        
        cudaError_t err = cudaGetLastError();
        if (err != cudaSuccess)
            printf("***ERROR***: %s\n", cudaGetErrorString(err));
        
        cudaMemcpy(d_wlens, wordvecs[batch].lens, sizeof(long)*batch_size, cudaMemcpyHostToDevice);
        printf("Done transfering wordvecs[batch].lens -> d_wlens \n");
        d_wordvec.lens = d_wlens;
        
        err = cudaGetLastError();

        
        float* d_out;
        cudaMalloc((void **) &(d_out), sizeof(float)*kerns.num*outputs[batch].lens[batch_size-1]);
        if (DEBUG) {
            printf("Done allocating d_out \n");
        }
        
        err = cudaGetLastError();
        if (err != cudaSuccess)
            printf("***ERROR***: %s\n", cudaGetErrorString(err));
        
        cudaMemcpy(d_out, outputs[batch].out, sizeof(float)*kerns.num*outputs[batch].lens[batch_size-1], cudaMemcpyHostToDevice);
        if (DEBUG) {
            printf("Done transfering outputs[batch].out -> d_out \n");
        }
        d_output.out = d_out;
        
        err = cudaGetLastError();
