From 0b114931b49be6dd8fe32e6cfa6ad2e2c8c45298 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 06:57:51 +0000 Subject: [PATCH 1/7] Initial plan From 8729b5544b78929c674e8c68f179cba968a675c5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 07:03:43 +0000 Subject: [PATCH 2/7] Add macOS support to diskann-platform and CI Co-authored-by: harsha-simhadri <5590673+harsha-simhadri@users.noreply.github.com> --- .github/workflows/ci.yml | 2 + .../aligned_file_reader_factory.rs | 13 ++-- diskann-platform/Cargo.toml | 3 + diskann-platform/src/lib.rs | 14 ++-- diskann-platform/src/macos/mod.rs | 16 +++++ diskann-platform/src/macos/perf.rs | 70 +++++++++++++++++++ diskann-platform/src/macos/ssd_io_context.rs | 22 ++++++ 7 files changed, 132 insertions(+), 8 deletions(-) create mode 100644 diskann-platform/src/macos/mod.rs create mode 100644 diskann-platform/src/macos/perf.rs create mode 100644 diskann-platform/src/macos/ssd_io_context.rs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f3e5bafb4..bad392de6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -234,6 +234,7 @@ jobs: os: - windows-latest - ubuntu-latest + - macos-latest steps: - uses: actions/checkout@v4 @@ -267,6 +268,7 @@ jobs: os: - windows-latest - ubuntu-latest + - macos-latest steps: - uses: actions/checkout@v4 diff --git a/diskann-disk/src/utils/aligned_file_reader/aligned_file_reader_factory.rs b/diskann-disk/src/utils/aligned_file_reader/aligned_file_reader_factory.rs index ef1049003..aeb5a2d7d 100644 --- a/diskann-disk/src/utils/aligned_file_reader/aligned_file_reader_factory.rs +++ b/diskann-disk/src/utils/aligned_file_reader/aligned_file_reader_factory.rs @@ -7,7 +7,7 @@ use diskann::ANNResult; #[cfg(all(not(miri), target_os = "linux"))] use super::LinuxAlignedFileReader; -#[cfg(miri)] +#[cfg(any(miri, target_os = "macos"))] use super::StorageProviderAlignedFileReader; #[cfg(all(not(miri), target_os = "windows"))] use super::WindowsAlignedFileReader; @@ -19,7 +19,9 @@ pub struct AlignedFileReaderFactory { impl AlignedReaderFactory for AlignedFileReaderFactory { /* - Fall back to the StorageProviderAlignedFileReader when running in miri. Otherwise, miri fails with this error: + Fall back to the StorageProviderAlignedFileReader when running in miri or on macOS. + + For miri: Otherwise, miri fails with this error: --> C:\Users\\.cargo\registry\src\msdata.pkgs.visualstudio.com-32ec7033fece98f6\io-uring-0.6.3\src\sys\mod.rs:97:15 | 97 | to_result(syscall(SYSCALL_SETUP, entries as c_long, p as c_long) as _) @@ -35,8 +37,11 @@ impl AlignedReaderFactory for AlignedFileReaderFactory { --> diskann\src\model\aligned_file_reader\linux_aligned_file_reader.rs:221:24 | 221 | let mut ring = IoUring::new(MAX_IO_CONCURRENCY as u32)?; + + For macOS: macOS does not support io_uring (Linux-only) or IOCompletionPort (Windows-only). + StorageProviderAlignedFileReader provides a cross-platform fallback implementation. */ - #[cfg(miri)] + #[cfg(any(miri, target_os = "macos"))] type AlignedReaderType = StorageProviderAlignedFileReader; #[cfg(all(not(miri), target_os = "linux"))] @@ -46,7 +51,7 @@ impl AlignedReaderFactory for AlignedFileReaderFactory { type AlignedReaderType = WindowsAlignedFileReader; fn build(&self) -> ANNResult { - #[cfg(miri)] + #[cfg(any(miri, target_os = "macos"))] return StorageProviderAlignedFileReader::new( &crate::storage::FileStorageProvider, self.file_path.as_str(), diff --git a/diskann-platform/Cargo.toml b/diskann-platform/Cargo.toml index 07bbd3a33..890b63bab 100644 --- a/diskann-platform/Cargo.toml +++ b/diskann-platform/Cargo.toml @@ -18,6 +18,9 @@ tracing.workspace = true io-uring = "0.6.4" libc = "0.2.148" +[target.'cfg(target_os = "macos")'.dependencies] +libc = "0.2.148" + [target.'cfg(target_os = "windows")'.dependencies.windows-sys] version = "0.59" features = [ diff --git a/diskann-platform/src/lib.rs b/diskann-platform/src/lib.rs index ab05672a7..91f878352 100644 --- a/diskann-platform/src/lib.rs +++ b/diskann-platform/src/lib.rs @@ -3,14 +3,20 @@ * Licensed under the MIT license. */ -#[cfg(windows)] +#[cfg(target_os = "windows")] pub mod win; -#[cfg(windows)] +#[cfg(target_os = "windows")] pub use win::*; -#[cfg(not(windows))] +#[cfg(target_os = "linux")] pub mod linux; -#[cfg(not(windows))] +#[cfg(target_os = "linux")] pub use linux::*; + +#[cfg(target_os = "macos")] +pub mod macos; + +#[cfg(target_os = "macos")] +pub use macos::*; diff --git a/diskann-platform/src/macos/mod.rs b/diskann-platform/src/macos/mod.rs new file mode 100644 index 000000000..38ccf7e08 --- /dev/null +++ b/diskann-platform/src/macos/mod.rs @@ -0,0 +1,16 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ +#![cfg_attr( + not(test), + warn(clippy::panic, clippy::unwrap_used, clippy::expect_used) +)] + +mod perf; +pub use perf::{ + get_number_of_processors, get_peak_workingset_size, get_process_cycle_time, get_process_time, + get_system_time, +}; + +pub mod ssd_io_context; diff --git a/diskann-platform/src/macos/perf.rs b/diskann-platform/src/macos/perf.rs new file mode 100644 index 000000000..32a537c61 --- /dev/null +++ b/diskann-platform/src/macos/perf.rs @@ -0,0 +1,70 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +/// Gets the process cycle time. +/// On macOS, this returns 0 as cycle time is not readily available. +pub fn get_process_cycle_time() -> Option { + Some(0) +} + +/// Gets the process time in kernel and user modes. +/// On macOS, we use rusage to get process times. +pub fn get_process_time() -> Option { + use libc::{getrusage, rusage, RUSAGE_SELF}; + + let mut usage: rusage = unsafe { std::mem::zeroed() }; + let result = unsafe { getrusage(RUSAGE_SELF, &mut usage) }; + + if result == 0 { + // Convert timeval to microseconds (100-nanosecond units to match Windows FILETIME) + let user_time = + (usage.ru_utime.tv_sec as u64) * 10_000_000 + (usage.ru_utime.tv_usec as u64) * 10; + let system_time = + (usage.ru_stime.tv_sec as u64) * 10_000_000 + (usage.ru_stime.tv_usec as u64) * 10; + return Some(user_time + system_time); + } + + None +} + +/// Gets the system time in kernel and user modes. +/// On macOS, this is not easily available, so we return None. +pub fn get_system_time() -> Option { + None +} + +/// Gets the number of processors. +pub fn get_number_of_processors() -> Option { + use libc::{sysconf, _SC_NPROCESSORS_ONLN}; + + let result = unsafe { sysconf(_SC_NPROCESSORS_ONLN) }; + if result > 0 { + return Some(result as u64); + } + + None +} + +/// Retrieves the peak resident set size of the current process. +/// +/// On macOS, this function uses getrusage to retrieve the maximum resident set size. +/// The ru_maxrss field represents the maximum resident set size used (in bytes on macOS). +/// +/// # Returns +/// +/// An `Option` representing the peak working set size in bytes, or `None` if the operation fails. +pub fn get_peak_workingset_size() -> Option { + use libc::{getrusage, rusage, RUSAGE_SELF}; + + let mut usage: rusage = unsafe { std::mem::zeroed() }; + let result = unsafe { getrusage(RUSAGE_SELF, &mut usage) }; + + if result == 0 { + // On macOS, ru_maxrss is in bytes (unlike Linux where it's in kilobytes) + return Some(usage.ru_maxrss as u64); + } + + None +} diff --git a/diskann-platform/src/macos/ssd_io_context.rs b/diskann-platform/src/macos/ssd_io_context.rs new file mode 100644 index 000000000..b8302eecd --- /dev/null +++ b/diskann-platform/src/macos/ssd_io_context.rs @@ -0,0 +1,22 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +use std::fs::File; + +/// The IOContext struct for disk I/O on macOS. +/// +/// macOS does not have io_uring (Linux-only) or IOCompletionPort (Windows-only). +/// This is a simple implementation that just holds a file handle. +/// For actual async I/O operations on macOS, use the StorageProviderAlignedFileReader +/// which provides a cross-platform fallback implementation. +pub struct IOContext { + pub file_handle: File, +} + +impl IOContext { + pub fn new(file_handle: File) -> Self { + IOContext { file_handle } + } +} From aad7194607835da29ac8a86d2e95e949f8536856 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 07:07:18 +0000 Subject: [PATCH 3/7] Consolidate libc dependency for Unix-like platforms Co-authored-by: harsha-simhadri <5590673+harsha-simhadri@users.noreply.github.com> --- diskann-platform/Cargo.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/diskann-platform/Cargo.toml b/diskann-platform/Cargo.toml index 890b63bab..69de7c573 100644 --- a/diskann-platform/Cargo.toml +++ b/diskann-platform/Cargo.toml @@ -16,9 +16,8 @@ tracing.workspace = true [target.'cfg(target_os = "linux")'.dependencies] io-uring = "0.6.4" -libc = "0.2.148" -[target.'cfg(target_os = "macos")'.dependencies] +[target.'cfg(unix)'.dependencies] libc = "0.2.148" [target.'cfg(target_os = "windows")'.dependencies.windows-sys] From baa402781f558635e4d8f8d9e92bb792ccc57010 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 07:43:12 +0000 Subject: [PATCH 4/7] Fix macOS compilation issue in diskann-disk Co-authored-by: harsha-simhadri <5590673+harsha-simhadri@users.noreply.github.com> --- .../utils/aligned_file_reader/aligned_file_reader_factory.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/diskann-disk/src/utils/aligned_file_reader/aligned_file_reader_factory.rs b/diskann-disk/src/utils/aligned_file_reader/aligned_file_reader_factory.rs index aeb5a2d7d..5fe6866a0 100644 --- a/diskann-disk/src/utils/aligned_file_reader/aligned_file_reader_factory.rs +++ b/diskann-disk/src/utils/aligned_file_reader/aligned_file_reader_factory.rs @@ -13,6 +13,9 @@ use super::StorageProviderAlignedFileReader; use super::WindowsAlignedFileReader; use crate::utils::aligned_file_reader::traits::AlignedReaderFactory; +#[cfg(any(miri, target_os = "macos"))] +use diskann_providers::storage::FileStorageProvider; + pub struct AlignedFileReaderFactory { pub file_path: String, } @@ -53,7 +56,7 @@ impl AlignedReaderFactory for AlignedFileReaderFactory { fn build(&self) -> ANNResult { #[cfg(any(miri, target_os = "macos"))] return StorageProviderAlignedFileReader::new( - &crate::storage::FileStorageProvider, + &FileStorageProvider, self.file_path.as_str(), ); From 262239f9ec8acd516cfcffbf51b7352b48b06faf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 21:06:15 +0000 Subject: [PATCH 5/7] Increase InlineError capacity for macOS mutex size macOS mutexes are larger than on Linux/Windows. Increased the capacity from 16 to 64 bytes in inline_error_with_interior_mutability test to accommodate the larger Mutex on macOS. Co-authored-by: hildebrandmw <24898651+hildebrandmw@users.noreply.github.com> --- diskann-quantization/src/error.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/diskann-quantization/src/error.rs b/diskann-quantization/src/error.rs index 9679e18c7..1e71a1de2 100644 --- a/diskann-quantization/src/error.rs +++ b/diskann-quantization/src/error.rs @@ -433,11 +433,12 @@ mod tests { fn inline_error_with_interior_mutability() { use std::error::Error; - let error = InlineError::<16>::new(ErrorWithInteriorMutability(Mutex::new(0))); + // Use 64 bytes to accommodate larger mutex sizes on macOS + let error = InlineError::<64>::new(ErrorWithInteriorMutability(Mutex::new(0))); assert_eq!( std::mem::size_of_val(&error), - 24, - "expected 16 bytes for the payload and 8-bytes for the vtable" + 72, + "expected 64 bytes for the payload and 8-bytes for the vtable" ); assert_eq!(error.to_string(), "0"); let debug = format!("{:?}", error); From b3db96e13333de18317304be030a8a9d69248425 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 03:12:13 +0000 Subject: [PATCH 6/7] Fix macOS CI: use scalar arch instead of x86-64-v3 in SIMD benchmark tests The benchmark-simd integration test was failing on macOS because it tried to run x86-64-v3 benchmarks which are only available on x86_64 architecture. On ARM-based macOS (Apple Silicon), these benchmarks aren't registered. Changed test.json to use "scalar" architecture instead of "x86-64-v3" for cross-platform compatibility. The scalar implementation is available on all architectures including x86_64, ARM, and others. Co-authored-by: harsha-simhadri <5590673+harsha-simhadri@users.noreply.github.com> --- diskann-benchmark-simd/examples/test.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/diskann-benchmark-simd/examples/test.json b/diskann-benchmark-simd/examples/test.json index dd7fc9da4..b4f940e19 100644 --- a/diskann-benchmark-simd/examples/test.json +++ b/diskann-benchmark-simd/examples/test.json @@ -6,7 +6,7 @@ "content": { "query_type": "float32", "data_type": "float32", - "arch": "x86-64-v3", + "arch": "scalar", "runs": [ { "distance": "squared_l2", @@ -352,7 +352,7 @@ "content": { "query_type": "float16", "data_type": "float16", - "arch": "x86-64-v3", + "arch": "scalar", "runs": [ { "distance": "squared_l2", @@ -699,7 +699,7 @@ "content": { "query_type": "uint8", "data_type": "uint8", - "arch": "x86-64-v3", + "arch": "scalar", "runs": [ { "distance": "squared_l2", @@ -1046,7 +1046,7 @@ "content": { "query_type": "int8", "data_type": "int8", - "arch": "x86-64-v3", + "arch": "scalar", "runs": [ { "distance": "squared_l2", From ad53b80b995d695877522831d341a26c033d151d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 03:28:12 +0000 Subject: [PATCH 7/7] Use architecture-specific test files for SIMD benchmarks Created test_mac.json with scalar architecture for non-x86_64 platforms (like ARM-based macOS). The integration test now selects the appropriate JSON file based on target architecture: - x86_64: uses test.json with x86-64-v3 architecture - Other platforms: uses test_mac.json with scalar architecture This approach preserves x86-64 SIMD testing on x86_64 platforms while enabling tests on ARM macOS and other architectures. Co-authored-by: harsha-simhadri <5590673+harsha-simhadri@users.noreply.github.com> --- diskann-benchmark-simd/examples/test.json | 8 +- diskann-benchmark-simd/examples/test_mac.json | 1390 +++++++++++++++++ diskann-benchmark-simd/src/bin.rs | 10 +- 3 files changed, 1403 insertions(+), 5 deletions(-) create mode 100644 diskann-benchmark-simd/examples/test_mac.json diff --git a/diskann-benchmark-simd/examples/test.json b/diskann-benchmark-simd/examples/test.json index b4f940e19..dd7fc9da4 100644 --- a/diskann-benchmark-simd/examples/test.json +++ b/diskann-benchmark-simd/examples/test.json @@ -6,7 +6,7 @@ "content": { "query_type": "float32", "data_type": "float32", - "arch": "scalar", + "arch": "x86-64-v3", "runs": [ { "distance": "squared_l2", @@ -352,7 +352,7 @@ "content": { "query_type": "float16", "data_type": "float16", - "arch": "scalar", + "arch": "x86-64-v3", "runs": [ { "distance": "squared_l2", @@ -699,7 +699,7 @@ "content": { "query_type": "uint8", "data_type": "uint8", - "arch": "scalar", + "arch": "x86-64-v3", "runs": [ { "distance": "squared_l2", @@ -1046,7 +1046,7 @@ "content": { "query_type": "int8", "data_type": "int8", - "arch": "scalar", + "arch": "x86-64-v3", "runs": [ { "distance": "squared_l2", diff --git a/diskann-benchmark-simd/examples/test_mac.json b/diskann-benchmark-simd/examples/test_mac.json new file mode 100644 index 000000000..b4f940e19 --- /dev/null +++ b/diskann-benchmark-simd/examples/test_mac.json @@ -0,0 +1,1390 @@ +{ + "search_directories": [], + "jobs": [ + { + "type": "simd-op", + "content": { + "query_type": "float32", + "data_type": "float32", + "arch": "scalar", + "runs": [ + { + "distance": "squared_l2", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + } + ] + } + }, + { + "type": "simd-op", + "content": { + "query_type": "float32", + "data_type": "float32", + "arch": "scalar", + "runs": [ + { + "distance": "squared_l2", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + } + ] + } + }, + { + "type": "simd-op", + "content": { + "query_type": "float32", + "data_type": "float32", + "arch": "reference", + "runs": [ + { + "distance": "squared_l2", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + } + ] + } + }, + + { + "type": "simd-op", + "content": { + "query_type": "float16", + "data_type": "float16", + "arch": "scalar", + "runs": [ + { + "distance": "squared_l2", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + } + ] + } + }, + { + "type": "simd-op", + "content": { + "query_type": "float16", + "data_type": "float16", + "arch": "scalar", + "runs": [ + { + "distance": "squared_l2", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + } + ] + } + }, + { + "type": "simd-op", + "content": { + "query_type": "float16", + "data_type": "float16", + "arch": "reference", + "runs": [ + { + "distance": "squared_l2", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + } + ] + } + }, + + + { + "type": "simd-op", + "content": { + "query_type": "uint8", + "data_type": "uint8", + "arch": "scalar", + "runs": [ + { + "distance": "squared_l2", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + } + ] + } + }, + { + "type": "simd-op", + "content": { + "query_type": "uint8", + "data_type": "uint8", + "arch": "scalar", + "runs": [ + { + "distance": "squared_l2", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + } + ] + } + }, + { + "type": "simd-op", + "content": { + "query_type": "uint8", + "data_type": "uint8", + "arch": "reference", + "runs": [ + { + "distance": "squared_l2", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + } + ] + } + }, + + + { + "type": "simd-op", + "content": { + "query_type": "int8", + "data_type": "int8", + "arch": "scalar", + "runs": [ + { + "distance": "squared_l2", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + } + ] + } + }, + { + "type": "simd-op", + "content": { + "query_type": "int8", + "data_type": "int8", + "arch": "scalar", + "runs": [ + { + "distance": "squared_l2", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + } + ] + } + }, + { + "type": "simd-op", + "content": { + "query_type": "int8", + "data_type": "int8", + "arch": "reference", + "runs": [ + { + "distance": "squared_l2", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "squared_l2", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "inner_product", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 100, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 128, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 160, + "num_points": 50, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 384, + "num_points": 24, + "loops_per_measurement": 5, + "num_measurements": 1 + }, + { + "distance": "cosine", + "dim": 768, + "num_points": 12, + "loops_per_measurement": 5, + "num_measurements": 1 + } + ] + } + } + ] +} diff --git a/diskann-benchmark-simd/src/bin.rs b/diskann-benchmark-simd/src/bin.rs index 74d11cd15..22bf84f03 100644 --- a/diskann-benchmark-simd/src/bin.rs +++ b/diskann-benchmark-simd/src/bin.rs @@ -57,9 +57,17 @@ mod tests { #[test] fn integration_test() { + // Use architecture-specific test file + // On macOS (and other non-x86_64 platforms), use test_mac.json with scalar architecture + // On x86_64, use test.json with x86-64-v3 architecture + #[cfg(target_arch = "x86_64")] + let test_file = "test.json"; + #[cfg(not(target_arch = "x86_64"))] + let test_file = "test_mac.json"; + let input_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) .join("examples") - .join("test.json"); + .join(test_file); let tempdir = tempfile::tempdir().unwrap(); let output_path = tempdir.path().join("output.json");