     const auto unused_key = multi_map->get_unused_key();
     const auto end = multi_map->end();
 
-    // Search the hash map for the hash value of the probe row
+    // Compute the hash value of the probe row
     const hash_value_type probe_row_hash_value{probe_table.hash_row(probe_row_index)};
+
+    // Search the hash map for the hash value of the probe row using the row's
+    // hash value to determine the location where to search for the row in the hash map
     auto found = multi_map->find(probe_row_hash_value,
                                  true,
                                  probe_row_hash_value);
 
-    bool running = (join_type == JoinType::LEFT_JOIN) || (end != found); // for left-joins we always need to add an output
+    // for left-joins we always need to add an output
+    bool running = (join_type == JoinType::LEFT_JOIN) || (end != found); 
     bool found_match = false;
 #if defined(CUDA_VERSION) && CUDA_VERSION >= 9000
     while ( __any_sync( activemask, running ) )


/* --------------------------------------------------------------------------*/
/** 
* @Synopsis  Builds a hash table from a gdf_table that maps the values of the build
* column to its respective row indices.
* 
* @Param multi_map The hash table to be built
* @Param build_table The table to build the hash table on
* @Param build_table_num_rows The number of rows in the build table
* @tparam multimap_type The type of the hash table
* @tparam key_type The datatype used for the Keys in the hash table
* 
*/
/* ----------------------------------------------------------------------------*/

/** 
* @Synopsis  Adds a pair of indices to the shared memory cache
* 
* @Param[in] first The first index in the pair
* @Param[in] second The second index in the pair
* @Param[in,out] current_idx_shared Pointer to shared index that determines where in the shared
memory cache the pair will be written
* @Param[in] warp_id The ID of the warp of the calling the thread
* @Param[out] joined_shared_l Pointer to the shared memory cache for left indices
* @Param[out] joined_shared_r Pointer to the shared memory cache for right indices
* 
*/
/* ----------------------------------------------------------------------------*/
template<typename size_type,
         typename output_index_type>
__inline__ __device__ void add_pair_to_cache(const size_type first, 
                                             const size_type second, 
                                             int *current_idx_shared, 
                                             const int warp_id, 
                                             output_index_type *joined_shared_l,
                                             output_index_type *joined_shared_r)
{
  int my_current_idx = atomicAdd(current_idx_shared + warp_id, 1);

