[go: up one dir, main page]

divan 0.1.21

Statistically-comfy benchmarking library.
Documentation
# Wanted

It would be great to have the following features added to Divan. If you have
ideas to expand this list, please [find](https://github.com/nvzqz/divan/discussions)
or [create](https://github.com/nvzqz/divan/discussions/new?category=ideas) a
discussion first.

- Async benchmarks

- Baseline benchmark
    - Should match baselines across equal generic types and constants
    - Idea:
    ```rs
    #[divan::bench]
    fn old() { ... }

    #[divan::bench(baseline = old)]
    fn new() { ... }
    ```

- Cross-device: run benchmarks on other devices and report the data on the local
device

- HTML output

- CSV output

- Custom counters

- Time complexity of counters
    - Also space complexity when measuring heap allocation

- Measure heap allocations
    - Custom [`GlobalAlloc`]https://doc.rust-lang.org/std/alloc/trait.GlobalAlloc.html
    that wraps another `GlobalAlloc`, defaulting to [`System`]https://doc.rust-lang.org/std/alloc/struct.System.html

- Custom timers

- Timer for kernel/user mode
    - Unix:
        - [`getrusage(2)`]https://pubs.opengroup.org/onlinepubs/9699919799/functions/getrusage.html
        - Per-thread:
            - Linux/FreeBSD/OpenBSD: [`RUSAGE_THREAD`]https://man7.org/linux/man-pages/man2/getrusage.2.html
            - macOS/iOS: [`thread_info(mach_thread_self(), ...)`]https://www.gnu.org/software/hurd/gnumach-doc/Thread-Information.html
    - Windows:
        - [`GetProcessTimes`]https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-getprocesstimes
        - [`GetThreadTimes`]https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-getthreadtimes