From 4369c76fdf7bbc9ccb7c534141c50beafccc9231 Mon Sep 17 00:00:00 2001 From: Suryansh Gupta Date: Thu, 30 Jan 2025 17:10:44 +0530 Subject: [PATCH] Add single threaded benchmarking script --- apps/CMakeLists.txt | 3 + apps/benchmark_reads.cpp | 6 +- apps/benchmark_reads_single_threaded.cpp | 73 ++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 apps/benchmark_reads_single_threaded.cpp diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index 5d2c8faaa..736460246 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -31,6 +31,9 @@ target_link_libraries(test_insert_deletes_consolidate ${PROJECT_NAME} ${DISKANN_ add_executable(benchmark_reads benchmark_reads.cpp) target_link_libraries(benchmark_reads ${PROJECT_NAME} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS} Boost::program_options) +add_executable(benchmark_reads_single_threaded benchmark_reads_single_threaded.cpp) +target_link_libraries(benchmark_reads_single_threaded ${PROJECT_NAME} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS} Boost::program_options) + if (NOT MSVC) install(TARGETS build_memory_index build_stitched_index diff --git a/apps/benchmark_reads.cpp b/apps/benchmark_reads.cpp index 79c755dd3..1b05c2b47 100644 --- a/apps/benchmark_reads.cpp +++ b/apps/benchmark_reads.cpp @@ -43,9 +43,9 @@ void do_multiple_reads_with_threads(int thread_count) vector buffers(thread_count); - // omp_set_num_threads(thread_count); + omp_set_num_threads(thread_count); -// #pragma omp parallel for num_threads((int)thread_count) +#pragma omp parallel for num_threads((int)thread_count) for (int i = 0; i < thread_count; i++) { char *buf = nullptr; @@ -56,7 +56,7 @@ void do_multiple_reads_with_threads(int thread_count) int no_of_reads = total_reads / batches_of; Timer timer; -// #pragma omp parallel for schedule(dynamic, 1) +#pragma omp parallel for schedule(dynamic, 1) for (int i = 0; i < no_of_reads; i++) { char *buf = buffers[omp_get_thread_num()]; diff --git a/apps/benchmark_reads_single_threaded.cpp b/apps/benchmark_reads_single_threaded.cpp new file mode 100644 index 000000000..9c1b9e70f --- /dev/null +++ b/apps/benchmark_reads_single_threaded.cpp @@ -0,0 +1,73 @@ +#include +#include +#include "windows_aligned_file_reader.h" +#include "aligned_file_reader.h" +#include "utils.h" +#include "timer.h" +#include + +using namespace std; +using namespace diskann; + +#define SECTOR_LEN 4096 +#define TOTAL_READS 1000000 + +void do_reads(WindowsAlignedFileReader *reader, char *buf, int batches_of) +{ + auto ctx = reader->get_ctx(); + + std::vector read_reqs; + read_reqs.reserve(batches_of); + + // create read requests + for (size_t i = 0; i < batches_of; ++i) + { + AlignedRead read; + read.len = SECTOR_LEN; + read.buf = buf + i * SECTOR_LEN; + auto sector_id = (rand() % 1650000); + read.offset = sector_id * SECTOR_LEN; + read_reqs.push_back(read); + } + + reader->read(read_reqs, ctx, false); +} + +void do_reads_in_batches_of(int batches_of) +{ + string file_name = "F:\\indices\\turing_10m\\disk_index_disk.index"; + auto reader = new WindowsAlignedFileReader(); + reader->open(file_name.c_str()); + char *buf = nullptr; + alloc_aligned((void **)&buf, batches_of * SECTOR_LEN, SECTOR_LEN); + reader->register_thread(); + + int no_of_reads = TOTAL_READS / batches_of; + Timer timer; + for (int i = 0; i < no_of_reads; i++) + { + do_reads(reader, buf, batches_of); + } + // cout << "Time taken to read in microseconds: " << timer.elapsed() << endl; + cout<close(); +} + +int main(int argc, char *argv[]) +{ + int val = 10; + if (argc >= 2) + { + std::istringstream iss(argv[1]); + + if (iss >> val) + { + // cout << "Got cmd argument" << endl; + } + } + cout << "Using batches of " << val << endl; + + // cout << "Hello World" << endl; + do_reads_in_batches_of(val); +} \ No newline at end of file