# Comparison between C-implemented and R-implemented dual-loop matrix summing function performance ## Running To run this project, run the following commands: ```bash # matrix test Rscript mat_tests.R ``` ### Building and running If you edit the C code, to recompile run: ```bash bash make_c.sh ``` ### View Evaluation To install packages necessary for this .rmd document, run: ```bash Rscript install_libs.R ``` ## Evaluation The experiment shows the performance comparison between the R-implemented and C-implemented matrix summing functions for different matrix sizes. As the matrix size increases, the C-implemented function demonstrates significantly better performance compared to the R-implemented function. Surprisingly, the speedup remains fairly constant in relative terms, stabilizing at about 4x > Note: Evaluation script run on an AMD Ryzen 9 7950X3D cpu with enough RAM for all matrix sizes | Matrix size | sum1 run duration (secs) | sum2 run duration (secs) | |-------------|---------------------------|---------------------------| | 5x5 | 7.152557e-06 | 7.867813e-06 | | 10x10 | 9.775162e-06 | 5.00679e-06 | | 50x50 | 9.346008e-05 | 8.106232e-06 | | 100x100 | 0.0003376007 | 1.955032e-05 | | 500x500 | 0.007472992 | 0.001415014 | | 1000x1000 | 0.03007007 | 0.005748034 | | 5000x5000 | 0.6559205 | 0.1854615 | | 10000x10000 | 2.692389 | 0.6747584 | | 20000x20000 | 10.67763 | 2.615553 | | 30000x30000 | 24.33534 | 5.987761 | ```{r diagram} library(ggplot2) library(dplyr) library(tidyr) # prepare data data <- tribble( ~Matrix.size, ~R.sum, ~C.sum, "5", 7.152557e-06, 7.867813e-06, "10", 9.775162e-06, 5.00679e-06, "50", 9.346008e-05, 8.106232e-06, "100", 0.0003376007, 1.955032e-05, "500", 0.007472992, 0.001415014, "1000", 0.03007007, 0.005748034, "5000", 0.6559205, 0.1854615, "10000", 2.692389, 0.6747584, "20000", 10.67763, 2.615553, "30000", 24.33534, 5.987761 ) # Convert Matrix.size to factor with desired order data$Matrix.size <- factor(data$Matrix.size, levels = data$Matrix.size) # rearrange data data_long <- data %>% pivot_longer(cols = c(R.sum, C.sum), names_to = "Method", values_to = "Duration") # Create the plot ggplot(data_long, aes(x = Matrix.size, y = Duration, color = Method)) + geom_point() + scale_y_log10() + labs(x = "Matrix Size", y = "Duration (seconds)", color = "Method") + ggtitle("Calculation Time per (square) matrix size") + theme_minimal() ```