     __shared__ int s_a[NTHREADS_Y][NTHREADS_X];
     __shared__ int s_b[NTHREADS_Y][NTHREADS_X];
 
-    // temporary line and temporary column -
-    // explain this later
+    /* temporary line and temporary column
+     * Each thread is responsible for loading one value in the matrix A and
+     * Matrix B. These variables are used to hold which line and column of the
+     * original Matrices they are suppose to load. I also need to check if those
+     * values that they will load actually correspond to a valid position in the
+     * original Matrix.
+     */
     int a_tLine, a_tColumn, b_tLine, b_tColumn;
 
     for (z = 0; z < nBlocks; z++) {

        int c_ncolumns, int nBlocks)
{
    int i, z, sum = 0;
    int nMultiplications = a_ncolumns;
    int multiplicationsInBlock = NTHREADS_Y;

    int column = blockIdx.x * blockDim.x + threadIdx.x;

 * Distributed under the MIT Lincese.
 */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>

// 32x32 Threads in a block.
#define NTHREADS_X 32
#define NTHREADS_Y 32
#define THREADS_PER_BLOCK NTHREADS_X * NTHREADS_Y

/* A macro used for error checking in CUDA function calls
 * Credit to: http://stackoverflow.com/a/14038590 for the gpuErrchk macro.
 */
#define gpuErrchk(ans) { gpuAssert((ans), __FILE__, __LINE__); }
inline void gpuAssert(cudaError_t code, const char *file, int line, bool abort=true)
{
