Skip to content
This repository has been archived by the owner on Jan 3, 2023. It is now read-only.

Commit

Permalink
Instrumentation code to determine number of buffers in live and free
Browse files Browse the repository at this point in the history
lists of GenomicsDBColumnarField
  • Loading branch information
kgururaj committed Oct 23, 2017
1 parent 00321c5 commit 6bc6b39
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 1 deletion.
7 changes: 7 additions & 0 deletions src/main/cpp/include/genomicsdb/genomicsdb_columnar_field.h
Expand Up @@ -356,6 +356,9 @@ class GenomicsDBColumnarField
*/
void print_data_in_buffer_at_index_as_csv(std::ostream& fptr,
const GenomicsDBBuffer* buffer_ptr, const size_t index) const;
//Get list lengths
size_t get_free_buffer_list_length() const { return m_free_buffer_list_length; }
size_t get_live_buffer_list_length() const { return m_live_buffer_list_length; }
private:
void copy_simple_members(const GenomicsDBColumnarField& other);
void assign_function_pointers();
Expand All @@ -371,6 +374,7 @@ class GenomicsDBColumnarField
buffer_ptr->set_next_buffer(m_free_buffer_list_head_ptr);
}
m_free_buffer_list_head_ptr = buffer_ptr;
++m_free_buffer_list_length;
}
GenomicsDBBuffer* create_new_buffer() const
{
Expand Down Expand Up @@ -400,6 +404,9 @@ class GenomicsDBColumnarField
GenomicsDBBuffer* m_live_buffer_list_tail_ptr;
//Index of the element in the live buffer list head that must be read next
size_t m_curr_index_in_live_buffer_list_tail;
//Length of live and free lists
size_t m_live_buffer_list_length;
size_t m_free_buffer_list_length;
};

#endif
12 changes: 11 additions & 1 deletion src/main/cpp/src/genomicsdb/genomicsdb_columnar_field.cc
Expand Up @@ -26,7 +26,8 @@
GenomicsDBColumnarField::GenomicsDBColumnarField(const std::type_index element_type, const int length_descriptor,
const unsigned fixed_length_field_length, const size_t num_bytes)
: m_element_type(element_type), m_length_descriptor(length_descriptor),
m_fixed_length_field_num_elements(fixed_length_field_length)
m_fixed_length_field_num_elements(fixed_length_field_length),
m_free_buffer_list_length(0ull), m_live_buffer_list_length(0ull)
{
m_element_size = (element_type == std::type_index(typeid(bool)))
? sizeof(char)
Expand Down Expand Up @@ -58,6 +59,8 @@ void GenomicsDBColumnarField::copy_simple_members(const GenomicsDBColumnarField&
m_print_csv = other.m_print_csv;
m_buffer_size = other.m_buffer_size;
m_curr_index_in_live_buffer_list_tail = other.m_curr_index_in_live_buffer_list_tail;
m_free_buffer_list_length = other.m_free_buffer_list_length;
m_live_buffer_list_length = other.m_live_buffer_list_length;
}

GenomicsDBColumnarField::GenomicsDBColumnarField(GenomicsDBColumnarField&& other)
Expand Down Expand Up @@ -311,6 +314,10 @@ void GenomicsDBColumnarField::move_buffer_to_live_list(GenomicsDBBuffer* buffer)
m_free_buffer_list_head_ptr = next_in_free_list;
//Reset idx pointed to in tail to 0
m_curr_index_in_live_buffer_list_tail = 0u;
//Modify lengths
assert(m_free_buffer_list_length > 0u);
--m_free_buffer_list_length;
++m_live_buffer_list_length;
}

void GenomicsDBColumnarField::move_buffer_to_free_list(GenomicsDBBuffer* buffer)
Expand Down Expand Up @@ -338,6 +345,9 @@ void GenomicsDBColumnarField::move_buffer_to_free_list(GenomicsDBBuffer* buffer)
//If this was the head, update to next
if(buffer == m_live_buffer_list_head_ptr)
m_live_buffer_list_head_ptr = next_in_live_list;
//Modify lengths
++m_free_buffer_list_length;
--m_live_buffer_list_length;
}

void GenomicsDBColumnarField::move_all_buffers_from_live_list_to_free_list()
Expand Down
20 changes: 20 additions & 0 deletions src/main/cpp/src/genomicsdb/genomicsdb_iterators.cc
Expand Up @@ -128,6 +128,15 @@ SingleCellTileDBIterator::~SingleCellTileDBIterator()
for(auto i=0u;i<GenomicsDBIteratorStatsEnum::NUM_STATS;++i)
std::cerr << "," << m_num_cells_traversed_stats[i];
std::cerr << "\n";
auto num_live_list_entries = 0ull;
auto num_free_list_entries = 0ull;
for(const auto& field : m_fields)
{
num_free_list_entries += field.get_free_buffer_list_length();
num_live_list_entries += field.get_live_buffer_list_length();
}
std::cerr << "Buffer_lists_lengths final "<<num_free_list_entries
<<" "<<num_live_list_entries <<"\n";
std::cerr << "Histogram:\n";
for(auto val : m_num_cells_traversed_in_find_intersecting_intervals_mode_histogram)
std::cerr << val << "\n";
Expand Down Expand Up @@ -329,6 +338,17 @@ void SingleCellTileDBIterator::read_from_TileDB(TileDB_CTX* tiledb_ctx, const ch
break;
}
m_in_find_intersecting_intervals_mode = false;
#ifdef DO_PROFILING
auto num_live_list_entries = 0ull;
auto num_free_list_entries = 0ull;
for(const auto& field : m_fields)
{
num_free_list_entries += field.get_free_buffer_list_length();
num_live_list_entries += field.get_live_buffer_list_length();
}
std::cerr << "Buffer_lists_lengths end_of_intersecting_intervals_mode "<<num_free_list_entries
<<" "<<num_live_list_entries <<"\n";
#endif
}
//If done reading current column interval, move to next query column interval, if any remaining OR
//this stack was performing intersecting intervals search
Expand Down

0 comments on commit 6bc6b39

Please sign in to comment.