       checkCudaErrors( cudaStreamDestroy(stream[i]) );
       // cudaStreamDestroy() blocks until all commands in given stream complete
     }
+
+    cudaEventRecord(stop);
+    cudaEventSynchronize(stop);
+
+    cudaEventElapsedTime(&total, start, stop);
+    printf("GPU time (incl. main memcpy's): %f ms\n", total);
   }
 
   ////////////////////////// Save the output to disk: //////////////////////////

      (mode == 3) || 
      (mode == 4)) { ///////////////// Non-streaming examples //////////////////

    // Copy input image to GPU:
    checkCudaErrors(  cudaMemcpy( old_image_G,
				  image.data,
				  image_size*sizeof(uchar),
				  cudaMemcpyHostToDevice )  );

    // Run the kernel.  ceil() so we don't miss the end(s) of the image:
    if (mode == 2) {

////////////////////////////////// Includes: ///////////////////////////////////

#include <stdio.h>
#include <time.h>

// CUDA stuff:
#include "cuda_runtime.h"
