     device_types.reserve(num_cols);
     for(size_type i = 0; i < num_cols; ++i)
     {
-      assert(column_length == host_columns[i]->size);
-
-      device_columns.push_back(host_columns[i]->data);
-      device_types.push_back(host_columns[i]->dtype);
+      gdf_column * const current_column = host_columns[i];
+      assert(column_length == current_column->size);
+
+      device_columns.push_back(current_column->data);
+      device_types.push_back(current_column->dtype);
+
+      // Compute the size of a row in the table in bytes
+      int column_width_bytes{0};
+      if(GDF_SUCCESS == get_column_byte_width(current_column, &column_width_bytes))
+      {
+        row_size_bytes += column_width_bytes;
+      }
+      else
+      {
+        std::cerr << "Attempted to get column byte width of unsupported GDF datatype.\n";
+      }
+
     }
 
     d_columns_data = device_columns.data().get();

  thrust::device_vector<void*> device_columns;
  thrust::device_vector<gdf_dtype> device_types;

  gdf_column ** host_columns;
  const size_type num_columns;
  size_type column_length;

  // Just use the first column as the build/probe column for now
  const size_type build_column_index{0};

  {
    return host_columns[build_column_index]->data;
  }



  __host__ 
  void print_row(const size_type row_index, char * msg = "") const
