 
         for( int i = 0; i < localStreams; i++ )
         {
+/* set the stream for the cublas call */
+
           CUBLAS_CALL( cublasSetStream( handle, stream[i] ) );
+
+/* call the cublas dgemm function */
+
           CUBLAS_CALL( cublasDgemm( handle, CUBLAS_OP_N, CUBLAS_OP_N,
                  tileSize, tileSize, tileSize,
                  &alpha,


    cudaStream_t stream[nstreams];
    for( int i = 0; i < nstreams; i++ )
        CUDA_CALL( cudaStreamCreate( &stream[i] ) );

    cublasDestroy( handle );
    stat = cublasCreate( &handle );

      for( int k = 0; k < linearTiles; k++ )
      {

/* stream A into device */

        for( int i = 0; i < localStreams; i++ )
        {

        int aOffset = INDX( rowTile[i], k, linearTiles ) *
                            tileSize * tileSize;
        CUDA_CALL( cudaMemcpyAsync( d_a[i], &p_a[aOffset], tileBytes,
                     cudaMemcpyHostToDevice, stream[i] ) );
        } /* end for */

/* stream B into device */

        for( int i = 0; i < localStreams; i++ )
        {
        int bOffset = INDX( k, colTile[i], linearTiles ) *
                            tileSize * tileSize;
        CUDA_CALL( cudaMemcpyAsync( d_b[i], &p_b[bOffset], tileBytes,
                     cudaMemcpyHostToDevice, stream[i] ) );

        } /* end for */
