From 0ec78372da814762229606d3c3b82ee203871d54 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Thu, 15 Feb 2024 12:35:54 +0100 Subject: [PATCH 01/31] add benchmarks --- Benchmarks/benchmark_pc_10000.R | 47 ++ Benchmarks/benchmark_pc_10000.svg | 871 +++++++++++++++++++++++++++ Benchmarks/benchmark_pc_10000.xlsx | Bin 0 -> 11091 bytes Benchmarks/benchmark_pc_100000.R | 53 ++ Benchmarks/benchmark_pc_100000.svg | 828 +++++++++++++++++++++++++ Benchmarks/benchmark_pc_100000.xlsx | Bin 0 -> 11157 bytes Benchmarks/benchmark_pc_1000000.R | 51 ++ Benchmarks/benchmark_pc_1000000.svg | 830 +++++++++++++++++++++++++ Benchmarks/benchmark_pc_1000000.xlsx | Bin 0 -> 11077 bytes benchmark_pc.xlsx | Bin 11442 -> 0 bytes 10 files changed, 2680 insertions(+) create mode 100644 Benchmarks/benchmark_pc_10000.R create mode 100644 Benchmarks/benchmark_pc_10000.svg create mode 100644 Benchmarks/benchmark_pc_10000.xlsx create mode 100644 Benchmarks/benchmark_pc_100000.R create mode 100644 Benchmarks/benchmark_pc_100000.svg create mode 100644 Benchmarks/benchmark_pc_100000.xlsx create mode 100644 Benchmarks/benchmark_pc_1000000.R create mode 100644 Benchmarks/benchmark_pc_1000000.svg create mode 100644 Benchmarks/benchmark_pc_1000000.xlsx delete mode 100644 benchmark_pc.xlsx diff --git a/Benchmarks/benchmark_pc_10000.R b/Benchmarks/benchmark_pc_10000.R new file mode 100644 index 0000000..8c9d666 --- /dev/null +++ b/Benchmarks/benchmark_pc_10000.R @@ -0,0 +1,47 @@ +library(tidyverse) +library(readxl) + +data <- read_xlsx("benchmark_pc_10000.xlsx") + +data$Method <- factor(data$Method, levels = c("f32CPU_SV", + "i32CPU_SV", + "f32CPU_DV", + "i32CPU_DV", + "f32CPU_SM", + "i32CPU_SM", + "f32CPU_DM", + "i32CPU_DM", + "f32GPU_DV", + "f32GPU_DM", + "f32GPU_SM")) + +std9_palette = c("#2B2D42", "#5C6378", "#8D99AE", + "#BDC6D1", "#EDF2F4", "#EE8B98", + "#EF233C", "#E41433", "#D90429") + +grp9_palette = c("#2B2D42", "#5C6378", "#757E93", + "#A5B0C0", "#BDC6D1", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +nge9_palette = c("#E8D5D3", "#CDC1C4", "#B2ADB4", + "#C06B6E", "#CE2928", "#B62626", + "#9E2224", "#6A2123", "#362022") + +grp11_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +text_col <- c(rep("white", 4), rep("black", 4), rep("white", 3)) + +# export as 1200 x 800 + +ggplot(data, aes(x = Method, y = Mean, fill = Method)) + + geom_bar(stat="identity", color = "black") + + geom_errorbar(aes(x = Method, ymin = Mean-SD, ymax = Mean+SD), colour = "black", width = 0.3, linewidth = 1.0) + + scale_fill_manual(values = grp11_palette) + + ggtitle("Execution time of the different methods using 10 000 simulated candidates.") + + xlab("Method") + + ylab("Time (s)") + + geom_text(aes(label=round(Mean, 2)), size = 5.0, color = text_col, position = position_stack(vjust = 0.5)) + + theme_minimal(base_size = 18) + + theme(axis.text.x = element_text(angle = 90, hjust = 0, vjust = 0.5)) diff --git a/Benchmarks/benchmark_pc_10000.svg b/Benchmarks/benchmark_pc_10000.svg new file mode 100644 index 0000000..8f02431 --- /dev/null +++ b/Benchmarks/benchmark_pc_10000.svg @@ -0,0 +1,871 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Benchmarks/benchmark_pc_10000.xlsx b/Benchmarks/benchmark_pc_10000.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ac9a258c314612ba287e4c91021da27fdbd53f6a GIT binary patch literal 11091 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 UAUA%t;lYD+0z&{_%Aa@t2j!-s4gdfE literal 0 HcmV?d00001 diff --git a/Benchmarks/benchmark_pc_100000.R b/Benchmarks/benchmark_pc_100000.R new file mode 100644 index 0000000..7a5b851 --- /dev/null +++ b/Benchmarks/benchmark_pc_100000.R @@ -0,0 +1,53 @@ +library(tidyverse) +library(readxl) + +data <- read_xlsx("benchmark_pc_100000.xlsx") + +data <- data[-11,] + +data$Method <- factor(data$Method, levels = c("f32CPU_SV", + "i32CPU_SV", + "f32CPU_DV", + "i32CPU_DV", + "f32CPU_SM", + "i32CPU_SM", + "f32CPU_DM", + "i32CPU_DM", + "f32GPU_DV", + "f32GPU_DM", + "f32GPU_SM")) + +std9_palette = c("#2B2D42", "#5C6378", "#8D99AE", + "#BDC6D1", "#EDF2F4", "#EE8B98", + "#EF233C", "#E41433", "#D90429") + +grp9_palette = c("#2B2D42", "#5C6378", "#757E93", + "#A5B0C0", "#BDC6D1", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +nge9_palette = c("#E8D5D3", "#CDC1C4", "#B2ADB4", + "#C06B6E", "#CE2928", "#B62626", + "#9E2224", "#6A2123", "#362022") + +grp11_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +grp10_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433") + +text_col <- c(rep("white", 4), rep("black", 4), rep("white", 2)) + +# export as 1200 x 800 + +ggplot(data, aes(x = Method, y = Mean, fill = Method)) + + geom_bar(stat="identity", color = "black") + + geom_errorbar(aes(x = Method, ymin = Mean-SD, ymax = Mean+SD), colour = "black", width = 0.3, linewidth = 1.0) + + scale_fill_manual(values = grp10_palette) + + ggtitle("Execution time of the different methods using 100 000 simulated candidates.") + + xlab("Method") + + ylab("Time (s)") + + geom_text(aes(label=round(Mean, 2)), size = 5.0, color = text_col, position = position_stack(vjust = 0.5)) + + theme_minimal(base_size = 18) + + theme(axis.text.x = element_text(angle = 90, hjust = 0, vjust = 0.5)) diff --git a/Benchmarks/benchmark_pc_100000.svg b/Benchmarks/benchmark_pc_100000.svg new file mode 100644 index 0000000..168f696 --- /dev/null +++ b/Benchmarks/benchmark_pc_100000.svg @@ -0,0 +1,828 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Benchmarks/benchmark_pc_100000.xlsx b/Benchmarks/benchmark_pc_100000.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ff4432d5041d6363da2511479f480d2ca1025d69 GIT binary patch literal 11157 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 literal 0 HcmV?d00001 diff --git a/Benchmarks/benchmark_pc_1000000.R b/Benchmarks/benchmark_pc_1000000.R new file mode 100644 index 0000000..bc744b8 --- /dev/null +++ b/Benchmarks/benchmark_pc_1000000.R @@ -0,0 +1,51 @@ +library(tidyverse) +library(readxl) + +data <- read_xlsx("benchmark_pc_1000000.xlsx") + +data$Method <- factor(data$Method, levels = c("f32CPU_SV", + "i32CPU_SV", + "f32CPU_DV", + "i32CPU_DV", + "f32CPU_SM", + "i32CPU_SM", + "f32CPU_DM", + "i32CPU_DM", + "f32GPU_DV", + "f32GPU_DM", + "f32GPU_SM")) + +std9_palette = c("#2B2D42", "#5C6378", "#8D99AE", + "#BDC6D1", "#EDF2F4", "#EE8B98", + "#EF233C", "#E41433", "#D90429") + +grp9_palette = c("#2B2D42", "#5C6378", "#757E93", + "#A5B0C0", "#BDC6D1", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +nge9_palette = c("#E8D5D3", "#CDC1C4", "#B2ADB4", + "#C06B6E", "#CE2928", "#B62626", + "#9E2224", "#6A2123", "#362022") + +grp11_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +grp10_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433") + +text_col <- c(rep("white", 4), rep("black", 4), rep("white", 2)) + +# export as 1200 x 800 + +ggplot(data, aes(x = Method, y = Mean, fill = Method)) + + geom_bar(stat="identity", color = "black") + + geom_errorbar(aes(x = Method, ymin = Mean-SD, ymax = Mean+SD), colour = "black", width = 0.3, linewidth = 1.0) + + scale_fill_manual(values = grp10_palette) + + ggtitle("Execution time of the different methods using 1 000 000 simulated candidates.") + + xlab("Method") + + ylab("Time (s)") + + geom_text(aes(label=round(Mean, 2)), size = 5.0, color = text_col, position = position_stack(vjust = 0.5)) + + theme_minimal(base_size = 18) + + theme(axis.text.x = element_text(angle = 90, hjust = 0, vjust = 0.5)) diff --git a/Benchmarks/benchmark_pc_1000000.svg b/Benchmarks/benchmark_pc_1000000.svg new file mode 100644 index 0000000..9f8d7f8 --- /dev/null +++ b/Benchmarks/benchmark_pc_1000000.svg @@ -0,0 +1,830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Benchmarks/benchmark_pc_1000000.xlsx b/Benchmarks/benchmark_pc_1000000.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2a0c6a8bfa05e0a69f8112ffac30f9958d1ddc48 GIT binary patch literal 11077 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 literal 0 HcmV?d00001 diff --git a/benchmark_pc.xlsx b/benchmark_pc.xlsx deleted file mode 100644 index f2c763e131387c19b4037ff2b7897e10e5eb8dfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11442 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 Qazq5QzwrM$?H|AXA0)S1zyJUM From 7aafed40ce38c367c0c3013f24a7888844a55ed9 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Thu, 7 Mar 2024 15:09:12 +0100 Subject: [PATCH 02/31] add info about template --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 70a99bb..9b4b85e 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,11 @@ Please be aware of the following limitations: - \[Eigen\]\[i32\] Integer based methods do not allow tolerances below 0.01 because they might cause overflows. - \[CUDA\] Sparse matrix - sparse matrix multiplication tends to be very slow and very memory hungry, most likely caused by memory overhead and the output matrix not being sparse. +## Implementing your own matrix products + +If you want to implement your own (and hopefully faster) computation for matrix products, we offer a template repository that walks you through that: +[CandidateVectorSearch_template](https://github.com/hgb-bin-proteomics/CandidateVectorSearch_template/) + ## Acknowledgements - This project uses [Eigen](https://eigen.tuxfamily.org/) and [CUDA](https://developer.nvidia.com/cuda-toolkit) to implement sparse linear algebra, [Eigen](https://eigen.tuxfamily.org/) is licensed under [MPL2](https://www.mozilla.org/en-US/MPL/2.0/), and [CUDA](https://developer.nvidia.com/cuda-toolkit) is owned by [NVIDIA Corporation](https://www.nvidia.com/). From 545be17af8ea40a69ec13da4963a757fa0a16cae Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Tue, 12 Mar 2024 13:59:39 +0100 Subject: [PATCH 03/31] add ms annika info --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9b4b85e..22f3346 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,8 @@ Searching for peptide candidates using sparse matrix + [sparse] vector/matrix multiplication. This is the computational backend for [CandidateSearch](https://github.com/hgb-bin-proteomics/CandidateSearch) - a search engine that aims to (quickly) identify peptide candidates for -a given mass spectrum without any information about precursor mass or variable modifications. +a given mass spectrum without any information about precursor mass or variable modifications. This is also the computational backend for the +non-cleavable crosslink search in [MS Annika](https://github.com/hgb-bin-proteomics/MSAnnika). Implements the following methods across two DLLs: - [VectorSearch.dll](https://github.com/hgb-bin-proteomics/CandidateVectorSearch/blob/master/VectorSearch/dllmain.cpp): From 6259f40ec187a49625c6cb4cfd3ae03be9c48124 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Mon, 18 Mar 2024 14:55:03 +0100 Subject: [PATCH 04/31] update benchmarks --- benchmarks.md | 124 +++++++++++++++++++++++--------------------------- 1 file changed, 57 insertions(+), 67 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index f2902b0..3ce9a6e 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -1,69 +1,59 @@ # Benchmarks -- Encoding size: 130 000 -- X: Number of simulated peptide candidates -- Y: Number of simulated spectra -- N: Number of simulated ions per peptide candidate - -## System 1 - -- Intel Core i7-1185G7 [4 cores @ 1.8 GHz base/ 3.0 GHz boost] -- 16 GB DDR4 RAM [3200 MT/s, NA CAS] -- Nvidia T500 [2GB VRAM] - -|Method|X|Y|N|Time (s)|Time/Y (s)|Best| -|-----|-----|-----|-----|-----|-----|-----| -|Eigen|10000|299|100|0,229|0,000765886|1| -|EigenS|10000|299|100|0,859|0,00287291|4| -|EigenB|10000|299|100|0,329|0,001100334|3| -|EigenSB|10000|299|100|0,326|0,001090301|2| -|Cuda|10000|299|100|1,453|0,004859532|5| -|CudaB1|10000|299|100|6,447|0,021561873|7| -|CudaB2|10000|299|100|1,934|0,006468227|6| - -|Method|X|Y|N|Time (s)|Time/Y (s)|Best| -|-----|-----|-----|-----|-----|-----|-----| -|Eigen|100000|299|100|2,192|0,007331104|2| -|EigenS|100000|299|100|7,744|0,025899666|6| -|EigenB|100000|299|100|2,756|0,009217391|4| -|EigenSB|100000|299|100|2,021|0,006759197|1| -|Cuda|100000|299|100|2,737|0,009153846|3| -|CudaB1|100000|299|100|-|-|7| -|CudaB2|100000|299|100|7,612|0,025458194|5| - -|Method|X|Y|N|Time (s)|Time/Y (s)|Best| -|-----|-----|-----|-----|-----|-----|-----| -|Eigen|1000000|299|100|22,446|0,075070234|3| -|EigenS|1000000|299|100|77,142|0,258|6| -|EigenB|1000000|299|100|25,047|0,083769231|4| -|EigenSB|1000000|299|100|20,579|0,068826087|2| -|Cuda|1000000|299|100|18,295|0,061187291|1| -|CudaB1|1000000|299|100|-|-|7| -|CudaB2|1000000|299|100|65,571|0,219301003|5| - -|Method|X|Y|N|Time (s)|Time/Y (s)|Best| -|-----|-----|-----|-----|-----|-----|-----| -|Eigen|2000000|299|100|54,65|0,18277592|2| -|EigenS|2000000|299|100|173,205|0,579280936|5| -|EigenB|2000000|299|100|57,366|0,191859532|4| -|EigenSB|2000000|299|100|56,491|0,18893311|3| -|Cuda|2000000|299|100|31,138|0,104140468|1| -|CudaB1|2000000|299|100|-|-|7| -|CudaB2|2000000|299|100|198,251|0,663046823|6| - -|Method|X|Y|N|Time (s)|Time/Y (s)|Best| -|-----|-----|-----|-----|-----|-----|-----| -|Eigen|3000000|299|100|68,721|0,22983612|2| -|EigenS|3000000|299|100|227,527|0,760959866|5| -|EigenB|3000000|299|100|81,495|0,272558528|3| -|EigenSB|3000000|299|100|68,644|0,229578595|1| -|Cuda|3000000|299|100|131,857|0,440993311|4| -|CudaB1|3000000|299|100|-|-|7| -|CudaB2|3000000|299|100|-|-|6| - -|Method|X|Y|N|Time (s)|Time/Y (s)|Best| -|-----|-----|-----|-----|-----|-----|-----| -|Eigen|5000000|299|100|114,979|0,384545151|1| -|EigenS|5000000|299|100|381,543|1,276063545|4| -|EigenB|5000000|299|100|141,609|0,473608696|3| -|EigenSB|5000000|299|100|126,029|0,421501672|2| +The following are basically benchmarks of the different sparse matrix/vector +multiplication methods of [Eigen](https://eigen.tuxfamily.org/) and +[cuSPARSE](https://docs.nvidia.com/cuda/cusparse/). + +These benchmarks are supposed to be worst-case scenarios when doing candidate +search, e.g. these benchmarks assume that every peptide would yield 100 ions and +every spectrum 1000 peaks, while also performing normalization and gaussian peak +modeling. + +We ran benchmarks for different database sizes (different number of candidate +peptides to be considered) to assess how that influences performance of the +different methods. Furthermore, every benchmark is run five times to get a more +comprehensive overview of computation times. + +For all benchmarks we search 1001 spectra (this is specifically selected to see +if batched multiplication has influence on performance) and return the top 100 +candidates. + +## System 1 - Standard Office PC + +The first system we tested this on was a standard office laptop with the +following hardware: +- Model: Dell Precision 3560 +- CPU: Intel Core i7-1185G7 [4 cores @ 1.8 GHz base/ 3.0 GHz boost] +- RAM: 16 GB DDR4 RAM [3200 MT/s, NA CAS] +- GPU: Nvidia T500 [2GB VRAM] +- SSD/HDD: 512 GB NVMe SSD +- OS: Windows 10 Education 64-bit (10.0, Build 19045) + +### 10 000 Candidates + +`A * B = C where A[10000, 500000] and B[500000, 1001]` + +Using a database of 10 000 peptide candidates the methods yield the following +runtimes: + +![benchmark_pc_10000](Benchmarks/benchmark_pc_10000.svg) +**Figure 1:** Caption. + + +
Expand for raw data! + +| Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | +|:----------|-------------:|--------:|----------:|---------:|---------:|---------:|---------:|---------:|---------:|----------:|-------:|-----:|----:| +| f32CPU_SV | 10000 | 3.96232 | 3.99317 | 4.16333 | 4.12433 | 4.03925 | 3.96232 | 4.16333 | 4.05648 | 0.0854273 | 8 | 1001 | 100 | +| i32CPU_SV | 10000 | 4.20677 | 4.21627 | 4.18454 | 4.21334 | 4.30658 | 4.18454 | 4.30658 | 4.2255 | 0.0469989 | 9 | 1001 | 100 | +| f32CPU_DV | 10000 | 1.02714 | 0.999038 | 1.04962 | 1.01544 | 1.03139 | 0.999038 | 1.04962 | 1.02453 | 0.0188148 | 1 | 1001 | 100 | +| i32CPU_DV | 10000 | 1.088 | 1.17937 | 1.17109 | 1.1531 | 1.18244 | 1.088 | 1.18244 | 1.1548 | 0.0390465 | 4 | 1001 | 100 | +| f32CPU_SM | 10000 | 1.16123 | 1.14092 | 1.08636 | 1.17035 | 1.1552 | 1.08636 | 1.17035 | 1.14281 | 0.0333204 | 3 | 1001 | 100 | +| i32CPU_SM | 10000 | 1.01817 | 1.06418 | 1.01925 | 1.07144 | 1.13448 | 1.01817 | 1.13448 | 1.0615 | 0.0476856 | 2 | 1001 | 100 | +| f32CPU_DM | 10000 | 1.8242 | 1.77216 | 1.74569 | 1.715 | 1.77249 | 1.715 | 1.8242 | 1.76591 | 0.040254 | 5 | 1001 | 100 | +| i32CPU_DM | 10000 | 1.91169 | 1.86213 | 1.79263 | 1.82148 | 1.81984 | 1.79263 | 1.91169 | 1.84156 | 0.0463954 | 6 | 1001 | 100 | +| f32GPU_DV | 10000 | 4.03647 | 4.09389 | 4.05512 | 4.07632 | 4.05695 | 4.03647 | 4.09389 | 4.06375 | 0.0219723 | 9 | 1001 | 100 | +| f32GPU_DM | 10000 | 3.62518 | 3.74288 | 3.75778 | 3.71924 | 3.73217 | 3.62518 | 3.75778 | 3.71545 | 0.0524091 | 7 | 1001 | 100 | +| f32GPU_SM | 10000 | 9.95502 | 10.0398 | 10.1103 | 10.1644 | 10.0673 | 9.95502 | 10.1644 | 10.0674 | 0.0784879 | 11 | 1001 | 100 | + +
From f779827602b318c14e0efd262b13947cabec2151 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Mon, 18 Mar 2024 14:56:42 +0100 Subject: [PATCH 05/31] fix tag --- benchmarks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks.md b/benchmarks.md index 3ce9a6e..b9739c2 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -40,7 +40,7 @@ runtimes: **Figure 1:** Caption. -
Expand for raw data! +
Expand for raw data! | Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | |:----------|-------------:|--------:|----------:|---------:|---------:|---------:|---------:|---------:|---------:|----------:|-------:|-----:|----:| From eb79233961c70afeb93b3fa812ae21ad6a328040 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Mon, 18 Mar 2024 15:20:18 +0100 Subject: [PATCH 06/31] add 100 000 benchmark --- benchmarks.md | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/benchmarks.md b/benchmarks.md index b9739c2..a04d54b 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -37,7 +37,9 @@ Using a database of 10 000 peptide candidates the methods yield the following runtimes: ![benchmark_pc_10000](Benchmarks/benchmark_pc_10000.svg) -**Figure 1:** Caption. +**Figure 1:** Float32-based sparse matrix * dense vector search using +[Eigen](https://eigen.tuxfamily.org/) yields the fastest computation time of +only 1.02 seconds.
Expand for raw data! @@ -57,3 +59,36 @@ runtimes: | f32GPU_SM | 10000 | 9.95502 | 10.0398 | 10.1103 | 10.1644 | 10.0673 | 9.95502 | 10.1644 | 10.0674 | 0.0784879 | 11 | 1001 | 100 |
+ +### 100 000 Candidates + +`A * B = C where A[100000, 500000] and B[500000, 1001]` + +Using a database of 100 000 peptide candidates the methods yield the following +runtimes: + +![benchmark_pc_100000](Benchmarks/benchmark_pc_100000.svg) +**Figure 1:** Float32-based sparse matrix * sparse matrix search using +[Eigen](https://eigen.tuxfamily.org/) yields the fastest computation time of +only 5.08 seconds. Note that `f32GPU_SM` has been excluded from the plot since +computation times exceeded all other methods by more than 10-fold. The raw data +is available below. + + +
Expand for raw data! + +| Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | +|:----------|-------------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|-------:|-----:|----:| +| f32CPU_SV | 100000 | 35.304 | 34.8771 | 31.7219 | 33.6381 | 28.2473 | 28.2473 | 35.304 | 32.7577 | 2.87956 | 9 | 1001 | 100 | +| i32CPU_SV | 100000 | 41.3168 | 42.1746 | 35.1852 | 33.7421 | 31.1516 | 31.1516 | 42.1746 | 36.7141 | 4.82477 | 10 | 1001 | 100 | +| f32CPU_DV | 100000 | 9.8869 | 9.8668 | 9.57659 | 7.34046 | 6.65369 | 6.65369 | 9.8869 | 8.66489 | 1.54662 | 3 | 1001 | 100 | +| i32CPU_DV | 100000 | 9.78072 | 9.80233 | 9.30471 | 7.98685 | 9.94904 | 7.98685 | 9.94904 | 9.36473 | 0.807484 | 4 | 1001 | 100 | +| f32CPU_SM | 100000 | 5.92302 | 5.56398 | 4.88576 | 4.40602 | 4.63187 | 4.40602 | 5.92302 | 5.08213 | 0.639863 | 1 | 1001 | 100 | +| i32CPU_SM | 100000 | 5.36173 | 5.56918 | 5.83226 | 4.43903 | 4.73719 | 4.43903 | 5.83226 | 5.18788 | 0.581964 | 2 | 1001 | 100 | +| f32CPU_DM | 100000 | 13.9166 | 14.7445 | 14.933 | 11.0524 | 11.2453 | 11.0524 | 14.933 | 13.1783 | 1.89294 | 6 | 1001 | 100 | +| i32CPU_DM | 100000 | 14.0893 | 14.2498 | 14.913 | 11.2577 | 10.6276 | 10.6276 | 14.913 | 13.0275 | 1.9409 | 5 | 1001 | 100 | +| f32GPU_DV | 100000 | 19.6112 | 20.1476 | 19.9083 | 19.1877 | 18.8013 | 18.8013 | 20.1476 | 19.5312 | 0.542965 | 7 | 1001 | 100 | +| f32GPU_DM | 100000 | 26.7439 | 26.9163 | 26.7714 | 26.4168 | 26.3571 | 26.3571 | 26.9163 | 26.6411 | 0.241999 | 8 | 1001 | 100 | +| f32GPU_SM | 100000 | 880.093 | 919.047 | 807.312 | 792.249 | 774.371 | 774.371 | 919.047 | 834.615 | 61.9812 | 11 | 1001 | 100 | + +
From 4e17b827686cd54bc5504254a0c1416d170e8cc8 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Mon, 18 Mar 2024 15:30:19 +0100 Subject: [PATCH 07/31] formatting and 1M benchmark --- Benchmarks/benchmark_pc_1000000.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Benchmarks/benchmark_pc_1000000.md diff --git a/Benchmarks/benchmark_pc_1000000.md b/Benchmarks/benchmark_pc_1000000.md new file mode 100644 index 0000000..9775938 --- /dev/null +++ b/Benchmarks/benchmark_pc_1000000.md @@ -0,0 +1,12 @@ +| Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | +|:----------|-------------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|-------:|-----:|----:| +| f32CPU_SV | 1000000 | 292.024 | 305.725 | 275.855 | 283.298 | 308.572 | 275.855 | 308.572 | 293.095 | 14.0837 | 9 | 1001 | 100 | +| i32CPU_SV | 1000000 | 337.896 | 330.922 | 293.953 | 328.767 | 351.387 | 293.953 | 351.387 | 328.585 | 21.2805 | 10 | 1001 | 100 | +| f32CPU_DV | 1000000 | 87.1387 | 78.9427 | 73.9562 | 82.5062 | 88.0868 | 73.9562 | 88.0868 | 82.1261 | 5.8669 | 4 | 1001 | 100 | +| i32CPU_DV | 1000000 | 88.2644 | 76.9449 | 70.4682 | 81.2829 | 92.4659 | 70.4682 | 92.4659 | 81.8853 | 8.77158 | 3 | 1001 | 100 | +| f32CPU_SM | 1000000 | 59.1796 | 42.2678 | 38.3327 | 43.238 | 61.2774 | 38.3327 | 61.2774 | 48.8591 | 10.5662 | 2 | 1001 | 100 | +| i32CPU_SM | 1000000 | 41.7158 | 45.5913 | 38.0705 | 43.2118 | 56.596 | 38.0705 | 56.596 | 45.0371 | 7.0145 | 1 | 1001 | 100 | +| f32CPU_DM | 1000000 | 105.11 | 106.617 | 95.4387 | 105.418 | 114.833 | 95.4387 | 114.833 | 105.483 | 6.88718 | 5 | 1001 | 100 | +| i32CPU_DM | 1000000 | 113.402 | 105.918 | 96.2186 | 109.205 | 113.995 | 96.2186 | 113.995 | 107.748 | 7.23534 | 6 | 1001 | 100 | +| f32GPU_DV | 1000000 | 166.4 | 165.727 | 165.672 | 167.374 | 169.121 | 165.672 | 169.121 | 166.859 | 1.4387 | 7 | 1001 | 100 | +| f32GPU_DM | 1000000 | 301.266 | 299.136 | 254.768 | 257.244 | 256.796 | 254.768 | 301.266 | 273.842 | 24.0922 | 8 | 1001 | 100 | \ No newline at end of file From 1d9ad2c1c28e28f4cc53a41167c23deff29ae60e Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Mon, 18 Mar 2024 15:30:50 +0100 Subject: [PATCH 08/31] formatting and 1M benchmark --- Benchmarks/benchmark_pc_1000000.md | 12 ----------- benchmarks.md | 34 +++++++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 15 deletions(-) delete mode 100644 Benchmarks/benchmark_pc_1000000.md diff --git a/Benchmarks/benchmark_pc_1000000.md b/Benchmarks/benchmark_pc_1000000.md deleted file mode 100644 index 9775938..0000000 --- a/Benchmarks/benchmark_pc_1000000.md +++ /dev/null @@ -1,12 +0,0 @@ -| Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | -|:----------|-------------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|-------:|-----:|----:| -| f32CPU_SV | 1000000 | 292.024 | 305.725 | 275.855 | 283.298 | 308.572 | 275.855 | 308.572 | 293.095 | 14.0837 | 9 | 1001 | 100 | -| i32CPU_SV | 1000000 | 337.896 | 330.922 | 293.953 | 328.767 | 351.387 | 293.953 | 351.387 | 328.585 | 21.2805 | 10 | 1001 | 100 | -| f32CPU_DV | 1000000 | 87.1387 | 78.9427 | 73.9562 | 82.5062 | 88.0868 | 73.9562 | 88.0868 | 82.1261 | 5.8669 | 4 | 1001 | 100 | -| i32CPU_DV | 1000000 | 88.2644 | 76.9449 | 70.4682 | 81.2829 | 92.4659 | 70.4682 | 92.4659 | 81.8853 | 8.77158 | 3 | 1001 | 100 | -| f32CPU_SM | 1000000 | 59.1796 | 42.2678 | 38.3327 | 43.238 | 61.2774 | 38.3327 | 61.2774 | 48.8591 | 10.5662 | 2 | 1001 | 100 | -| i32CPU_SM | 1000000 | 41.7158 | 45.5913 | 38.0705 | 43.2118 | 56.596 | 38.0705 | 56.596 | 45.0371 | 7.0145 | 1 | 1001 | 100 | -| f32CPU_DM | 1000000 | 105.11 | 106.617 | 95.4387 | 105.418 | 114.833 | 95.4387 | 114.833 | 105.483 | 6.88718 | 5 | 1001 | 100 | -| i32CPU_DM | 1000000 | 113.402 | 105.918 | 96.2186 | 109.205 | 113.995 | 96.2186 | 113.995 | 107.748 | 7.23534 | 6 | 1001 | 100 | -| f32GPU_DV | 1000000 | 166.4 | 165.727 | 165.672 | 167.374 | 169.121 | 165.672 | 169.121 | 166.859 | 1.4387 | 7 | 1001 | 100 | -| f32GPU_DM | 1000000 | 301.266 | 299.136 | 254.768 | 257.244 | 256.796 | 254.768 | 301.266 | 273.842 | 24.0922 | 8 | 1001 | 100 | \ No newline at end of file diff --git a/benchmarks.md b/benchmarks.md index a04d54b..91259c3 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -41,7 +41,6 @@ runtimes: [Eigen](https://eigen.tuxfamily.org/) yields the fastest computation time of only 1.02 seconds. -
Expand for raw data! | Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | @@ -68,13 +67,12 @@ Using a database of 100 000 peptide candidates the methods yield the following runtimes: ![benchmark_pc_100000](Benchmarks/benchmark_pc_100000.svg) -**Figure 1:** Float32-based sparse matrix * sparse matrix search using +**Figure 2:** Float32-based sparse matrix * sparse matrix search using [Eigen](https://eigen.tuxfamily.org/) yields the fastest computation time of only 5.08 seconds. Note that `f32GPU_SM` has been excluded from the plot since computation times exceeded all other methods by more than 10-fold. The raw data is available below. -
Expand for raw data! | Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | @@ -92,3 +90,33 @@ is available below. | f32GPU_SM | 100000 | 880.093 | 919.047 | 807.312 | 792.249 | 774.371 | 774.371 | 919.047 | 834.615 | 61.9812 | 11 | 1001 | 100 |
+ +### 1 000 000 Candidates + +`A * B = C where A[1000000, 500000] and B[500000, 1001]` + +Using a database of 1 000 000 peptide candidates the methods yield the following +runtimes: + +![benchmark_pc_1000000](Benchmarks/benchmark_pc_1000000.svg) +**Figure 3:** Int32-based sparse matrix * sparse matrix search using +[Eigen](https://eigen.tuxfamily.org/) yields the fastest computation time of +only 45.04 seconds. Note that `f32GPU_SM` has been excluded from the plot since +the method ran out of memory. The raw data is available below. + +
Expand for raw data! + +| Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | +|:----------|-------------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|-------:|-----:|----:| +| f32CPU_SV | 1000000 | 292.024 | 305.725 | 275.855 | 283.298 | 308.572 | 275.855 | 308.572 | 293.095 | 14.0837 | 9 | 1001 | 100 | +| i32CPU_SV | 1000000 | 337.896 | 330.922 | 293.953 | 328.767 | 351.387 | 293.953 | 351.387 | 328.585 | 21.2805 | 10 | 1001 | 100 | +| f32CPU_DV | 1000000 | 87.1387 | 78.9427 | 73.9562 | 82.5062 | 88.0868 | 73.9562 | 88.0868 | 82.1261 | 5.8669 | 4 | 1001 | 100 | +| i32CPU_DV | 1000000 | 88.2644 | 76.9449 | 70.4682 | 81.2829 | 92.4659 | 70.4682 | 92.4659 | 81.8853 | 8.77158 | 3 | 1001 | 100 | +| f32CPU_SM | 1000000 | 59.1796 | 42.2678 | 38.3327 | 43.238 | 61.2774 | 38.3327 | 61.2774 | 48.8591 | 10.5662 | 2 | 1001 | 100 | +| i32CPU_SM | 1000000 | 41.7158 | 45.5913 | 38.0705 | 43.2118 | 56.596 | 38.0705 | 56.596 | 45.0371 | 7.0145 | 1 | 1001 | 100 | +| f32CPU_DM | 1000000 | 105.11 | 106.617 | 95.4387 | 105.418 | 114.833 | 95.4387 | 114.833 | 105.483 | 6.88718 | 5 | 1001 | 100 | +| i32CPU_DM | 1000000 | 113.402 | 105.918 | 96.2186 | 109.205 | 113.995 | 96.2186 | 113.995 | 107.748 | 7.23534 | 6 | 1001 | 100 | +| f32GPU_DV | 1000000 | 166.4 | 165.727 | 165.672 | 167.374 | 169.121 | 165.672 | 169.121 | 166.859 | 1.4387 | 7 | 1001 | 100 | +| f32GPU_DM | 1000000 | 301.266 | 299.136 | 254.768 | 257.244 | 256.796 | 254.768 | 301.266 | 273.842 | 24.0922 | 8 | 1001 | 100 | + +
From 781b02f619e0f603e7f2a7410f751bb262f5b72f Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Mon, 18 Mar 2024 16:06:54 +0100 Subject: [PATCH 09/31] add system 2 specs --- benchmarks.md | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/benchmarks.md b/benchmarks.md index 91259c3..a1d63e9 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -16,7 +16,8 @@ comprehensive overview of computation times. For all benchmarks we search 1001 spectra (this is specifically selected to see if batched multiplication has influence on performance) and return the top 100 -candidates. +candidates. All benchmarks were conducted during light background usage (e.g. +open browser, text editor, etc.). ## System 1 - Standard Office PC @@ -25,7 +26,7 @@ following hardware: - Model: Dell Precision 3560 - CPU: Intel Core i7-1185G7 [4 cores @ 1.8 GHz base/ 3.0 GHz boost] - RAM: 16 GB DDR4 RAM [3200 MT/s, NA CAS] -- GPU: Nvidia T500 [2GB VRAM] +- GPU: Nvidia T500 [2 GB VRAM] - SSD/HDD: 512 GB NVMe SSD - OS: Windows 10 Education 64-bit (10.0, Build 19045) @@ -120,3 +121,23 @@ the method ran out of memory. The raw data is available below. | f32GPU_DM | 1000000 | 301.266 | 299.136 | 254.768 | 257.244 | 256.796 | 254.768 | 301.266 | 273.842 | 24.0922 | 8 | 1001 | 100 |
+ +## System 2 - High Performance PC + +The second system we tested this on was a more powerful desktop PC with the +following (more recent) hardware: +- MB: ASUS ROG Strix B650E-I +- CPU: AMD Ryzen 7900X [12 cores @ 4.7 GHz base/ 5.6 GHz boost] +- RAM: Kingston 64 GB DDR5 RAM [5600 MT/s, 36 CAS] +- GPU: ASUS Dual [Nvidia] GeForce RTX 4060 Ti OC [16 GB VRAM]* +- SSD/HDD: Corsair MP600 Pro NH 2 TB NVMe SSD [PCIe 4.0] +- OS: Windows 11 Pro 64-bit (, Build) + +*_Note:_ `Dual` _is part of the name, this is a single graphics card!_ + +### 10 000 Candidates + +`A * B = C where A[10000, 500000] and B[500000, 1001]` + +Using a database of 10 000 peptide candidates the methods yield the following +runtimes: From df59975fc1e57e0849aa5dfe2273d0a914db5532 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Tue, 19 Mar 2024 12:21:29 +0100 Subject: [PATCH 10/31] add 5M benchmark --- Benchmarks/benchmark_pc_5000000.R | 56 ++ Benchmarks/benchmark_pc_5000000.svg | 762 +++++++++++++++++++++++++++ Benchmarks/benchmark_pc_5000000.xlsx | Bin 0 -> 11077 bytes benchmarks.md | 39 +- 4 files changed, 854 insertions(+), 3 deletions(-) create mode 100644 Benchmarks/benchmark_pc_5000000.R create mode 100644 Benchmarks/benchmark_pc_5000000.svg create mode 100644 Benchmarks/benchmark_pc_5000000.xlsx diff --git a/Benchmarks/benchmark_pc_5000000.R b/Benchmarks/benchmark_pc_5000000.R new file mode 100644 index 0000000..8d199b0 --- /dev/null +++ b/Benchmarks/benchmark_pc_5000000.R @@ -0,0 +1,56 @@ +library(tidyverse) +library(readxl) + +data <- read_xlsx("benchmark_pc_5000000.xlsx") + +data <- data[-c(9, 10),] + +data$Method <- factor(data$Method, levels = c("f32CPU_SV", + "i32CPU_SV", + "f32CPU_DV", + "i32CPU_DV", + "f32CPU_SM", + "i32CPU_SM", + "f32CPU_DM", + "i32CPU_DM", + "f32GPU_DV", + "f32GPU_DM", + "f32GPU_SM")) + +std9_palette = c("#2B2D42", "#5C6378", "#8D99AE", + "#BDC6D1", "#EDF2F4", "#EE8B98", + "#EF233C", "#E41433", "#D90429") + +grp9_palette = c("#2B2D42", "#5C6378", "#757E93", + "#A5B0C0", "#BDC6D1", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +nge9_palette = c("#E8D5D3", "#CDC1C4", "#B2ADB4", + "#C06B6E", "#CE2928", "#B62626", + "#9E2224", "#6A2123", "#362022") + +grp11_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +grp10_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433") + +grp08_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4") + +text_col <- c(rep("white", 4), rep("black", 4)) + +# export as 1200 x 800 + +ggplot(data, aes(x = Method, y = Mean, fill = Method)) + + geom_bar(stat="identity", color = "black") + + geom_errorbar(aes(x = Method, ymin = Mean-SD, ymax = Mean+SD), colour = "black", width = 0.3, linewidth = 1.0) + + scale_fill_manual(values = grp10_palette) + + ggtitle("Execution time of the different methods using 5 000 000 simulated candidates.") + + xlab("Method") + + ylab("Time (s)") + + geom_text(aes(label=round(Mean, 2)), size = 5.0, color = text_col, position = position_stack(vjust = 0.5)) + + theme_minimal(base_size = 18) + + theme(axis.text.x = element_text(angle = 90, hjust = 0, vjust = 0.5)) diff --git a/Benchmarks/benchmark_pc_5000000.svg b/Benchmarks/benchmark_pc_5000000.svg new file mode 100644 index 0000000..acb10d2 --- /dev/null +++ b/Benchmarks/benchmark_pc_5000000.svg @@ -0,0 +1,762 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Benchmarks/benchmark_pc_5000000.xlsx b/Benchmarks/benchmark_pc_5000000.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6a287f847e6d2bc39ab26fbff7317d6fea34d4dd GIT binary patch literal 11077 zcmeHNg;yN;(#2haySqbhcMTc{?t={uL4reYAKaY~7y=9)+}+&+gatwZ1b04?_x9~> zcE7*iz3y|m&z$L7(^FmdcdM&PT^SY*7YYFi2?`2|3M!Y?-U$c|1%(9<1%(5J1Y;oW zzJ)CG^M+&XdDJ*uiE)qzU zD`uV8^jzeWw1>oOFA4=nR#vvHETqc7QU@g(B)5+pO&;{MMivk@xY_Ykd&3xA1RbH0 zZ{?OpBfEFG0K!o1ZUI!f6E$l6hwXEsEI4U z-i?F($MJvM{4XZtpZ+=+^g``l+`J1PyqsH0z>-q-lvHS;dg&jixQbaHTSQB;*1ZLT|7ci)(q1^8{^_4xwya8Z$xen-ZQhyJe$D~4{#BW@`8dv zHK-xp;{KMEU+yD4t)sGGZEDOp0rlAgLEeLa3C}~F=~qSAK%JO#rD1K$%)&B-kUk=V zM0}mp7=GRE1o2GsK4f-T*$8{PnFiJkdrpUQHmP2~u( z|EoZpaT=$U7Ic2EMMR~gy{rh}SZFeiOIZEGKh7MzmblVj3R(M&Gb@(!1)P5sp-CNr&GfugWL*c!Yv=g%4e~fH&|%ANwW} zgs>EvE50fZqPvnW2g~nmzD~B3Or;(fZ0+P<6+ns=sCV@Wc{SjvaVRL>NpvU=-;)FO zC|94fSc69P=rrryZnmt%ZjEQZQe*@TIa5rBe z{}X>fh{<2!o|rBE#9?A6BLZ;eX zxc$__T&$)v(;c$>1D%rvRLl_#{5~H6HHC&c6C5F23f-6Fku56$o|RX$6vWnemWn9B zU=M%=5dNrdWQ-=F(?;1ohYlVVesOoaWt4<|o%j)4&E}}~U z@3W5*EcSs*MPlYJT$4&MrzdzR#bRC>E#-F4MTPID5_eGXxsNCN z;bnr_>2;0`7!t8R18&DMFGwe(l5TZ}zmKI7LU@VVv&9jldvONd<9!y;d)sV+BWF>O zhsNg-ELfk)?%HU_i1vngV{u?~qL$0)v1_n)aaa85(f?foT2P6_<({HTk_rln@ac+w zYk->#0O0P%@$LkzN$SK^jAvBHj6&dI1Zl1_tU-r}uEwD4=sZP&Y?>GrzVW%bz2 zc^>uBn$a;6SHi_ao(4R|Sc8^&GG5ImD)q_a&`fwF$^xmCbe!DIwr}mYWmBh{*j?!C zGK;LsCwuPhTb2|D+mMdfw*k;Fcxv*Y_TS>t=LDg8{%}gLf zv8qDeIk3?hzf!+kLglI%e?o3_{JAYrwKfH8PGRFdx~xP2E2*meuU4bDD$;9Ws$S#t)z>J((7nc3D+LsET9`^7(`ddDvqZewN#EL1 zMRFN*nSC!o*N?q5$ECFTDd2rK$v6_#MYm0|#WFILai|5UsMmxLe0~`u!wr5J6vG~VdW6Flei@XgU<4_yIuW$Du8blV zp&;E{gjDIC@E|jmmcI3R62_`!37bX|#zA&AKwDMV0tF;Qk-qMd)y9Hsx8NaRY}9U? z(MqJQq%tRww~E9`q}nt^D^;S#77vZ5TbT-pXhlwvi5_s=)iizkwQzZ4t1iInQe(XF zB&}s7ZScdSZ})dGgVjelR(96+N*zY1 z9n}-Fi`+%AxcY(>$tQ1@EKZL1A2yFafR0!MtKRx@WTt?UT!vk?v+akZSr{!!KXjul zvsr<%!%Bog^gzg1{n=W>&X8qo%>-&Vs~Wni5`-8Li?yq%DER$ko{znor5doZt9pm< zk;8l}x?>s6^a6Tkwb6D&JiHs_7`03TxAxdv2L^`vx+!1vM-kL&m3SCpQw$SN-4(3h zYTIi-aV{Kqoaj0_g9g)!=W!)7E}^C-i~1yDvBvH5FsJdmvtF=;&z6H5lq zl_VddWSx>7u|~?cm$h3ImBNQweui{zdglWzdTOpEcRNkgaGadkh(-q;)Kpvc7%s?_ zV@uhECdcE-_QC1G(%8Z2NcfWKgeP_CnYenBHPg}lwGO|8vHnT>SC6XQ+y2VH6$OWl zZzWjTfW{QL55rE;XERcwUKU5`pXV8=G-(GF#gmOF&h93g5ZvJI9$+myhwycTi*@f9 zr>#hVkI``L!X;}s7RLsXM80l#SCfaG3=FS{TI%znUGdbo0fO6dM5y}FpBQ+_ zq-k&o_=JnJTfft1py()7MXmGcjoD;l?!d_(VToJPH0q7fSO5?3a*YFQZt>?3J~7NY zZ5PgkT7Ql1H`gIC(Rb8-o;su}IG|1jmhM!F9W1Z`L%6KDSi_1wl9)+R#xB+HjiY5^ zhsfL}!|0h-<0TW-z2ZXp7ANUylX`*n6qn6#A@d5$H7LvV6Cc>!g(sky>A#A88Yx~ngz zi){$*3)8qYn6?kyn2y(79L?b!rJ{9C2})0Vnxt@^CLwYkeFgGBon|J`$m)YP-4M*e za8x!{WTVl`EUUxT@9j3LoUe=l+I6;(r=xBmNGSS2(N<)@<*0Pr`jf!8ahHK*f!g2X zz=`rXuAlqC^}*c02j=gYxk1j62xcTveWZ?8t>Uy2o$;aMq$S!;tIkM&s@*2rmWNha?7}c!xVEW#j-4xa!tEmTU=$|6BkNfHeW_ z=MzPh9*@;Y8G<3G*y-Kxlf~3naNEJ9lChl%d)&h^4l^RN-C46yE8HPDje*#TSF4^N zk@jf28MIuJ#U}@FN4R_cHl#h(1i-R2A$GDP?;iwGMD>$};HU68+iE*E^%N}d*SlD8 z#t_oR&N0D5I!##^c^I!=U$&|rG16AGzOCKIra^^2G{lwDJ@d+zsQvO%T^+p;b}l_> z&v$CSpe2>K@>v^XwT?Mmf{;A)xk8mQFHGQBTjf4NsB%JGFz^=aSJgEQ&kbK zVJ5Nqge6RHt8pM|#gWbU##Xn%F#hW>zMP9lzPFX_^u7EY(j+&5aB z*}lz(C?^7hg|(t10_Rgs!A0|VwabrP#D+VYa)d4T;-CFLPD#IuKOhcm0Z3P27~o+T zgFF2&s+8&3I@V|e^^2g!wmvt0J5xt;iMO1>!?%gQmJB^wu`GoHW&lRSHuM#5o= z5{4d$fEYzoLMCLre3`<=6WY|>m)Iu(WRs97pz@pL(&NXC`kpR%@i^OC6KJ;XyPi>8 zrQq0d)bfD%AF+ZkDX6HOzhG6G7-i8JRD8iwqs=|Z^GcI(SY;xxM)?G_v#?YNMe&-B z?z)-NSkBH|$qqZh8eE)^nr8yDy|=Qom$pj)Ah0ejOg{3>LS2uSAF`ye##$( zmQ+;%IK3cf8y2bnBlc?331LEpw7d>l?mm=Ud^&13DAlB0{X{f7W-*<1CN%&k!1&x(O(8i38-VP1jmmnbypreditR9j zG_VMJEn{DhN}(vY!i?XC6qeZ3X(bS}K_4@q&`pzvKR`+rvYw95QleQ&NCUbu4mMZ! z@#ChV`HG&R6yWo|Rc(_iQ3^eVapP5a4P8Oab`L}37gJ&x2D+8y1BQQXCV^(A96|3R+$rX^-HqPnsCjHj|adhc4v545$vHK>PSf7PU%} zNzAY(Jjd#t^}#|uu8BdHUEx&%ptcJR3MBdt>V^DADY@E5~L}bQSejm3f&CSGpDd;^rlTOnb4KA zud2j?9!hDV8aTO&Q;bX_bxAZYyv%!tR2uGB^5^&|IdVmP9**}~Lfd#@K-JOZV&Q zZ`~`Ty8ZC2A|1e`j}+gVY2z}gyoq8uy|G|@tNfc#_&Kp;2MXFY#x1!~FCR$Rb#J;knvf?^)MGJLUBqo! z1vJ>}Pme(*o9G#$NZ=d4BrGE;O{xyzT5Uvb=)Sk2Zi4@8mzm5EaRV49t7(nNXrmx- z53Y^|EQ>TO){jN<2n(IQPg!mu)N+sMC-i9)bJLwP;~Cj)o_a-XnnLzf3CuD$u6>?u z3Jn021Lv7s(~wvIm*0~es;!+|g1zt=Be6G%uZd;Wl#B#+vR}T*iNkpDi5F&v;&b#< zZ47>o6V%e7co2)EXPx#2|IpXSnZ@6!cEHqRUG!T!9Feab5#>eW#Tb?bFj&Ma3<(8| zU@bTT@4-+er$XQUFga^6iw_ePS5Bu5C+Tx+-$W#Y;m&iI+!NXj0Y2W~`)#sN79(I+ zCa4zql7bcZ#wK^Q(-{PIoA=gsGoHJ8ye+qyF&3)=i~}=H_505+&L!5oqK za@AUEc6g|g4@cnpTBJPv;993*5IM_MG(Ivk+d+?0UuE*9v#uu7ux-20i!*R9$4{c^ zO9R$Av!hhbUwZM-=UWtqzh=S9o21Vakf*!r#UQikr7yY7_wm$U+XIhP$2P6s?Z zubqoevTZxzlFO1|R;06I&cQ<&@2<7<(Z$>DwQYHu zY%v>6jC*Y?=QL+9!6vKlSn91_|Hq8*S#Gsv^JWrPo-eVO*g#oohNd8TdacP`VaMxw zJETTtn&-f4oIS#x1uukVnpp#aLainbBE?+CD^IgjA_7RbOtO$+lIk!5S7N$Paxa?+ zTR;l>^C{9o2bNcXSYrCynG!4%SuR-a!h>GiT{N~~YlIrPsuV$+S|6Mr%KJ9Rz_d%G z-E9=H@olg|yZqS2y1E=Jh;fmD(IKv1#<+sAs__zcu06L*hiw*GqoxIu<7kAU)jbN+ zEpxkhBR`Bzsj*NHsx4)96&$dOq?f~9w5hG}Q_Ky!A=v(AUE0U|W!61uKV0}Tdc}$K zEQGnl@m`h9^#hQ-8ROZUw^HlotY0*27bjcZDEAA!R@I)U+FFg3Iv!ReG__g2D~H!| z0;1nPFo+N4jOxFZU_DUExw;u%ZJo11^b8Vt;~XIHPIFIP$|;S8@n)K2FqzLZdNoNe z7HOkZkb&*dpUEC^O=*!Wnb@oY>t%>$0d_-0s0X3W$bGfpm)FdgpG*@q3^8U7ZlDd# zCS^Trs|FU>54U&N#zL{9qg6~s3FO~ph+Ej}s zzs?JV8dn+|p}$$Ho+1@FZlgiRSe|oKKj25HcWpF4vZDj|7wMHDrYH%QHIm%t-&3+! znC>w7S++x6+O;%1KI!k@<=49)(7yQT^3JU#S^6TdAZ4Yq!QST_$b^xw$Vm*j0 z24LMB4ts2~A~%do&#LeB=aYS{FdvC5GmfFP9`Ap+RrN3?6>6CBk5t{Aahq6k)11yy zMX9sscdg_mH3}u<(*6=v@gl5446h4~=Af*+Y%&VqHNo0Gw9%nlxq^Dp1Q?|XROjn4 z*v*8eYFOn~{FdUF9?VhC2NGJ$M6Zc8tAjiw;L>9BFeN6lh)}XxUW-$LGItx0mDotW zTxFsjUWnq$K@3-&lKI@(0__N1*hGG`u`{2|umG*!QpbNTnbKJ}L~)M%05pcAx$j!4 z+IY*sd|sfEMMmC^UKT!8Dn{nAA87LxPy<$G%a%B%z;XqZIdyI6?H`pN=e4>;3~SxO zek+4gd#jk6s&5lQs(_etAR48_C$p;AwGeh&ovFlr5h8pMXZ%e%`}3sF5pC{(S&ef9 zs*5?E56q`Qt%M1#B9z7ako!6(%C=xd64RTe02wE=HF+0qA&Hx}-XG^ngNMW}xA%s% zy6g~T&^PSwzqrG80Kbuz<-NmuM^agKT!Kc)06WZ-ffet6(=kV|XcYUB1$F$W@p3uAWl=A zwPyH&SDn`t3;esu@Io3jnGM~dIbv2<_5tR2P5|Gin{LnLb1WjU6-?vzHecMT$3=As zIdnCEUSR?2Y~rJ@JY`8oyLVXA4QpxB8Ah}dR2ycfCKxBl-SP%zjxC;rO1hBAby+G|ciF$mfs=jKSFvyDorXIU z;d3%f?GOp+uZni??DR3QajaX1WXUzrL6NlKMjhj1@ zhb)M(@**gZ!NM^U8gSgdUt?v<<*PdQMpT3LR*X)HODAQw9EMA$?-{0J#U7bBwE`Ho z{rd7@KHQ04mDP^5E^b_F8SwG9NoL~LQ_gl^$jT2Yx--|s8cR=Eb&d;)J@iT$ z#zP#|OuMbJv*U%2wnftE{Kw_VOP4a}>&DrnCmQt{wxwAmw9S?bL0**eedH16;w<83 z&0BbkaIaw;)l$agu@vB7B>fP1zxcoj!*Nw?KuB2^ipFl7>tq!$xveLJvvqP-xeo@C<+VN>TSOy-knd6>Hm6`=YD-X zr?c_oufH#?>H~<9s!twudGa^*Q)j}`$wJ-L$=Qv=!pRlz!=+D6`2RH|o?Pb((g1dI z;)ZS@-eS@nIcTzQOB-~d=h36h*VHt!HrrJzDnEO5f2nNnO(sWGfT@8rXDGw(GbOFWQD^){NJ{j?-AU8j-bQ6CaU|iWzYj z>SJhIlik8rhIq9;lpP#yMJaB~A#enaP>u%3w*mWMv@z%w^)<$cxC=3eHf9$-W5yPh z44WfRr0-Q8?LX@~_NO<{Nl!t@^pnz$@t2Tq)YOvNWwJ3nlMt~E~7Ste9y?Q=hVktO`#i;2%T(+?xMA)=eEV^ny zV6rb_U0R~n7CPAdt6>zI<@Ap7%@HL$*gE{Nv-V(RxC3P&&bl>mj9>xzHOVUH#AWu^ z`V>C0OtHd;EAuu@=QkyY@^=u{DuJ)ahOlF@0>qFZ7v4$h7bI0Y6k@aC34tYLqD%%^ z~c)shnk#A6M=!k_ZBiPMMdnzIWmK zyCXYug?BooE#r2r{%eE!4=5B=B+5_l|I@Di)y}U?%0DcPq5bD3{?@Ym z)yl8swm+;W;{Rju?NVJhL_R(3I6YeRb3hWDK>r#-l0OZKV<+e Ij6Xj8ADvfbUH||9 literal 0 HcmV?d00001 diff --git a/benchmarks.md b/benchmarks.md index a1d63e9..0acc0a6 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -12,7 +12,8 @@ modeling. We ran benchmarks for different database sizes (different number of candidate peptides to be considered) to assess how that influences performance of the different methods. Furthermore, every benchmark is run five times to get a more -comprehensive overview of computation times. +comprehensive overview of computation times. The averages are plotted below, +with error bars denoting standard deviation. For all benchmarks we search 1001 spectra (this is specifically selected to see if batched multiplication has influence on performance) and return the top 100 @@ -24,7 +25,7 @@ open browser, text editor, etc.). The first system we tested this on was a standard office laptop with the following hardware: - Model: Dell Precision 3560 -- CPU: Intel Core i7-1185G7 [4 cores @ 1.8 GHz base/ 3.0 GHz boost] +- CPU: Intel Core i7-1185G7 [4 cores @ 1.8 GHz base / 3.0 GHz boost] - RAM: 16 GB DDR4 RAM [3200 MT/s, NA CAS] - GPU: Nvidia T500 [2 GB VRAM] - SSD/HDD: 512 GB NVMe SSD @@ -122,12 +123,44 @@ the method ran out of memory. The raw data is available below.
+### 5 000 000 Candidates + +`A * B = C where A[5000000, 500000] and B[500000, 1001]` + +Using a database of 5 000 000 peptide candidates the methods yield the following +runtimes: + +![benchmark_pc_5000000](Benchmarks/benchmark_pc_5000000.svg) +**Figure 5:** Float32-based sparse matrix * sparse matrix search using +[Eigen](https://eigen.tuxfamily.org/) yields the fastest computation time of +only 210.98 seconds. Note that all GPU-based methods have been excluded from the +plot since their computation times exceeded that of CPU-based methods by more +than 10-fold or because they ran out of memory. The raw data is available +below. + +
Expand for raw data! + +| Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | +|:----------|-------------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|---------:|-------:|-----:|----:| +| f32CPU_SV | 5000000 | 1488.95 | 1753.58 | 1409.96 | 1405.52 | 1433.23 | 1405.52 | 1753.58 | 1498.25 | 146.545 | 7 | 1001 | 100 | +| i32CPU_SV | 5000000 | 1456.77 | 2199.68 | 1443.93 | 1433.08 | 1640.18 | 1433.08 | 2199.68 | 1634.73 | 327.082 | 8 | 1001 | 100 | +| f32CPU_DV | 5000000 | 362.758 | 434.276 | 371.356 | 371.242 | 396.402 | 362.758 | 434.276 | 387.207 | 29.1716 | 4 | 1001 | 100 | +| i32CPU_DV | 5000000 | 360.054 | 429.113 | 362.396 | 354.354 | 383.947 | 354.354 | 429.113 | 377.973 | 30.7108 | 3 | 1001 | 100 | +| f32CPU_SM | 5000000 | 202.057 | 253.796 | 195.927 | 197.155 | 205.942 | 195.927 | 253.796 | 210.975 | 24.2692 | 1 | 1001 | 100 | +| i32CPU_SM | 5000000 | 196.972 | 247.733 | 238.983 | 217.433 | 192.904 | 192.904 | 247.733 | 218.805 | 24.4611 | 2 | 1001 | 100 | +| f32CPU_DM | 5000000 | 495.787 | 543.992 | 501.467 | 506.691 | 542.057 | 495.787 | 543.992 | 517.999 | 23.1783 | 5 | 1001 | 100 | +| i32CPU_DM | 5000000 | 494.032 | 519.314 | 542.015 | 496.312 | 542.956 | 494.032 | 542.956 | 518.926 | 23.6736 | 6 | 1001 | 100 | +| f32GPU_DV | 5000000 | 13753.4 | 13738.6 | 13777.2 | 13396.6 | 14214 | 13396.6 | 14214 | 13775.9 | 290.558 | 9 | 1001 | 100 | +| f32GPU_DM | 5000000 | 14965.1 | 15271.3 | 15013.6 | 14908.9 | 14943.8 | 14908.9 | 15271.3 | 15020.5 | 145.243 | 10 | 1001 | 100 | + +
+ ## System 2 - High Performance PC The second system we tested this on was a more powerful desktop PC with the following (more recent) hardware: - MB: ASUS ROG Strix B650E-I -- CPU: AMD Ryzen 7900X [12 cores @ 4.7 GHz base/ 5.6 GHz boost] +- CPU: AMD Ryzen 7900X [12 cores @ 4.7 GHz base / 5.6 GHz boost] - RAM: Kingston 64 GB DDR5 RAM [5600 MT/s, 36 CAS] - GPU: ASUS Dual [Nvidia] GeForce RTX 4060 Ti OC [16 GB VRAM]* - SSD/HDD: Corsair MP600 Pro NH 2 TB NVMe SSD [PCIe 4.0] From 2760ad1f9188d90011de555d5ec0b6ea14b1c8f9 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Thu, 21 Mar 2024 11:56:23 +0100 Subject: [PATCH 11/31] add 2.5M bench --- Benchmarks/benchmark_pc_2500000.R | 57 ++ Benchmarks/benchmark_pc_2500000.svg | 814 +++++++++++++++++++++++++++ Benchmarks/benchmark_pc_2500000.xlsx | Bin 0 -> 11092 bytes benchmarks.md | 34 ++ 4 files changed, 905 insertions(+) create mode 100644 Benchmarks/benchmark_pc_2500000.R create mode 100644 Benchmarks/benchmark_pc_2500000.svg create mode 100644 Benchmarks/benchmark_pc_2500000.xlsx diff --git a/Benchmarks/benchmark_pc_2500000.R b/Benchmarks/benchmark_pc_2500000.R new file mode 100644 index 0000000..69030a1 --- /dev/null +++ b/Benchmarks/benchmark_pc_2500000.R @@ -0,0 +1,57 @@ +library(tidyverse) +library(readxl) + +data <- read_xlsx("benchmark_pc_2500000.xlsx") + +data <- data[-10,] + +data$Method <- factor(data$Method, levels = c("f32CPU_SV", + "i32CPU_SV", + "f32CPU_DV", + "i32CPU_DV", + "f32CPU_SM", + "i32CPU_SM", + "f32CPU_DM", + "i32CPU_DM", + "f32GPU_DV", + "f32GPU_DM", + "f32GPU_SM")) + +std9_palette = c("#2B2D42", "#5C6378", "#8D99AE", + "#BDC6D1", "#EDF2F4", "#EE8B98", + "#EF233C", "#E41433", "#D90429") + +grp9_palette = c("#2B2D42", "#5C6378", "#757E93", + "#A5B0C0", "#BDC6D1", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +nge9_palette = c("#E8D5D3", "#CDC1C4", "#B2ADB4", + "#C06B6E", "#CE2928", "#B62626", + "#9E2224", "#6A2123", "#362022") + +grp11_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +grp10_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433") + +grp09_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C") + +text_col <- c(rep("white", 4), rep("black", 4), rep("white", 1)) + +# export as 1200 x 800 + +ggplot(data, aes(x = Method, y = Mean, fill = Method)) + + geom_bar(stat="identity", color = "black") + + geom_errorbar(aes(x = Method, ymin = Mean-SD, ymax = Mean+SD), colour = "black", width = 0.3, linewidth = 1.0) + + scale_fill_manual(values = grp09_palette) + + ggtitle("Execution time of the different methods using 2 500 000 simulated candidates.") + + xlab("Method") + + ylab("Time (s)") + + geom_text(aes(label=round(Mean, 2)), size = 5.0, color = text_col, position = position_stack(vjust = 0.5)) + + theme_minimal(base_size = 18) + + theme(axis.text.x = element_text(angle = 90, hjust = 0, vjust = 0.5)) diff --git a/Benchmarks/benchmark_pc_2500000.svg b/Benchmarks/benchmark_pc_2500000.svg new file mode 100644 index 0000000..f6dfe42 --- /dev/null +++ b/Benchmarks/benchmark_pc_2500000.svg @@ -0,0 +1,814 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Benchmarks/benchmark_pc_2500000.xlsx b/Benchmarks/benchmark_pc_2500000.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..43ecde5e520cc57632f3ec7ee076e3fe859676fa GIT binary patch literal 11092 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 +### 2 500 000 Candidates + +`A * B = C where A[2500000, 500000] and B[500000, 1001]` + +Using a database of 2 500 000 peptide candidates the methods yield the following +runtimes: + +![benchmark_pc_2500000](Benchmarks/benchmark_pc_2500000.svg) +**Figure 4:** Float32-based sparse matrix * sparse matrix search using +[Eigen](https://eigen.tuxfamily.org/) yields the fastest computation time of +only 101.42 seconds. Note that `f32GPU_DM` has been excluded from the plot since +the computation time exceeded that of other methods by more than 10-fold and +`f32GPU_SM` has been excluded from the plot since the method ran out of memory. +The raw data is available below. + +
Expand for raw data! + +| Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | +|:----------|-------------:|---------:|---------:|----------:|----------:|---------:|----------:|---------:|---------:|----------:|-------:|-----:|----:| +| f32CPU_SV | 2500000 | 692.117 | 829.181 | 695.621 | 706.285 | 1380.83 | 692.117 | 1380.83 | 860.808 | 296.247 | 9 | 1001 | 100 | +| i32CPU_SV | 2500000 | 800.103 | 811.7 | 764.923 | 766.638 | 999.444 | 764.923 | 999.444 | 828.561 | 97.6981 | 8 | 1001 | 100 | +| f32CPU_DV | 2500000 | 204.586 | 207.268 | 187.071 | 185.345 | 202.865 | 185.345 | 207.268 | 197.427 | 10.3792 | 3 | 1001 | 100 | +| i32CPU_DV | 2500000 | 190.583 | 220.49 | 185.285 | 196.224 | 232.609 | 185.285 | 232.609 | 205.038 | 20.4678 | 4 | 1001 | 100 | +| f32CPU_SM | 2500000 | 104.16 | 103.163 | 96.9828 | 96.1288 | 106.669 | 96.1288 | 106.669 | 101.421 | 4.63096 | 1 | 1001 | 100 | +| i32CPU_SM | 2500000 | 106.88 | 159.144 | 93.4166 | 95.3154 | 101.387 | 93.4166 | 159.144 | 111.229 | 27.3045 | 2 | 1001 | 100 | +| f32CPU_DM | 2500000 | 278.991 | 334.042 | 240.312 | 242.37 | 266.467 | 240.312 | 334.042 | 272.436 | 38.1112 | 5 | 1001 | 100 | +| i32CPU_DM | 2500000 | 302.466 | 292.033 | 243.411 | 245.654 | 279.659 | 243.411 | 302.466 | 272.644 | 26.9143 | 6 | 1001 | 100 | +| f32GPU_DV | 2500000 | 455.415 | 438.436 | 422.096 | 423.759 | 426.902 | 422.096 | 455.415 | 433.322 | 13.901 | 7 | 1001 | 100 | +| f32GPU_DM | 2500000 | 8169.59 | 7931.93 | 7467.55 | 7840.16 | 7491.93 | 7467.55 | 8169.59 | 7780.23 | 299.621 | 10 | 1001 | 100 | + +
+ ### 5 000 000 Candidates `A * B = C where A[5000000, 500000] and B[500000, 1001]` @@ -174,3 +206,5 @@ following (more recent) hardware: Using a database of 10 000 peptide candidates the methods yield the following runtimes: + +## Conclusions From a021bd207e3d3a6deb16800ef276c2ad38224c8a Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Fri, 5 Apr 2024 14:42:08 +0200 Subject: [PATCH 12/31] add documentation docstrings --- DataLoader/Benchmark.cs | 9 +++++++++ DataLoader/Compare.cs | 9 +++++++++ DataLoader/Cuda.cs | 11 +++++++++++ DataLoader/DataLoader.cs | 29 +++++++++++++++++++++++++++++ DataLoader/DeterministicCompare.cs | 6 ++++++ DataLoader/Eigen.cs | 12 ++++++++++++ VectorSearch/dllmain.cpp | 12 ++++++++++++ VectorSearchCUDA/dllmain.cpp | 4 ++++ 8 files changed, 92 insertions(+) diff --git a/DataLoader/Benchmark.cs b/DataLoader/Benchmark.cs index c41fbbc..6934666 100644 --- a/DataLoader/Benchmark.cs +++ b/DataLoader/Benchmark.cs @@ -5,6 +5,15 @@ namespace CandidateVectorSearch { public partial class DataLoader { + /// + /// Function to run synthetic benchmarks of all the different matrix multiplication functions. + /// + /// The number of candidates that should be simulated. + /// The number of spectra to be simulated. + /// The number of top hits returned for every spectrum. + /// The number of spectra processed at once for matrix * matrix approaches. + /// A random number generator used for simulation. + /// Returns 0 if the benchmarks finished successfully. public static int Benchmark(int nrCandidates, int nrSpectra, int topN, int batchSize, Random r) { // generate candidate vectors diff --git a/DataLoader/Compare.cs b/DataLoader/Compare.cs index e6eea77..8921dd8 100644 --- a/DataLoader/Compare.cs +++ b/DataLoader/Compare.cs @@ -5,6 +5,15 @@ namespace CandidateVectorSearch { public partial class DataLoader { + /// + /// Function to compare the results of all the different matrix multiplication functions. + /// + /// The number of candidates that should be simulated. + /// The number of spectra to be simulated. + /// The number of top hits returned for every spectrum. + /// The number of spectra processed at once for matrix * matrix approaches. + /// A random number generator used for simulation. + /// Returns 0 if the function finished successfully. public static int Compare(int nrCandidates, int nrSpectra, int topN, int batchSize, Random r) { // generate candidate vectors diff --git a/DataLoader/Cuda.cs b/DataLoader/Cuda.cs index ac1b88f..9776e46 100644 --- a/DataLoader/Cuda.cs +++ b/DataLoader/Cuda.cs @@ -38,6 +38,17 @@ private static extern IntPtr findTopCandidatesCudaBatched2(IntPtr cR, IntPtr cI, [DllImport(dllCuda, CallingConvention = CallingConvention.Cdecl)] private static extern int releaseMemoryCuda(IntPtr result); + /// + /// Wrapper for testing GPU-based matrix multiplication functions. + /// + /// The number of candidates that should be simulated. + /// The number of spectra to be simulated. + /// The number of top hits returned for every spectrum. + /// The number of spectra processed at once for matrix * matrix approaches. + /// A random number generator used for simulation. + /// Whether to run a vector * matrix (false) or matrix * matrix (true) approach. + /// Which matrix * matrix approach to use if batched = true. If batchMode = 2 uses sparse matrix * dense matrix approach, otherwise sparse matrix * sparse matrix approach is used. + /// Returns 0 if the function finished successfully. public static int Cuda(int nrCandidates, int nrSpectra, int topN, int batchSize, Random r, bool batched, int batchMode) { // generate candidate vectors diff --git a/DataLoader/DataLoader.cs b/DataLoader/DataLoader.cs index 86724ae..ebd763b 100644 --- a/DataLoader/DataLoader.cs +++ b/DataLoader/DataLoader.cs @@ -3,14 +3,43 @@ namespace CandidateVectorSearch { + /// + /// Prototype implementation to test C++/C# marshalling and the different matrix multiplication approaches. + /// public partial class DataLoader { + /// + /// Fixed parameter determined by the CandidateVectorSearch DLLs. + /// const int MASS_RANGE = 5000; + + /// + /// Fixed parameter determined by the CandidateVectorSearch DLLs. + /// const int MASS_MULTIPLIER = 100; + + /// + /// Fixed parameter determined by the CandidateVectorSearch DLLs. + /// const int ENCODING_SIZE = MASS_RANGE * MASS_MULTIPLIER; + + /// + /// Whether or not to normalize scores (true to simulate worst-case scenario). + /// const bool NORMALIZE = true; + + /// + /// Whether or not to model peaks as gaussian distributions (true to simulate worst-case scenario). + /// const bool USE_GAUSSIAN = true; + /// + /// Main function to be executed when calling the executable.\n + /// The routine to be called depends on the commandline arguments passed to the function.\n + /// The commandline call has to look like this:\n + /// DataLoader.exe [(string)Mode][(int)NrCandidates][(int)NrSpectra][(int)TopN][(int)BatchSize] + /// + /// Array of commandline arguments. public static void Main(string[] args) { // parameter defaults diff --git a/DataLoader/DeterministicCompare.cs b/DataLoader/DeterministicCompare.cs index 5d67d39..0d37129 100644 --- a/DataLoader/DeterministicCompare.cs +++ b/DataLoader/DeterministicCompare.cs @@ -5,6 +5,12 @@ namespace CandidateVectorSearch { public partial class DataLoader { + /// + /// [DEPRECATED]\n + /// Function for testing a simple matrix multiplication of a deterministic problem.\n + /// Will not work with the current CandidateVectorSearch DLLs. + /// + /// Returns 0 if the function finished successfully. public static int DeterministicCompare() { // EXAMPLE PROBLEM diff --git a/DataLoader/Eigen.cs b/DataLoader/Eigen.cs index 2272165..7cb89ac 100644 --- a/DataLoader/Eigen.cs +++ b/DataLoader/Eigen.cs @@ -85,6 +85,18 @@ private static extern IntPtr findTopCandidatesBatched2Int(IntPtr cV, IntPtr cI, [DllImport(dll, CallingConvention = CallingConvention.Cdecl)] private static extern int releaseMemory(IntPtr result); + /// + /// Wrapper for testing CPU-based matrix multiplication functions. + /// + /// The number of candidates that should be simulated. + /// The number of spectra to be simulated. + /// The number of top hits returned for every spectrum. + /// The number of spectra processed at once for matrix * matrix approaches. + /// A random number generator used for simulation. + /// Whether to run a vector * matrix (false) or matrix * matrix (true) approach. + /// Whether to run a sparse * dense (false) or sparse * sparse (true) approach. + /// Whether or not to convert floating point numbers to integers before multiplication. + /// Returns 0 if the function finished successfully. public static int Eigen(int nrCandidates, int nrSpectra, int topN, int batchSize, Random r, bool batched, bool sparse, bool useInt = false) { // generate candidate vectors diff --git a/VectorSearch/dllmain.cpp b/VectorSearch/dllmain.cpp index 8ebc1ee..c4e007e 100644 --- a/VectorSearch/dllmain.cpp +++ b/VectorSearch/dllmain.cpp @@ -118,6 +118,7 @@ float normpdf(float, float, float); /// Number of cores (int) used by Eigen. /// Print info every (int) processed spectra. /// An integer array of length sILength * n containing the indexes of the top n candidates for each spectrum. +/// Thrown if n is greater than cILength, cannot return more hits than number of candidates. int* findTopCandidates(int* candidatesValues, int* candidatesIdx, int* spectraValues, int* spectraIdx, int cVLength, int cILength, @@ -228,6 +229,8 @@ int* findTopCandidates(int* candidatesValues, int* candidatesIdx, /// Number of cores (int) used by Eigen. /// Print info every (int) processed spectra. /// An integer array of length sILength * n containing the indexes of the top n candidates for each spectrum. +/// Thrown if n is greater than cILength, cannot return more hits than number of candidates. +/// Thrown if tolerance is smaller than 0.01, smaller tolerances would cause an integer overflow. int* findTopCandidatesInt(int* candidatesValues, int* candidatesIdx, int* spectraValues, int* spectraIdx, int cVLength, int cILength, @@ -342,6 +345,7 @@ int* findTopCandidatesInt(int* candidatesValues, int* candidatesIdx, /// Number of cores (int) used by Eigen. /// Print info every (int) processed spectra. /// An integer array of length sILength * n containing the indexes of the top n candidates for each spectrum. +/// Thrown if n is greater than cILength, cannot return more hits than number of candidates. int* findTopCandidates2(int* candidatesValues, int* candidatesIdx, int* spectraValues, int* spectraIdx, int cVLength, int cILength, @@ -452,6 +456,8 @@ int* findTopCandidates2(int* candidatesValues, int* candidatesIdx, /// Number of cores (int) used by Eigen. /// Print info every (int) processed spectra. /// An integer array of length sILength * n containing the indexes of the top n candidates for each spectrum. +/// Thrown if n is greater than cILength, cannot return more hits than number of candidates. +/// Thrown if tolerance is smaller than 0.01, smaller tolerances would cause an integer overflow. int* findTopCandidates2Int(int* candidatesValues, int* candidatesIdx, int* spectraValues, int* spectraIdx, int cVLength, int cILength, @@ -567,6 +573,7 @@ int* findTopCandidates2Int(int* candidatesValues, int* candidatesIdx, /// Number of cores (int) used by Eigen. /// Print info every (int) processed spectra. /// An integer array of length sILength * n containing the indexes of the top n candidates for each spectrum. +/// Thrown if n is greater than cILength, cannot return more hits than number of candidates. int* findTopCandidatesBatched(int* candidatesValues, int* candidatesIdx, int* spectraValues, int* spectraIdx, int cVLength, int cILength, @@ -706,6 +713,8 @@ int* findTopCandidatesBatched(int* candidatesValues, int* candidatesIdx, /// Number of cores (int) used by Eigen. /// Print info every (int) processed spectra. /// An integer array of length sILength * n containing the indexes of the top n candidates for each spectrum. +/// Thrown if n is greater than cILength, cannot return more hits than number of candidates. +/// Thrown if tolerance is smaller than 0.01, smaller tolerances would cause an integer overflow. int* findTopCandidatesBatchedInt(int* candidatesValues, int* candidatesIdx, int* spectraValues, int* spectraIdx, int cVLength, int cILength, @@ -849,6 +858,7 @@ int* findTopCandidatesBatchedInt(int* candidatesValues, int* candidatesIdx, /// Number of cores (int) used by Eigen. /// Print info every (int) processed spectra. /// An integer array of length sILength * n containing the indexes of the top n candidates for each spectrum. +/// Thrown if n is greater than cILength, cannot return more hits than number of candidates. int* findTopCandidatesBatched2(int* candidatesValues, int* candidatesIdx, int* spectraValues, int* spectraIdx, int cVLength, int cILength, @@ -977,6 +987,8 @@ int* findTopCandidatesBatched2(int* candidatesValues, int* candidatesIdx, /// Number of cores (int) used by Eigen. /// Print info every (int) processed spectra. /// An integer array of length sILength * n containing the indexes of the top n candidates for each spectrum. +/// Thrown if n is greater than cILength, cannot return more hits than number of candidates. +/// Thrown if tolerance is smaller than 0.01, smaller tolerances would cause an integer overflow. int* findTopCandidatesBatched2Int(int* candidatesValues, int* candidatesIdx, int* spectraValues, int* spectraIdx, int cVLength, int cILength, diff --git a/VectorSearchCUDA/dllmain.cpp b/VectorSearchCUDA/dllmain.cpp index 5f9dbfa..d2d48a4 100644 --- a/VectorSearchCUDA/dllmain.cpp +++ b/VectorSearchCUDA/dllmain.cpp @@ -102,6 +102,7 @@ int checkCusparse(cusparseStatus_t status, int line) /// If spectrum peaks should be modelled as normal distributions or not (bool). /// Print info every (int) processed spectra. /// An integer array of length sILength * n containing the indexes of the top n candidates for each spectrum. +/// Thrown if n is greater than cILength, cannot return more hits than number of candidates. int* findTopCandidatesCuda(int* csrRowoffsets, int* csrColIdx, int* spectraValues, int* spectraIdx, int csrRowoffsetsLength, int csrNNZ, @@ -261,6 +262,7 @@ int* findTopCandidatesCuda(int* csrRowoffsets, int* csrColIdx, /// How many spectra (int) should be searched at once. /// Print info every (int) processed spectra. /// An integer array of length sILength * n containing the indexes of the top n candidates for each spectrum. +/// Thrown if n is greater than cILength, cannot return more hits than number of candidates. int* findTopCandidatesCudaBatched(int* csrRowoffsets, int* csrColIdx, int* spectraValues, int* spectraIdx, int csrRowoffsetsLength, int csrNNZ, @@ -536,6 +538,7 @@ int* findTopCandidatesCudaBatched(int* csrRowoffsets, int* csrColIdx, /// How many spectra (int) should be searched at once. /// Print info every (int) processed spectra. /// An integer array of length sILength * n containing the indexes of the top n candidates for each spectrum. +/// Thrown if n is greater than cILength, cannot return more hits than number of candidates. int* findTopCandidatesCudaBatched2(int* csrRowoffsets, int* csrColIdx, int* spectraValues, int* spectraIdx, int csrRowoffsetsLength, int csrNNZ, @@ -760,6 +763,7 @@ float normpdf(float x, float mu, float sigma) { /// Length (int) of the csr_row_offsets array. /// The position (int) of the element in question of the csr_column_indices array. /// Associated row index (int) or throws an error if the row index could not be found. +/// Thrown if the row index could not be found. int getRowIdx(int* csrRowoffsets, int csrRowoffsetsLength, int colIdxPos) { for (int i = 0; i < csrRowoffsetsLength - 1; ++i) { if (csrRowoffsets[i + 1] > colIdxPos) { From 8ccf420ff21fee6173c2621d48ccf9b53027f178 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Mon, 8 Apr 2024 12:13:35 +0200 Subject: [PATCH 13/31] add requirements pseudo-fix for #32 --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 22f3346..ac7b160 100644 --- a/README.md +++ b/README.md @@ -45,9 +45,15 @@ Documentation is also available on See [benchmarks.md](benchmarks.md). +## Requirements + +- \[Optional\] Using GPU based approaches (e.g. anything implemented in `VectorSearchCUDA.dll`) requires a CUDA capable GPU and CUDA version == 12.2.0 +[download here](https://developer.nvidia.com/cuda-12-2-0-download-archive). Other CUDA versions may or may not produce the desired results +[see this issue](https://github.com/hgb-bin-proteomics/CandidateVectorSearch/issues/32). + ## Downloads -Compiled DLLs for Windows (10+, x64) are available in the `dll` folder or in +Compiled DLLs for Windows 10/11 (x86, 64-bit) are available in the `dll` folder or in [Releases](https://github.com/hgb-bin-proteomics/CandidateVectorSearch/releases). For other operating systems/architectures please compile the source code yourself! From e8c8417d07da758d5dccda0c48935080ea4d0e5c Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Mon, 8 Apr 2024 12:15:48 +0200 Subject: [PATCH 14/31] formatting --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ac7b160..8d8f69b 100644 --- a/README.md +++ b/README.md @@ -48,8 +48,8 @@ See [benchmarks.md](benchmarks.md). ## Requirements - \[Optional\] Using GPU based approaches (e.g. anything implemented in `VectorSearchCUDA.dll`) requires a CUDA capable GPU and CUDA version == 12.2.0 -[download here](https://developer.nvidia.com/cuda-12-2-0-download-archive). Other CUDA versions may or may not produce the desired results -[see this issue](https://github.com/hgb-bin-proteomics/CandidateVectorSearch/issues/32). +([download here](https://developer.nvidia.com/cuda-12-2-0-download-archive)). Other CUDA versions may or may not produce the desired results +([see this issue](https://github.com/hgb-bin-proteomics/CandidateVectorSearch/issues/32)). ## Downloads From 7460db8ca07926a82adf9d1c7f5c798d67bba7d1 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Mon, 15 Apr 2024 15:04:04 +0200 Subject: [PATCH 15/31] add info for #35 --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8d8f69b..355ca38 100644 --- a/README.md +++ b/README.md @@ -53,10 +53,16 @@ See [benchmarks.md](benchmarks.md). ## Downloads -Compiled DLLs for Windows 10/11 (x86, 64-bit) are available in the `dll` folder or in +Compiled DLLs are available in the `dll` folder or in [Releases](https://github.com/hgb-bin-proteomics/CandidateVectorSearch/releases). -For other operating systems/architectures please compile the source code yourself! +We supply compiled executables and DLLs for: +- Windows 10/11 (x86, 64-bit) +- Ubuntu 22.04 (x86, 64-bit) +- macOS 14.4 (arm, 64-bit) + +For other operating systems/architectures please compile the source code yourself! Exemplary compilation instructions for linux and macOS can +be found here: [linux.md](linux.md) and [macos.md](macos.md). ## Limitations From a279637a0e56d28c34a23216a5d9922c773fc071 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Mon, 15 Apr 2024 15:08:35 +0200 Subject: [PATCH 16/31] add desc paragraph --- macos.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/macos.md b/macos.md index e65050d..4076c21 100644 --- a/macos.md +++ b/macos.md @@ -1,5 +1,8 @@ # Compilation on macOS (macOS 14 on M-Series Macs) +This is a rough guide for compiling *CandidateVectorSearch* on macOS 14.4, which should +generally work on most macOS versions running on arm64-based Apple systems. + ## Installing dependencies The following dependencies are required for compilation: From bd656be63dc402fc2af466bc3d9ee2d5da85384a Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Fri, 19 Apr 2024 13:16:58 +0200 Subject: [PATCH 17/31] add os version --- benchmarks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks.md b/benchmarks.md index 24d0733..773fa1d 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -196,7 +196,7 @@ following (more recent) hardware: - RAM: Kingston 64 GB DDR5 RAM [5600 MT/s, 36 CAS] - GPU: ASUS Dual [Nvidia] GeForce RTX 4060 Ti OC [16 GB VRAM]* - SSD/HDD: Corsair MP600 Pro NH 2 TB NVMe SSD [PCIe 4.0] -- OS: Windows 11 Pro 64-bit (, Build) +- OS: Windows 11 Pro 64-bit (10.0, Build 22631) *_Note:_ `Dual` _is part of the name, this is a single graphics card!_ From e6049c2f91e7eb7a2bbe065f5950145d46c482a9 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Fri, 19 Apr 2024 13:17:15 +0200 Subject: [PATCH 18/31] add hpc bench 10 000 --- Benchmarks/benchmark_hpc_10000.xlsx | Bin 0 -> 11116 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Benchmarks/benchmark_hpc_10000.xlsx diff --git a/Benchmarks/benchmark_hpc_10000.xlsx b/Benchmarks/benchmark_hpc_10000.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..071a316d5731092354cf84caf1227aab937b3da9 GIT binary patch literal 11116 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 Date: Fri, 19 Apr 2024 14:04:00 +0200 Subject: [PATCH 19/31] add hpc bench 100 000 --- Benchmarks/benchmark_hpc_100000.xlsx | Bin 0 -> 11092 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Benchmarks/benchmark_hpc_100000.xlsx diff --git a/Benchmarks/benchmark_hpc_100000.xlsx b/Benchmarks/benchmark_hpc_100000.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f37817636e0f9f66d01d3f50f9fe7ce221f5a537 GIT binary patch literal 11092 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�Ej~T&G`RQyZ+VB zuNBKbJ&hs%znAz&{qk2Yzb?W3=|vp(Ul-(lb@1yX;!g)XB)>WMb4u~6>92zAPt!!Q z-%Wp&Z@+r@Rki%-VGQ`2hrel Date: Fri, 19 Apr 2024 15:15:16 +0200 Subject: [PATCH 20/31] add hpc bench 1 000 000 --- Benchmarks/benchmark_hpc_1000000.xlsx | Bin 0 -> 10970 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Benchmarks/benchmark_hpc_1000000.xlsx diff --git a/Benchmarks/benchmark_hpc_1000000.xlsx b/Benchmarks/benchmark_hpc_1000000.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..be2720fa7c4d67371ee872082a573ef3ce21193f GIT binary patch literal 10970 zcmeHN1y>!}(!IC`cXxO9;O@cQ-QC?GxO;-TOR%89g1ZLG#UZ%!k(oDdW-{;l1@CpQ z)o0yxyJ~e;?|o{YQ>7>a295@R1V94-0AfHcosGRU2mpWt0RW%^ph2}o?Co4k?OgQV zc{-Rn>oR!Q+7NvJ2c^mffWF@UzvI6+0+q=<@_kJ3VW*NEA}O?14UTW2t5ys@BU3OF z5RskW(93<`!d+R}HZvA3trR{iQo?27tSXwWsTrw5-MPqopB(STIrDLO7UIUNN) z=9*%Ks`hfhk*|Q&FJ0bS)vtPgj;W_lt$aTv=|7es7V8) z8$b4>)rBJ{*3*W4(d8UEWidUS|9I~rkSstb^($gvmHKeVjkpYQWU_tL{ca*5KJ17r zvxapXXGo7niAeiJOAqsDiZp6tkPWf04>E$`S z$Ibs@LjL8|D--1ue&^<6_|VPVT0D}ljJuFzJMlZe0I5~Prr3{UxNF^%cu4PXg25#G zJN+I$$o6A2$FrXkrmte?Y&a;Iuyp-3UHy|JoTejXDPRD=!E0Va ze2t8U4WqlgleLk(z4gx|R;g-h|B(yn*>Cz8s^1;&z|b)%cz?{^=2PFvdSz-CN%_cAfi4! zkg$U4qM~p@RBMP(+_NIz1EUrEv+c3{b(pV9LEe&5cv0_Cu*oH)6%KC2*h+%YS`S*& z84eN3)@_1gejpQ_PqEZawVzMt@QOn^S7BQ8l5^+uAXp$qJy+82knaP@=L ziM=y!XLeGv2N;Rb(&X_f>Q-EwofjD5)zCP2hx6Hf**xuwrL#CPq}1S9E-&Ub531V5 zew)R=Px_KzN^;2n-oA~M9k!F1&8L*o2S$71AD`m?`CPvz{%XYnx^T{tJmi}%(pO%G zhO6ic_NpOUMqLDZjtz$@7S(;N&`?=88Y$)}2__TmbGx9HtkNR%%4O0Op--NU@fYk1 zu=RtsSbzCpXt?Hs*A~@zdbZs=p3z(C>o7!d*gi z2}fTb)%3Hc7R{eqefY9@-VV4)W6ezS;6@A8@GCgCZr2)AY-$9gwveU8Y#@zYIAIHU zrb*uz-HG?yw(2|whdEY*8Vj3vT|ZsaD1lOXaP3`cIU(dSCeaSfA@~K21qwv@8tMyM z#XE28@QL0qb|q0Hm=}d*i3M&_P_Y(Q6Jp7uh+2NrX4Vn>jC~T$-B(3-^FeVEbqxXn zkN)eKoraLw;`CO^V06<9cKJ&Y_Pife_}mY7nPIh#5ebB*HGEsxW(Z6^U2g)&=EH#S z6}$cS81>*++&x&b_iZ&H0?D5-J>SD6DUwAki24tU>wVJ-G%oze#j3MVA8TO4EshcA zYt56{o8#s)#u@U-7$d^9bKa%M@#A|vaA4a(JJKNz;vB(a{a*QJJiSrJ6cOsuYF0eb zQ3Be$VR=26rK@~l*voi0@X9)Cjk0ZQJ0?i4YGd5Gti>`;=_I!EcW$%hB#(k`Mys)U zHy=J~q^6HTe7Pg_Y5H!0ZwTUafDhVb|N2l!nr{?cSQQhZ2UC&7x~x5>f8C0w+P(V-3`4E9q@g*?#5mZxIyQh;%eug zVtVG#9+PkEl*YVqUn(1%(M*Fd4!-A85Os8v4`yx2|XbMRD`Ba5$M zn4{U0a=LAnUw}h0m#h(#w(riVwKC7}=Xkq%X35?gg2?t2fA^|eGC~}4bQ3Aqph`DW zV{3@hfzhv|5uYt&Y;wpUz#tZZ3+nCaRteiB2AKj8rAEP^eXI6G@XLzf#E$$+TxHp( z@y7esOCJS{2q!&gjQseTidD~!-IXl}DbkPnr3`(COEaWRA64AAA`hO! zEr`1*mBFdSiVEI~W@GWo*hB-f{Y%eK!y-`dKVk?QQlew&H3Qrc0RUL9cl;|0I9r&S zx;QibHZcE82ieIh@0Xd7!cJ+g@JTk3E&@eE(AVC!bE?j5H#x#<^gCK*^;ylipZ1d( zlGET+fyYE%_`k%MCoc76sLv-z4~XWFPPiqAS(8Ys**jluKUlGdrB1gpIFegsel#zi z?0bA_Uy>T?TvjTlCz_>^;H}CUb3|KGdY?j%qt!PqF8QAQF-2Q~J#lL~!ejTg8kZNZ z0Y?`)1FsJ$3xTu|Y3H+L6(f=qZ6&dPlX2{UWp+%DBi&87nJ~CLpw0|^W&$#bPQJdx zmYz&cUGZiKj=63eML@tOczsZ(+i@#KvY=ml<*ge7_eN?SPg(Hr+fP;gXoGP0QgM~G z-_Uov>B$*!G@j8hI*>6CYp+{P+zd?L>k&k=MXJlVZxxRkp)fp})Kg6(Cgq={S)ySG zp)kJW-&LASZZ^}%Ov}B;(7Rr`h-b~q0J$IDlj_vc#;NI^ib9d==@(Js&9f%HK8{sz z7=|ch;cS$YW#gTe&{E~T-xI1jXmPY$FxZ4As9EUT7#X|7v`ldcMof98kU@PdW1t8p}w2GwIvVjIOI56 z_Lh7Qd25bYdi9%sSugH5H1Tz>MY8cS46$CQF&@9isGb&Lw2;>gpW!916z_`ef`~Vc zm?7WOO$V3R`tz#@e|h;0e90LrcB>pnVfq7$6=)8YZzgoOAUhH|Xe}2orI0VHnecF_ z6$?Z03-?#tU5Kb-sjv@eDPQ0fE-cL?^}GFiz3%n+eEeJ6{O%q$qSJ107j-(GFV2q9 z{a1pPbsoX5&RU<&^?zL6-(DU+JRq10+uKzWYHw>d4!(E|_`kGnE~pFIRo4(e*>cYB zynA4ppM6I=n3-#}tHG*rY*)Ed)=X$^SB^iJnP)Yp0aoARMbbOlkP%@-L-6GTQEo{j zaQ27a7FH8&j4pgW7j1wAJ{UBaH1E^^y2p(O373U9Gj$tgP_`Aa%fwq=d+tcd442K2 zt+(>e4ExI;tRBQ1oHQN`%p7qFxaSb7o_(ClPd0p!RyuEY?+@Bc(NpJj5#F?Pt3XZ6 zV<_MFwd9S)wLB!=YklvySVzvzTHlY$^XKL{4S?*+`LQhJB>TlL zB(CM=YrB@typeWrYe=n}k#7_T`4%1ly%Zr#S(xKCWqw|h33p2lQabsfhKA!li$qPud5;u!-bOPp3#axpo z6$C$ed(`ftwYg3aaN7g$7`VX0%bmrn_2_tx>lE3bnO-oz5n)<$DJ_9((#yhOY)dxo zT%&AiE2W{2VdTJ=``~$M-vsp2Sy-!13O46y$%3J9P0=N1V}vSU;}n?zC=v@;8D|f$ z>8y?=flN*MDe>>DYX$7yCvFc{o4fm?-?w)6@1DNrH$z#dJm+a-aQc2wS?Pp*+Jm9A&v6wd&b>3qZs#!KTB$8+n0P(( zw`~}B*41sy)m=mTGgNB-BGRuy0Y^)k{RhM96CeyxbD#8x3<%Q(d zyD*3R>*~j5?FdzL1tUCt6kIh7mE%0odzAsfjpLUqBu~mouBn}@UmypJ8G24v;7Hph z!Ap#R{GUtA&k~06jCQDfl!p4u$Ab{7P<>2#cpE_VYhcD3owW`E6_<0-gRz-H#Yd9h z^~AAhGu;dD(}mK;DraB?kA2AF%(Q5b_-duzoK0rZ_udSKl~+0kATAz^xz2NchJwet z8Sz-?lc4pP=kBGX4@lOS$L9ovw{3~bxdG&5^hj(uMJ1G+i4h~_@xuu;%KMUaW-X%M zLVjhXJJOO)s3{#V_@16XaC~+>`4k^azip8TMxa|5uOpa*P0(1_^2s;3UFT@Xb#HP+ zX0ivDwz7U4%;lS=+aS*&+vhO(MGUFUqxe0k=rxlZQkxN{*iN$RwKe;F>Fi*(Xh*PIz zjU$;dQx}AqWoaXK*@3Y+-C`UTUResXZX8$vZ>vTX<=DI%5DF_eer~~+!N(@&h1FYxXqvm9RYtVZ-L!f&8 zA$y3t^AU|n1Y=K8gc%Aivu&DJyTxD?Xon&YxhvWXu>P%tUoPN*4ZG{+oAp31e=)mu zpq(p>>TB3<1}$ebf#7)#pXd`g9;(ze1>tZDPV3Msl_)xKRodD!zb|#45{3H zh!01+^^9w=$UP%HI&!GpZ5Kl#Pt^!Cp$Bi5bi2(5i}IT`olXH`oFaKqOFD93IQoWJ zz50-lg9*)Isfn1=rD49YD3@~cCKQ7(!pXbxLa$(2TDAeDyDe0`oZ>X+^Tl4wsk*#n z_1WW|h%;_K5QOjBg?U!l6E#H6hqPpf>+#3Fo*i=U>k=>@XN``9ULu+>7=0O`u3VD+ z<@9UoG4*aIwl^F!PHNUkcAe~ikfJ9^%-dGhRT!YcWX>9ib8GbKk?J~aZLx-%oa@gK ztE*PhYt-so9)|fNTbDjJaZ$>&#dIFN_swUlF)Y%jOX}>Eqr#IUVXSs(|B`#cf9H>S zYDrmzD>*vpi7{HWAt^c9I#rfQR&`~n5!s1=I+=60&mW4VVWsZK$?w{j^u(=uOgE%Dr0QgV~)=XK%oW4bflOClYv zH!)SeOYxjPJ7zJRY$ny;nv06fM?o?<2H6zG?hcObQD!C2&k5Of82Za1*qx|NK`NmX z_X-Wh0CZSF>t{2rzzvF+FOt2ac^F^t@PpUWF=&gFtFTBDZ}ozV6uo^}h)ItSQl$O8 z%Q_S`nG=K&VyHIM%j?Js>bCppg(E`uluz)9m(LAznRyAeyr*xdP*D6V?#Q2jm@SML zQ)(2VyO5e9cKI(XZL$VF8dJ{a`#o0EM9{%n-bMOgr8-}(4xhBTo2N@aEZBlliklaC z4pZ#n4G|RY=L*`@PgO@T)+hCK8`|*8<3bnm-}%>u5yF4^CI(j{L@l7x7oKBQVt%-g zkEXBPw;*$@r`U37ttcwx)EdSR+GOS4wv2AlyZ0V-9X?p7Gm&~iDITHXNLfWzgM@Qe zE9Qhn01yDGOeVE8JOHmS30>bBO~w7Ke}#Mo8pS>gg~Fiq9W{cq>TQic;Bzr)R5KGx zVT!Inqz10?wTDsvux#@qZT=i55o0dD_w(8QMR+&A|K;9YpMHH?6OD`=6uFAZ$y}WN z%hMC)x_q>(-?&4;On+t z`b7AnjqH6!jd&fzs&R}PmOIb4^32h*GlyK+wWN!-$o9y|1nUz9=}N#2kTqX@OL-}_ z*7Q3<6iQ?o2vxrmbixiUkeh*897uPIT; z^7+?w+nT;o>p6ZO6H>$1=V0=SDBB$zwO~*>Qsx$AX2YnM8jCf7-)%8gkCKO1+gfvb#~=?3sz~IG!aE$%HECV0-RyT>Iq%=dePajRCESUgpG^aw# z<|H|5F^dBc3{70E6E$fkc3>j1p7POsguord84@B+`^Q5vPZpIaP&BXs=7x~Y+RGw$ z^|M1_rSrU}sC*^Hh*jp?{`#)a14)%BH-RYr$T;0VR(`ChI59@P$~G&Iagy6i_H??{WK#NVM+!komgTrfcr6jrwa?j6vRCgs zSSj+23&UM$(eoy&9^@}P;$mmy&D$zJWtPD~B;I*Y>%@wrNf+;F@t>|&%^v#gy>r)0 zgQQxT!7`LJ!&P#{Qqq4TjHYKEqPLWxG3BB$rFf85pe63O3(I7Sj_$F0{Y|WMH(Y30 zD9j8m8EA}N(wNZ^Qw=+wA?}sLT9yH#XvD}$6z8I{^vTiF%GI*GQ>>7lG{&VNmT8(P z2y>H;_iO5d=HRD{@L3jxHlsFNC)R^lL}Y6*63W&<3JR6UeqOt~CM)O`8d5gvJJda_ zz6B4+Hqu#b%nvH9ZrD<}cDL?^so0qH;iAbrI!W>)kjx3`-pT#+`t<%O2y9b$A8cvW z1CRu?wlm+-5@tCfx$q8ou=J2xhOJ>K<;oKVZmLu}JeLn_;8&6@;q`VB#>RDm@c=oI z3pF$tX`$Xn21Ext9eiaD%&J9C*u8V#G8nN~=!lx;PJU0y6Rqg>A>Aammp!t2Y)XNa z5KCbxv!~#YfiJxr?7CB7jgxS0#2M1^yLs^d&B3fo(tbGa4noDb$ZS1Lk=>I#y;HR{ zL)#maIZx@1%~{`QupTD*yfGFz%?|m#sD=iml}1)NXn2KLj$2z-aW4KJ)s%umIb&L` zZ|M%Db8hcPRy*d*pxgubyd37a%uRgt}p=jXu@t9JtaTelti=(s?s;cn_juI4S04S@UIq;beQ4 z{%a_5bhNDg7-rMv{Z^OGl8@slGEvS$(@4Iit(#S-Srb1Mc&Gfw$)kCmP`xVcQv|QI z+9^D~vrbZkH_LN&iie!AO-?P^&{pK8ejhbUp;DxIOIvWC@}G!kjSY6GeNDOmH&*S< zFaL2*+Or_Qrto#Ws0;}JApD+won1U_Or3vjK@_UmTCXr6Jqs-QBi)~jxNXzHG>=Zt zD((&D;~!NRjYgL0#gLhg4?aK0yXoQaG*9_O$^&PdC)S*mr?cc?8;u8@s#x%JL$R1u z527mM!ny^}d*DeAOUp|qqf9*}=(>hCx@D?X;I3Ou$A|+IIr_ALnGnRyt1ME-DR${W zj7=PgJd2qKb+Lwx_0REWWN-SY6Ow89i0Dl21c?$efz2?|^tcDNnQ$l9{21c(I;-}{ z94_<$R+w@Yk)JHAjAk>86W1R|;&zIr)D}))9U`l(_3G1HfF|-5p5mZ83&dhDFx%0~ zycg1iFw8bzI(@hltgEucitJLrm;+1gd$u(9Ps`8pI-Da$R35;NO92WYQn{&G7QuLu zP&tSEQPLcutI9nKVGp&L(hS$Zyw~sbjzzL}CcRI|a=#eXIYhuY8liiGej8GWpJ4t7 zyO@`Rq0s~JP{?>2z3ThoZo%-9Oj~K>^oYx{gVp#KK^q#u1v+D9=x-#*e`@1 z5f<&k#B_Zl5hF;KF$)#;6Bc;;@}6ALnYf{#8|~U0be;m44Aj=zAPUq!-&HJd0+S(l zlC$x?$kHiCRpVvt(kfJ$5x38-7xq9r`mRnlD)>U9n`%J`V4SJ06}PsR(l)2e z@;4@^CJCJLzRa8%ql5}M;*0l~NSpWAc;$eLp$t^)n|P+74M%vNkC>B?DY5Z!<@(e+ z=&cNxHwtb zng51rm&7UQJ|?uVQ-}@Xo%N!_;)up2v2ZyC=^3UU^ZcBIw0_Jq!D(H? zyA?I49Fj*2)fwPoW_~ZP>3(z*^oGAQ69=%;L?V}nJ4GFvt!nl*>%wJxDd65WU<+|5 zrg5y2u7{&|JR~LKmV)wrD_DXM&CXJn7H%hNF2DvS*b;u+$bleuL4b}OQW75woCZsq z@u_T$jy{*8=I|K14n9PHT$ouc1y~NstTupxXjid^FGwO;iPm*@^E@AJk2}zfu_=)I z_}li-uN7SOc;Z&_*T~(!Zfzs|9ywz}8)Fd*Lrc4#bAd_HntTWolK82dPq^91T5tKG zLO>@Iv+aJ7z+06AVbD-Tqs!wev!$U0Ton2J>;3POv0a5eX~@p&@8y6B zwGA1(LZAMB~GR9-2&gwU8x$%+3Rb~cw*4rDk`_r&9DM{n(dejIpxQ{B*i%r zjG^cQQ4wd3WKp$%sRh6XI^Hv4jQsLi8wM#pq(dXb{`(C|LF2Y9bSiLHP`il~26ZG! za8My%DE0$ya42x*if#}!+ouqsxH~(+;q4CG4~mt4oG5kD{U`%}oGi$rqI8P?K2ho< z`>zNZB#4lq!M${|kLRscrE+v+m#3sgaZ0ASS_Vzn%t~I0Mj8EWuU>=p&!x?SdV-nU zYe*em1CIP!Eikb+R&=s=aAq{NcQXAM)7R4Y|B3{!So29#vhHO<3*CTvKqNo4Rn|61 zZ4SZ}ki#0Qt81Zav#OO6K~aCYk^jt}+635+~y7VY_-Xlqx_6kcB{~)SL^N zA-uF1`=HP?B+yG#tMcDc)>`PTZ|usNS8|*gSs@I<)CN*gXEE#M=Q#89E!N{pT9KYA z>aEU-D+A-qqS;NoKSA&jn?#Xwjg)%X?lk=lSU12a5p%n@kF;M24^l!tJ=Z3u|?DwDL7{uy^0HO~(MP zP1KmZM-_}-0MttGl_|WqezyelCc9ntF67UcCAiPlaX@$1dx-!j0fYI4HmcL%?HRAg z5ts}z;*3y}Pw$iHa?Hr?Y)Bt7?7?m@&+&Hrjc^j#V$A88<@sGiI{+hi`o4+huZ!q^ zVi5V87f8}82C09e^Q|y^<)v136~2B^;7+t-UqRSjCukjfTdTa!ITS)i@+9Gq`FIdW%uV@}8{B zTeM!?7ePrp*3;E+9l_{;eHG)vsULP^pEQ@ltzjh;m<^8)C@STr*3Kd@p}wU?<|Nkm zh+ecXDkv@y*HyFy)C)%USx1ZXg1aZj;W3Hxq-oaD)F=t8SH%!IQxRGX92s4uLRE?i zR0Fd(uX}ruIqx|fMHw2;Ov_Pfk^C_v%T$GBkb_9(q%G zR@s4J3=&n+Dw}jZjPBcp+eZ@Lw;kE2aqy_8Aq`)BX2!TTZg<%B1y7q!gPp=>xx~9; zy$2r@AGF2Jn#V6bEV|JMCowqa+|&`BOjCUPN^vOPhR!341bP=uk83s%hIogzcz0C zX*&EWn}2EJ_|^FDHRC@`0f1=O-;DpC3i7Xheytn+>1hJ~-w*MRD&ntRe%)^S)5|*g zZ(e@geEZeGuM37h9q8i!=HSoe!>^{linBjW>4<(e{Z*>{>fu+B@}~zg;@>>{O|txI z{r7zQr!4@`Mgjo*BRl_U{`aZ$ujc&Ze=+~p#HuI*@rsR~-EeS#u2%s7N%iyB{{hQM BN|XQq literal 0 HcmV?d00001 From bf58ba4caac04e2d8637a048e184fb16289a9f1e Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Fri, 19 Apr 2024 17:29:33 +0200 Subject: [PATCH 21/31] add hpc bench 2 500 000 --- Benchmarks/benchmark_hpc_2500000.xlsx | Bin 0 -> 11046 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Benchmarks/benchmark_hpc_2500000.xlsx diff --git a/Benchmarks/benchmark_hpc_2500000.xlsx b/Benchmarks/benchmark_hpc_2500000.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1171182be1fe9782fdcf7e8b9b7f86d57ed2fc65 GIT binary patch literal 11046 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 literal 0 HcmV?d00001 From 62ae24d4ad45a41c99871edc2fc9c34a8834f044 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Fri, 19 Apr 2024 18:45:47 +0200 Subject: [PATCH 22/31] add hpc 10 000 plot --- Benchmarks/benchmark_hpc_10000.R | 47 ++ Benchmarks/benchmark_hpc_10000.svg | 831 +++++++++++++++++++++++++++++ 2 files changed, 878 insertions(+) create mode 100644 Benchmarks/benchmark_hpc_10000.R create mode 100644 Benchmarks/benchmark_hpc_10000.svg diff --git a/Benchmarks/benchmark_hpc_10000.R b/Benchmarks/benchmark_hpc_10000.R new file mode 100644 index 0000000..89e9dff --- /dev/null +++ b/Benchmarks/benchmark_hpc_10000.R @@ -0,0 +1,47 @@ +library(tidyverse) +library(readxl) + +data <- read_xlsx("benchmark_hpc_10000.xlsx") + +data$Method <- factor(data$Method, levels = c("f32CPU_SV", + "i32CPU_SV", + "f32CPU_DV", + "i32CPU_DV", + "f32CPU_SM", + "i32CPU_SM", + "f32CPU_DM", + "i32CPU_DM", + "f32GPU_DV", + "f32GPU_DM", + "f32GPU_SM")) + +std9_palette = c("#2B2D42", "#5C6378", "#8D99AE", + "#BDC6D1", "#EDF2F4", "#EE8B98", + "#EF233C", "#E41433", "#D90429") + +grp9_palette = c("#2B2D42", "#5C6378", "#757E93", + "#A5B0C0", "#BDC6D1", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +nge9_palette = c("#E8D5D3", "#CDC1C4", "#B2ADB4", + "#C06B6E", "#CE2928", "#B62626", + "#9E2224", "#6A2123", "#362022") + +grp11_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +text_col <- c(rep("white", 4), rep("black", 4), rep("white", 3)) + +# export as 1200 x 800 + +ggplot(data, aes(x = Method, y = Mean, fill = Method)) + + geom_bar(stat="identity", color = "black") + + geom_errorbar(aes(x = Method, ymin = Mean-SD, ymax = Mean+SD), colour = "black", width = 0.3, linewidth = 1.0) + + scale_fill_manual(values = grp11_palette) + + ggtitle("Execution time of the different methods using 10 000 simulated candidates.") + + xlab("Method") + + ylab("Time (s)") + + geom_text(aes(label=round(Mean, 2)), size = 5.0, color = text_col, position = position_stack(vjust = 0.5)) + + theme_minimal(base_size = 18) + + theme(axis.text.x = element_text(angle = 90, hjust = 0, vjust = 0.5)) diff --git a/Benchmarks/benchmark_hpc_10000.svg b/Benchmarks/benchmark_hpc_10000.svg new file mode 100644 index 0000000..67ddd36 --- /dev/null +++ b/Benchmarks/benchmark_hpc_10000.svg @@ -0,0 +1,831 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 9155900745c8bd9540102ce3f27815e1cb7f61e2 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Fri, 19 Apr 2024 18:45:58 +0200 Subject: [PATCH 23/31] add hpc 100 000 plot --- Benchmarks/benchmark_hpc_100000.R | 53 ++ Benchmarks/benchmark_hpc_100000.svg | 822 ++++++++++++++++++++++++++++ 2 files changed, 875 insertions(+) create mode 100644 Benchmarks/benchmark_hpc_100000.R create mode 100644 Benchmarks/benchmark_hpc_100000.svg diff --git a/Benchmarks/benchmark_hpc_100000.R b/Benchmarks/benchmark_hpc_100000.R new file mode 100644 index 0000000..3f84cfa --- /dev/null +++ b/Benchmarks/benchmark_hpc_100000.R @@ -0,0 +1,53 @@ +library(tidyverse) +library(readxl) + +data <- read_xlsx("benchmark_hpc_100000.xlsx") + +data <- data[-11,] + +data$Method <- factor(data$Method, levels = c("f32CPU_SV", + "i32CPU_SV", + "f32CPU_DV", + "i32CPU_DV", + "f32CPU_SM", + "i32CPU_SM", + "f32CPU_DM", + "i32CPU_DM", + "f32GPU_DV", + "f32GPU_DM", + "f32GPU_SM")) + +std9_palette = c("#2B2D42", "#5C6378", "#8D99AE", + "#BDC6D1", "#EDF2F4", "#EE8B98", + "#EF233C", "#E41433", "#D90429") + +grp9_palette = c("#2B2D42", "#5C6378", "#757E93", + "#A5B0C0", "#BDC6D1", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +nge9_palette = c("#E8D5D3", "#CDC1C4", "#B2ADB4", + "#C06B6E", "#CE2928", "#B62626", + "#9E2224", "#6A2123", "#362022") + +grp11_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +grp10_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433") + +text_col <- c(rep("white", 4), rep("black", 4), rep("white", 2)) + +# export as 1200 x 800 + +ggplot(data, aes(x = Method, y = Mean, fill = Method)) + + geom_bar(stat="identity", color = "black") + + geom_errorbar(aes(x = Method, ymin = Mean-SD, ymax = Mean+SD), colour = "black", width = 0.3, linewidth = 1.0) + + scale_fill_manual(values = grp10_palette) + + ggtitle("Execution time of the different methods using 100 000 simulated candidates.") + + xlab("Method") + + ylab("Time (s)") + + geom_text(aes(label=round(Mean, 2)), size = 5.0, color = text_col, position = position_stack(vjust = 0.5)) + + theme_minimal(base_size = 18) + + theme(axis.text.x = element_text(angle = 90, hjust = 0, vjust = 0.5)) diff --git a/Benchmarks/benchmark_hpc_100000.svg b/Benchmarks/benchmark_hpc_100000.svg new file mode 100644 index 0000000..befb32d --- /dev/null +++ b/Benchmarks/benchmark_hpc_100000.svg @@ -0,0 +1,822 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From bad66a7ec93fbfac00ba6430441aa9c5ebe00e20 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Fri, 19 Apr 2024 18:46:09 +0200 Subject: [PATCH 24/31] add hpc 1 000 000 plot --- Benchmarks/benchmark_hpc_1000000.R | 53 ++ Benchmarks/benchmark_hpc_1000000.svg | 837 +++++++++++++++++++++++++++ 2 files changed, 890 insertions(+) create mode 100644 Benchmarks/benchmark_hpc_1000000.R create mode 100644 Benchmarks/benchmark_hpc_1000000.svg diff --git a/Benchmarks/benchmark_hpc_1000000.R b/Benchmarks/benchmark_hpc_1000000.R new file mode 100644 index 0000000..1475121 --- /dev/null +++ b/Benchmarks/benchmark_hpc_1000000.R @@ -0,0 +1,53 @@ +library(tidyverse) +library(readxl) + +data <- read_xlsx("benchmark_hpc_1000000.xlsx") + +data <- data[-11,] + +data$Method <- factor(data$Method, levels = c("f32CPU_SV", + "i32CPU_SV", + "f32CPU_DV", + "i32CPU_DV", + "f32CPU_SM", + "i32CPU_SM", + "f32CPU_DM", + "i32CPU_DM", + "f32GPU_DV", + "f32GPU_DM", + "f32GPU_SM")) + +std9_palette = c("#2B2D42", "#5C6378", "#8D99AE", + "#BDC6D1", "#EDF2F4", "#EE8B98", + "#EF233C", "#E41433", "#D90429") + +grp9_palette = c("#2B2D42", "#5C6378", "#757E93", + "#A5B0C0", "#BDC6D1", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +nge9_palette = c("#E8D5D3", "#CDC1C4", "#B2ADB4", + "#C06B6E", "#CE2928", "#B62626", + "#9E2224", "#6A2123", "#362022") + +grp11_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +grp10_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433") + +text_col <- c(rep("white", 4), rep("black", 4), rep("white", 2)) + +# export as 1200 x 800 + +ggplot(data, aes(x = Method, y = Mean, fill = Method)) + + geom_bar(stat="identity", color = "black") + + geom_errorbar(aes(x = Method, ymin = Mean-SD, ymax = Mean+SD), colour = "black", width = 0.3, linewidth = 1.0) + + scale_fill_manual(values = grp10_palette) + + ggtitle("Execution time of the different methods using 1 000 000 simulated candidates.") + + xlab("Method") + + ylab("Time (s)") + + geom_text(aes(label=round(Mean, 2)), size = 5.0, color = text_col, position = position_stack(vjust = 0.5)) + + theme_minimal(base_size = 18) + + theme(axis.text.x = element_text(angle = 90, hjust = 0, vjust = 0.5)) diff --git a/Benchmarks/benchmark_hpc_1000000.svg b/Benchmarks/benchmark_hpc_1000000.svg new file mode 100644 index 0000000..ab2f8b3 --- /dev/null +++ b/Benchmarks/benchmark_hpc_1000000.svg @@ -0,0 +1,837 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 395ffd065376c8313d90b8cc95d376a87673e0aa Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Fri, 19 Apr 2024 18:46:20 +0200 Subject: [PATCH 25/31] add hpc 2 500 000 plot --- Benchmarks/benchmark_hpc_2500000.R | 53 ++ Benchmarks/benchmark_hpc_2500000.svg | 857 +++++++++++++++++++++++++++ 2 files changed, 910 insertions(+) create mode 100644 Benchmarks/benchmark_hpc_2500000.R create mode 100644 Benchmarks/benchmark_hpc_2500000.svg diff --git a/Benchmarks/benchmark_hpc_2500000.R b/Benchmarks/benchmark_hpc_2500000.R new file mode 100644 index 0000000..5bd10f6 --- /dev/null +++ b/Benchmarks/benchmark_hpc_2500000.R @@ -0,0 +1,53 @@ +library(tidyverse) +library(readxl) + +data <- read_xlsx("benchmark_hpc_2500000.xlsx") + +data <- data[-11,] + +data$Method <- factor(data$Method, levels = c("f32CPU_SV", + "i32CPU_SV", + "f32CPU_DV", + "i32CPU_DV", + "f32CPU_SM", + "i32CPU_SM", + "f32CPU_DM", + "i32CPU_DM", + "f32GPU_DV", + "f32GPU_DM", + "f32GPU_SM")) + +std9_palette = c("#2B2D42", "#5C6378", "#8D99AE", + "#BDC6D1", "#EDF2F4", "#EE8B98", + "#EF233C", "#E41433", "#D90429") + +grp9_palette = c("#2B2D42", "#5C6378", "#757E93", + "#A5B0C0", "#BDC6D1", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +nge9_palette = c("#E8D5D3", "#CDC1C4", "#B2ADB4", + "#C06B6E", "#CE2928", "#B62626", + "#9E2224", "#6A2123", "#362022") + +grp11_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +grp10_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433") + +text_col <- c(rep("white", 4), rep("black", 4), rep("white", 2)) + +# export as 1200 x 800 + +ggplot(data, aes(x = Method, y = Mean, fill = Method)) + + geom_bar(stat="identity", color = "black") + + geom_errorbar(aes(x = Method, ymin = Mean-SD, ymax = Mean+SD), colour = "black", width = 0.3, linewidth = 1.0) + + scale_fill_manual(values = grp10_palette) + + ggtitle("Execution time of the different methods using 2 500 000 simulated candidates.") + + xlab("Method") + + ylab("Time (s)") + + geom_text(aes(label=round(Mean, 2)), size = 5.0, color = text_col, position = position_stack(vjust = 0.5)) + + theme_minimal(base_size = 18) + + theme(axis.text.x = element_text(angle = 90, hjust = 0, vjust = 0.5)) diff --git a/Benchmarks/benchmark_hpc_2500000.svg b/Benchmarks/benchmark_hpc_2500000.svg new file mode 100644 index 0000000..fcd78a6 --- /dev/null +++ b/Benchmarks/benchmark_hpc_2500000.svg @@ -0,0 +1,857 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 0f8eea33f2dbb050b0b1bb6a4e0b893e279efb97 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Fri, 19 Apr 2024 19:16:43 +0200 Subject: [PATCH 26/31] add abbreviations --- benchmarks.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/benchmarks.md b/benchmarks.md index 773fa1d..aede10d 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -20,6 +20,21 @@ if batched multiplication has influence on performance) and return the top 100 candidates. All benchmarks were conducted during light background usage (e.g. open browser, text editor, etc.). +## Abbreviations + +The following terms are used synonymously throughout the document: +- `f32CPU_SV`: Float32-(CPU-)based sparse matrix * sparse vector search (using [Eigen](https://eigen.tuxfamily.org/)) +- `i32CPU_SV`: Int32-(CPU-)based sparse matrix * sparse vector search (using [Eigen](https://eigen.tuxfamily.org/)) +- `f32CPU_DV`: Float32-(CPU-)based sparse matrix * dense vector search (using [Eigen](https://eigen.tuxfamily.org/)) +- `i32CPU_DV`: Int32-(CPU-)based sparse matrix * dense vector search (using [Eigen](https://eigen.tuxfamily.org/)) +- `f32CPU_SM`: Float32-(CPU-)based sparse matrix * sparse matrix search (using [Eigen](https://eigen.tuxfamily.org/)) +- `i32CPU_SM`: Int32-(CPU-)based sparse matrix * sparse matrix search (using [Eigen](https://eigen.tuxfamily.org/)) +- `f32CPU_DM`: Float32-(CPU-)based sparse matrix * dense matrix search (using [Eigen](https://eigen.tuxfamily.org/)) +- `i32CPU_DM`: Int32-(CPU-)based sparse matrix * dense matrix search (using [Eigen](https://eigen.tuxfamily.org/)) +- `f32GPU_DV`: Float32-(GPU-)based sparse matrix * dense vector search (using [cuSPARSE](https://docs.nvidia.com/cuda/cusparse/)) +- `f32GPU_DM`: Float32-(GPU-)based sparse matrix * dense matrix search (using [cuSPARSE](https://docs.nvidia.com/cuda/cusparse/)) +- `f32GPU_SM`: Float32-(GPU-)based sparse matrix * sparse matrix search (using [cuSPARSE](https://docs.nvidia.com/cuda/cusparse/)) + ## System 1 - Standard Office PC The first system we tested this on was a standard office laptop with the From 0a1e85cfcb02064885aa4b1d954548961e624c97 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Fri, 19 Apr 2024 19:16:54 +0200 Subject: [PATCH 27/31] add benchmark data --- benchmarks.md | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/benchmarks.md b/benchmarks.md index aede10d..72c3413 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -222,4 +222,124 @@ following (more recent) hardware: Using a database of 10 000 peptide candidates the methods yield the following runtimes: +![benchmark_hpc_10000](Benchmarks/benchmark_hpc_10000.svg) +**Figure 6:** Float32-based sparse matrix * dense matrix search using +[cuSPARSE](https://docs.nvidia.com/cuda/cusparse/) yields the fastest +computation time of only 0.59 seconds. The raw data is available below. + +
Expand for raw data! + +| Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | +|:----------|-------------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|-----------:|-------:|-----:|----:| +| f32CPU_SV | 10000 | 2.43146 | 2.55636 | 2.39993 | 2.42731 | 2.39449 | 2.39449 | 2.55636 | 2.44191 | 0.0660161 | 9 | 1001 | 100 | +| i32CPU_SV | 10000 | 2.7085 | 2.70474 | 2.70086 | 2.729 | 2.68543 | 2.68543 | 2.729 | 2.70571 | 0.0156976 | 10 | 1001 | 100 | +| f32CPU_DV | 10000 | 0.6167 | 0.599691 | 0.595198 | 0.584888 | 0.591805 | 0.584888 | 0.6167 | 0.597657 | 0.0119388 | 2 | 1001 | 100 | +| i32CPU_DV | 10000 | 0.667608 | 0.636094 | 0.642741 | 0.637341 | 0.622594 | 0.622594 | 0.667608 | 0.641275 | 0.0164842 | 4 | 1001 | 100 | +| f32CPU_SM | 10000 | 0.792935 | 0.773152 | 0.773728 | 0.765361 | 0.756675 | 0.756675 | 0.792935 | 0.77237 | 0.0134243 | 7 | 1001 | 100 | +| i32CPU_SM | 10000 | 0.772883 | 0.768502 | 0.759843 | 0.765107 | 0.778391 | 0.759843 | 0.778391 | 0.768945 | 0.00711509 | 6 | 1001 | 100 | +| f32CPU_DM | 10000 | 0.632086 | 0.619624 | 0.622482 | 0.604109 | 0.602857 | 0.602857 | 0.632086 | 0.616231 | 0.0125278 | 3 | 1001 | 100 | +| i32CPU_DM | 10000 | 0.772297 | 0.69401 | 0.687996 | 0.690859 | 0.703034 | 0.687996 | 0.772297 | 0.709639 | 0.0354791 | 5 | 1001 | 100 | +| f32GPU_DV | 10000 | 0.813919 | 0.76518 | 0.758183 | 0.770478 | 0.765139 | 0.758183 | 0.813919 | 0.77458 | 0.0224207 | 8 | 1001 | 100 | +| f32GPU_DM | 10000 | 0.595171 | 0.590653 | 0.585184 | 0.582419 | 0.581002 | 0.581002 | 0.595171 | 0.586886 | 0.00592235 | 1 | 1001 | 100 | +| f32GPU_SM | 10000 | 6.10897 | 5.90136 | 5.95603 | 5.97876 | 6.05967 | 5.90136 | 6.10897 | 6.00096 | 0.0829823 | 11 | 1001 | 100 | + +
+ +### 100 000 Candidates + +`A * B = C where A[100000, 500000] and B[500000, 1001]` + +Using a database of 100 000 peptide candidates the methods yield the following +runtimes: + +![benchmark_hpc_100000](Benchmarks/benchmark_hpc_100000.svg) +**Figure 7:** Float32-based sparse matrix * dense matrix search using +[cuSPARSE](https://docs.nvidia.com/cuda/cusparse/) yields the fastest +computation time of only 1.75 seconds. Note that GPU-based sparse matrix * +sparse matrix search has been excluded from the plot since its computation time +exceeded that of all other methods by almost 20-fold. The raw data is available +below. + +
Expand for raw data! + +| Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | +|:----------|-------------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|-------:|-----:|----:| +| f32CPU_SV | 100000 | 17.2153 | 17.4153 | 17.2214 | 17.1595 | 17.0898 | 17.0898 | 17.4153 | 17.2203 | 0.12123 | 9 | 1001 | 100 | +| i32CPU_SV | 100000 | 19.5383 | 19.6478 | 19.4686 | 19.5157 | 19.8642 | 19.4686 | 19.8642 | 19.6069 | 0.158141 | 10 | 1001 | 100 | +| f32CPU_DV | 100000 | 2.20965 | 2.22161 | 2.24419 | 2.32234 | 2.24583 | 2.20965 | 2.32234 | 2.24872 | 0.0439058 | 3 | 1001 | 100 | +| i32CPU_DV | 100000 | 2.24745 | 2.25166 | 2.25541 | 2.25549 | 2.28039 | 2.24745 | 2.28039 | 2.25808 | 0.0128992 | 4 | 1001 | 100 | +| f32CPU_SM | 100000 | 2.54573 | 2.57403 | 2.53357 | 2.51469 | 2.69642 | 2.51469 | 2.69642 | 2.57289 | 0.0723424 | 6 | 1001 | 100 | +| i32CPU_SM | 100000 | 2.37684 | 2.38338 | 2.35434 | 2.37147 | 2.51973 | 2.35434 | 2.51973 | 2.40115 | 0.0671557 | 5 | 1001 | 100 | +| f32CPU_DM | 100000 | 2.86038 | 2.87027 | 2.86148 | 2.88828 | 2.88353 | 2.86038 | 2.88828 | 2.87279 | 0.0126856 | 7 | 1001 | 100 | +| i32CPU_DM | 100000 | 3.00192 | 2.9941 | 2.98285 | 2.98436 | 3.07926 | 2.98285 | 3.07926 | 3.0085 | 0.0403058 | 8 | 1001 | 100 | +| f32GPU_DV | 100000 | 1.89176 | 1.9011 | 1.79977 | 1.81026 | 1.86596 | 1.79977 | 1.9011 | 1.85377 | 0.0464785 | 2 | 1001 | 100 | +| f32GPU_DM | 100000 | 1.72806 | 1.74136 | 1.74271 | 1.74044 | 1.79692 | 1.72806 | 1.79692 | 1.7499 | 0.0269343 | 1 | 1001 | 100 | +| f32GPU_SM | 100000 | 368.121 | 372.694 | 366.824 | 367.272 | 374.929 | 366.824 | 374.929 | 369.968 | 3.62661 | 11 | 1001 | 100 | + +
+ +### 1 000 000 Candidates + +`A * B = C where A[1000000, 500000] and B[500000, 1001]` + +Using a database of 1 000 000 peptide candidates the methods yield the following +runtimes: + +![benchmark_hpc_1000000](Benchmarks/benchmark_hpc_1000000.svg) +**Figure 8:** Float32-based sparse matrix * dense vector search using +[cuSPARSE](https://docs.nvidia.com/cuda/cusparse/) yields the fastest +computation time of only 13.53 seconds. Note that GPU-based sparse matrix * +sparse matrix search was not measured due to its extremely long computation time +already evident from the 100 000 candidate benchmark. The raw data is available +below. + +
Expand for raw data! + +| Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | +|:----------|-------------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|----------:|-------:|-----:|----:| +| f32CPU_SV | 1000000 | 164.331 | 169.159 | 169.282 | 169.57 | 167.153 | 164.331 | 169.57 | 167.899 | 2.21262 | 9 | 1001 | 100 | +| i32CPU_SV | 1000000 | 187.277 | 194.068 | 192.426 | 187.627 | 193.715 | 187.277 | 194.068 | 191.023 | 3.31853 | 10 | 1001 | 100 | +| f32CPU_DV | 1000000 | 25.8363 | 25.9068 | 25.906 | 25.8961 | 25.7537 | 25.7537 | 25.9068 | 25.8598 | 0.0660915 | 6 | 1001 | 100 | +| i32CPU_DV | 1000000 | 24.3092 | 24.337 | 24.3 | 24.6825 | 24.4221 | 24.3 | 24.6825 | 24.4101 | 0.159677 | 5 | 1001 | 100 | +| f32CPU_SM | 1000000 | 20.5885 | 21.4535 | 21.15 | 21.1785 | 21.5341 | 20.5885 | 21.5341 | 21.1809 | 0.371133 | 4 | 1001 | 100 | +| i32CPU_SM | 1000000 | 19.2455 | 18.6396 | 19.5012 | 19.5133 | 19.917 | 18.6396 | 19.917 | 19.3633 | 0.470585 | 3 | 1001 | 100 | +| f32CPU_DM | 1000000 | 26.7471 | 26.6318 | 26.5303 | 27.5435 | 26.7253 | 26.5303 | 27.5435 | 26.8356 | 0.404922 | 8 | 1001 | 100 | +| i32CPU_DM | 1000000 | 26.506 | 26.3391 | 26.0741 | 26.1196 | 26.3898 | 26.0741 | 26.506 | 26.2857 | 0.183399 | 7 | 1001 | 100 | +| f32GPU_DV | 1000000 | 13.2421 | 13.7711 | 13.4819 | 13.5797 | 13.5924 | 13.2421 | 13.7711 | 13.5334 | 0.193436 | 1 | 1001 | 100 | +| f32GPU_DM | 1000000 | 14.4925 | 14.5667 | 14.4004 | 14.7976 | 14.7297 | 14.4004 | 14.7976 | 14.5974 | 0.164561 | 2 | 1001 | 100 | + +
+ +### 2 500 000 Candidates + +`A * B = C where A[2500000, 500000] and B[500000, 1001]` + +Using a database of 2 500 000 peptide candidates the methods yield the following +runtimes: + +![benchmark_hpc_2500000](Benchmarks/benchmark_hpc_2500000.svg) +**Figure 9:** Float32-based sparse matrix * dense vector search using +[cuSPARSE](https://docs.nvidia.com/cuda/cusparse/) yields the fastest +computation time of only 33.93 seconds. Note that GPU-based sparse matrix * +sparse matrix search was not measured due to its extremely long computation time +already evident from the 100 000 candidate benchmark. The raw data is available +below. + +
Expand for raw data! + +| Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | +|:----------|-------------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|-------:|-----:|----:| +| f32CPU_SV | 2500000 | 407.479 | 407.826 | 419.703 | 421.906 | 418.15 | 407.479 | 421.906 | 415.013 | 6.85122 | 9 | 1001 | 100 | +| i32CPU_SV | 2500000 | 467.131 | 478.789 | 475.488 | 481.399 | 479.534 | 467.131 | 481.399 | 476.468 | 5.63997 | 10 | 1001 | 100 | +| f32CPU_DV | 2500000 | 63.38 | 63.4611 | 64.0814 | 62.9425 | 62.8804 | 62.8804 | 64.0814 | 63.3491 | 0.483433 | 6 | 1001 | 100 | +| i32CPU_DV | 2500000 | 59.1485 | 60.1111 | 59.7992 | 58.7428 | 58.3854 | 58.3854 | 60.1111 | 59.2374 | 0.717179 | 5 | 1001 | 100 | +| f32CPU_SM | 2500000 | 50.3486 | 51.7864 | 51.3886 | 52.1593 | 50.9307 | 50.3486 | 52.1593 | 51.3227 | 0.710964 | 4 | 1001 | 100 | +| i32CPU_SM | 2500000 | 47.4197 | 46.9971 | 46.5492 | 48.0035 | 46.3684 | 46.3684 | 48.0035 | 47.0676 | 0.663803 | 3 | 1001 | 100 | +| f32CPU_DM | 2500000 | 64.9918 | 65.6541 | 64.0161 | 65.3734 | 65.5497 | 64.0161 | 65.6541 | 65.117 | 0.665061 | 7 | 1001 | 100 | +| i32CPU_DM | 2500000 | 64.8904 | 65.8225 | 64.7754 | 65.5182 | 65.5602 | 64.7754 | 65.8225 | 65.3134 | 0.455636 | 8 | 1001 | 100 | +| f32GPU_DV | 2500000 | 34.4445 | 34.2919 | 33.3516 | 33.3692 | 34.1864 | 33.3516 | 34.4445 | 33.9287 | 0.526903 | 1 | 1001 | 100 | +| f32GPU_DM | 2500000 | 37.2584 | 37.9242 | 36.1633 | 36.3446 | 37.3268 | 36.1633 | 37.9242 | 37.0035 | 0.734356 | 2 | 1001 | 100 | + +
+ ## Conclusions From 7708637206687559494232ee9529c5519dc70aff Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Fri, 19 Apr 2024 21:58:20 +0200 Subject: [PATCH 28/31] add hpc bench 5 000 000 --- Benchmarks/benchmark_hpc_5000000.R | 53 ++ Benchmarks/benchmark_hpc_5000000.svg | 849 ++++++++++++++++++++++++++ Benchmarks/benchmark_hpc_5000000.xlsx | Bin 0 -> 11052 bytes benchmarks.md | 31 + 4 files changed, 933 insertions(+) create mode 100644 Benchmarks/benchmark_hpc_5000000.R create mode 100644 Benchmarks/benchmark_hpc_5000000.svg create mode 100644 Benchmarks/benchmark_hpc_5000000.xlsx diff --git a/Benchmarks/benchmark_hpc_5000000.R b/Benchmarks/benchmark_hpc_5000000.R new file mode 100644 index 0000000..51689f4 --- /dev/null +++ b/Benchmarks/benchmark_hpc_5000000.R @@ -0,0 +1,53 @@ +library(tidyverse) +library(readxl) + +data <- read_xlsx("benchmark_hpc_5000000.xlsx") + +data <- data[-11,] + +data$Method <- factor(data$Method, levels = c("f32CPU_SV", + "i32CPU_SV", + "f32CPU_DV", + "i32CPU_DV", + "f32CPU_SM", + "i32CPU_SM", + "f32CPU_DM", + "i32CPU_DM", + "f32GPU_DV", + "f32GPU_DM", + "f32GPU_SM")) + +std9_palette = c("#2B2D42", "#5C6378", "#8D99AE", + "#BDC6D1", "#EDF2F4", "#EE8B98", + "#EF233C", "#E41433", "#D90429") + +grp9_palette = c("#2B2D42", "#5C6378", "#757E93", + "#A5B0C0", "#BDC6D1", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +nge9_palette = c("#E8D5D3", "#CDC1C4", "#B2ADB4", + "#C06B6E", "#CE2928", "#B62626", + "#9E2224", "#6A2123", "#362022") + +grp11_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433", "#D90429") + +grp10_palette = c("#2B2D42", "#383B50", "#44485D", "#5C6378", + "#BDC6D1", "#D5DCE3", "#E1E7EC", "#EDF2F4", + "#EF233C", "#E41433") + +text_col <- c(rep("white", 4), rep("black", 4), rep("white", 2)) + +# export as 1200 x 800 + +ggplot(data, aes(x = Method, y = Mean, fill = Method)) + + geom_bar(stat="identity", color = "black") + + geom_errorbar(aes(x = Method, ymin = Mean-SD, ymax = Mean+SD), colour = "black", width = 0.3, linewidth = 1.0) + + scale_fill_manual(values = grp10_palette) + + ggtitle("Execution time of the different methods using 5 000 000 simulated candidates.") + + xlab("Method") + + ylab("Time (s)") + + geom_text(aes(label=round(Mean, 2)), size = 5.0, color = text_col, position = position_stack(vjust = 0.5)) + + theme_minimal(base_size = 18) + + theme(axis.text.x = element_text(angle = 90, hjust = 0, vjust = 0.5)) diff --git a/Benchmarks/benchmark_hpc_5000000.svg b/Benchmarks/benchmark_hpc_5000000.svg new file mode 100644 index 0000000..a36295e --- /dev/null +++ b/Benchmarks/benchmark_hpc_5000000.svg @@ -0,0 +1,849 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Benchmarks/benchmark_hpc_5000000.xlsx b/Benchmarks/benchmark_hpc_5000000.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..eb97fcd1871dd15939fceca6c3ee43823223cd76 GIT binary patch literal 11052 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 +### 5 000 000 Candidates + +`A * B = C where A[5000000, 500000] and B[500000, 1001]` + +Using a database of 5 000 000 peptide candidates the methods yield the following +runtimes: + +![benchmark_hpc_5000000](Benchmarks/benchmark_hpc_5000000.svg) +**Figure 10:** Float32-based sparse matrix * dense vector search using +[cuSPARSE](https://docs.nvidia.com/cuda/cusparse/) yields the fastest +computation time of only 68.27 seconds. Note that GPU-based sparse matrix * +sparse matrix search was not measured due to its extremely long computation time +already evident from the 100 000 candidate benchmark. The raw data is available +below. + +
Expand for raw data! + +| Method | Candidates | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | Min | Max | Mean | SD | Rank | Y | N | +|:----------|-------------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|----------:|-------:|-----:|----:| +| f32CPU_SV | 5000000 | 826.765 | 849.757 | 821.71 | 820.768 | 821.078 | 820.768 | 849.757 | 828.015 | 12.3965 | 9 | 1001 | 100 | +| i32CPU_SV | 5000000 | 939.623 | 947.093 | 952.345 | 941.501 | 954.725 | 939.623 | 954.725 | 947.057 | 6.57454 | 10 | 1001 | 100 | +| f32CPU_DV | 5000000 | 130.432 | 125.811 | 126.793 | 126.478 | 125.721 | 125.721 | 130.432 | 127.047 | 1.94481 | 6 | 1001 | 100 | +| i32CPU_DV | 5000000 | 117.315 | 117.658 | 118.168 | 118.61 | 117.866 | 117.315 | 118.61 | 117.923 | 0.493645 | 5 | 1001 | 100 | +| f32CPU_SM | 5000000 | 124.313 | 104.291 | 104.264 | 101.747 | 102.933 | 101.747 | 124.313 | 107.51 | 9.45234 | 4 | 1001 | 100 | +| i32CPU_SM | 5000000 | 90.7281 | 95.7376 | 95.3606 | 92.9142 | 94.5655 | 90.7281 | 95.7376 | 93.8612 | 2.06021 | 3 | 1001 | 100 | +| f32CPU_DM | 5000000 | 127.834 | 133.133 | 134.49 | 131.903 | 132.968 | 127.834 | 134.49 | 132.066 | 2.53797 | 8 | 1001 | 100 | +| i32CPU_DM | 5000000 | 128.806 | 133.237 | 131.651 | 133.81 | 132.751 | 128.806 | 133.81 | 132.051 | 1.97979 | 7 | 1001 | 100 | +| f32GPU_DV | 5000000 | 67.4017 | 68.5841 | 68.0146 | 68.9836 | 68.3605 | 67.4017 | 68.9836 | 68.2689 | 0.599003 | 1 | 1001 | 100 | +| f32GPU_DM | 5000000 | 71.757 | 73.6774 | 73.7368 | 74.6015 | 73.9481 | 71.757 | 74.6015 | 73.5442 | 1.0642 | 2 | 1001 | 100 | + +
## Conclusions From 85f754dd72e93ba08b0e31511112c536a80c6699 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Fri, 19 Apr 2024 23:28:15 +0200 Subject: [PATCH 29/31] add max size info --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 355ca38..3cb2a6e 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,7 @@ be found here: [linux.md](linux.md) and [macos.md](macos.md). Please be aware of the following limitations: - Ions/peaks up to 5000 m/z are supported, beyond that they are discarded. - The encoding precision is 0.01 (m/z, Dalton). +- Only matrices up to 2 * 109 non-zero elements are supported \[see [this issue](https://github.com/hgb-bin-proteomics/CandidateVectorSearch/issues/42)\]. - \[Eigen\]\[Sparse\] Sparse candidate matrices support up to 100 elements per row, beyond that matrix creation might be slow due to resizing. - This means every peptide candidate can be encoded up to 100 ions. - \[Eigen\]\[Sparse\] Sparse spectrum matrices support up to 1000 elements per row, beyond that matrix creation might be slow due to resizing. From bd76caf6ef6f726c28d767398b4a051618ec7ce3 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Fri, 19 Apr 2024 23:33:56 +0200 Subject: [PATCH 30/31] add bench > 5mil --- benchmarks.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/benchmarks.md b/benchmarks.md index 8f46611..76da00c 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -373,4 +373,29 @@ below. | f32GPU_DM | 5000000 | 71.757 | 73.6774 | 73.7368 | 74.6015 | 73.9481 | 71.757 | 74.6015 | 73.5442 | 1.0642 | 2 | 1001 | 100 |
+ +### Beyond 5 000 000 Candidates + +Here are some single benchmarks of the best performing CPU-based search +`i32CPU_SM` and the best best performing GPU-based search `f32GPU_DV`: + +| Method | Candidates | Time (s) | +|:----------|-----------:|--------------:| +| i32CPU_SM | 10 000 000 | 192.9012858 | +| f32GPU_DV | 10 000 000 | 136.936034 | +| i32CPU_SM | 15 000 000 | 294.8084179 | +| f32GPU_DV | 15 000 000 | 222.3788737 | +| i32CPU_SM | 2 000 0000 | 402.716955 | +| f32GPU_DV | 20 000 000 | 281.232755 | +| i32CPU_SM | 21 474 835 | 439.2972796 | +| f32GPU_DV | 21 474 835 | failed | + +You might notice that the maximum number of tested candidates is 21 474 835, +this is because this results in 2 147 483 500 non-zero elements, close to the +maximum of a signed int32 type value. Going beyond that is impossible with the +provided implementation. In case you really need to go beyond that, please +adapt the implementation accordingly (e.g. using unsigned int32 or int64 data +types instead). See also +[this issue](https://github.com/hgb-bin-proteomics/CandidateVectorSearch/issues/42). + ## Conclusions From 86f8a647c3ace98b34420ee6aef3dabf2732c378 Mon Sep 17 00:00:00 2001 From: Micha Birklbauer Date: Fri, 19 Apr 2024 23:34:05 +0200 Subject: [PATCH 31/31] add conclusion --- benchmarks.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/benchmarks.md b/benchmarks.md index 76da00c..353b0a4 100644 --- a/benchmarks.md +++ b/benchmarks.md @@ -399,3 +399,17 @@ types instead). See also [this issue](https://github.com/hgb-bin-proteomics/CandidateVectorSearch/issues/42). ## Conclusions + +CPU-based sparse matrix * sparse matrix search is generally a good choice, no +matter the system configuration. Choosing an Int32- or Float32-based approach +usually does not make a considerable difference, we recommend going with the +Int32 variant as it ensures better reproducibility of results, eliminating any +kind of deviations due to floating point shenanigans. If a decent GPU (e.g. +anything comparable to an Nvidia GeForce RTX 4060 Ti 16 GB or better) is +available, running a GPU-based search is the more performant choice. We +recommend going with the sparse matrix * dense vector approach as it requires +less GPU memory. The GPU-based sparse matrix * sparse matrix search appears to +be the worst of the tested methods, yielding very long computation times and +exceedingly high memory usage. This is most likely due to the fact that the +algorithm assumes that the resulting matrix is also sparse, which almost never +will be the case.