{"id":17223144,"url":"https://github.com/daboross/rayon-array-add-benchmarks","last_synced_at":"2025-03-25T16:23:02.810Z","repository":{"id":150518006,"uuid":"264136779","full_name":"daboross/rayon-array-add-benchmarks","owner":"daboross","description":"Benchmarks 3 versions of an add_all function.","archived":false,"fork":false,"pushed_at":"2020-05-15T09:02:27.000Z","size":9,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-30T14:27:01.031Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/daboross.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-15T08:16:22.000Z","updated_at":"2020-05-15T09:02:30.000Z","dependencies_parsed_at":"2023-04-08T08:05:12.958Z","dependency_job_id":null,"html_url":"https://github.com/daboross/rayon-array-add-benchmarks","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daboross%2Frayon-array-add-benchmarks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daboross%2Frayon-array-add-benchmarks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daboross%2Frayon-array-add-benchmarks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daboross%2Frayon-array-add-benchmarks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daboross","download_url":"https://codeload.github.com/daboross/rayon-array-add-benchmarks/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245496946,"owners_count":20624923,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-15T04:07:29.319Z","updated_at":"2025-03-25T16:23:02.782Z","avatar_url":"https://github.com/daboross.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rayon-array-add-benchmarks\n\nAttempts to benchmark three versions of an `add_all` function to add all elements from one vec into another.\n\n## The three versions:\n\n```rust\nconst CHUNK_SIZE: usize = 1024;\n\npub fn par_add_all_join\u003cT: Send + Sync + AddAssign + Copy\u003e(target: \u0026mut [T], src: \u0026[T]) {\n    assert_eq!(target.len(), src.len());\n\n    if target.len() \u003c CHUNK_SIZE {\n        for (a, b) in target.iter_mut().zip(src.iter()) {\n            *a += *b;\n        }\n    } else {\n        let midpoint = target.len() / 2;\n        let (left_target, right_target) = target.split_at_mut(midpoint);\n        let (left_src, right_src) = src.split_at(midpoint);\n        rayon::join(\n            || par_add_all_join(left_target, left_src),\n            || par_add_all_join(right_target, right_src),\n        );\n    }\n}\n\npub fn seq_add_all\u003cT: Send + Sync + AddAssign + Copy\u003e(target: \u0026mut [T], src: \u0026[T]) {\n    assert_eq!(target.len(), src.len());\n    for (a, b) in target.iter_mut().zip(src.iter()) {\n        *a += *b;\n    }\n}\n\npub fn par_add_all_par_iter\u003cT: Send + Sync + AddAssign + Copy\u003e(target: \u0026mut [T], src: \u0026[T]) {\n    assert_eq!(target.len(), src.len());\n    target\n        .par_iter_mut()\n        .zip(src.par_iter())\n        .for_each(|(a, b)| {\n            *a += *b;\n        });\n}\n```\n\n## Run the benchmark\n\nTo run the benchmark locally, install rust and use `cargo bench`.\n\n## Benchmark Results\n\nBenchmark results on my dual-core laptop with an i7-7600U CPU @ 2.80 Ghz and\nLPDDR3 ram.\n\n```text\n320 kib array/seq_add_all                                                                             \n                        time:   [1.6336 us 1.6351 us 1.6369 us]\nFound 21 outliers among 100 measurements (21.00%)\n  3 (3.00%) low severe\n  3 (3.00%) low mild\n  6 (6.00%) high mild\n  9 (9.00%) high severe\n320 kib array/par_add_all_par_iter                                                                             \n                        time:   [17.487 us 17.563 us 17.647 us]\nFound 12 outliers among 100 measurements (12.00%)\n  1 (1.00%) low mild\n  5 (5.00%) high mild\n  6 (6.00%) high severe\n320 kib array/par_add_all_join_1024_chunks                                                                             \n                        time:   [9.9634 us 9.9947 us 10.032 us]\nFound 13 outliers among 100 measurements (13.00%)\n  2 (2.00%) low mild\n  8 (8.00%) high mild\n  3 (3.00%) high severe\n\n320 mib array/seq_add_all                                                                            \n                        time:   [5.5562 ms 5.5585 ms 5.5609 ms]\nFound 6 outliers among 100 measurements (6.00%)\n  3 (3.00%) high mild\n  3 (3.00%) high severe\n320 mib array/par_add_all_par_iter                                                                            \n                        time:   [5.2304 ms 5.2932 ms 5.3608 ms]\nFound 16 outliers among 100 measurements (16.00%)\n  6 (6.00%) high mild\n  10 (10.00%) high severe\n320 mib array/par_add_all_join_1024_chunks                                                                            \n                        time:   [5.1380 ms 5.1402 ms 5.1427 ms]\nFound 12 outliers among 100 measurements (12.00%)\n  4 (4.00%) high mild\n  8 (8.00%) high severe\n320 mib array/par_add_all_join_1048576_chunks                                                                            \n                        time:   [5.1421 ms 5.1444 ms 5.1467 ms]\nFound 8 outliers among 100 measurements (8.00%)\n  3 (3.00%) high mild\n  5 (5.00%) high severe\n\ngib array/seq_add_all   time:   [18.221 ms 18.227 ms 18.233 ms]                                  \nFound 2 outliers among 30 measurements (6.67%)\n  1 (3.33%) high mild\n  1 (3.33%) high severe\ngib array/par_add_all_par_iter                                                                            \n                        time:   [16.714 ms 16.718 ms 16.724 ms]\nFound 2 outliers among 30 measurements (6.67%)\n  1 (3.33%) high mild\n  1 (3.33%) high severe\ngib array/par_add_all_join_1024_chunks                                                                            \n                        time:   [16.691 ms 16.696 ms 16.700 ms]\nFound 3 outliers among 30 measurements (10.00%)\n  1 (3.33%) high mild\n  2 (6.67%) high severe\ngib array/par_add_all_join_1048576_chunks                                                                            \n                        time:   [16.706 ms 16.712 ms 16.718 ms]\nFound 4 outliers among 30 measurements (13.33%)\n  3 (10.00%) high mild\n  1 (3.33%) high severe\ngib array/par_add_all_join_4194304_chunks                                                                            \n                        time:   [16.715 ms 17.092 ms 17.615 ms]\nFound 5 outliers among 30 measurements (16.67%)\n  2 (6.67%) high mild\n  3 (10.00%) high severe\n```\n\nI think more benchmark results on more parallel computers are needed to have\nactually serious results, though. PRs adding more benchmark results welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaboross%2Frayon-array-add-benchmarks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaboross%2Frayon-array-add-benchmarks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaboross%2Frayon-array-add-benchmarks/lists"}