From a21be273690328de39f54684bc3d5a3372165310 Mon Sep 17 00:00:00 2001 From: Junyi Xu Date: Mon, 26 Aug 2024 02:38:30 +0800 Subject: [PATCH] docs: benchmark --- docs/src/img/enzyme_ForwardDiff.png | Bin 0 -> 50883 bytes docs/src/index.md | 6 +++++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 docs/src/img/enzyme_ForwardDiff.png diff --git a/docs/src/img/enzyme_ForwardDiff.png b/docs/src/img/enzyme_ForwardDiff.png new file mode 100644 index 0000000000000000000000000000000000000000..b09ae7b0b32565d59f6eaeb17b444604dddcaf82 GIT binary patch literal 50883 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 D&368) literal 0 HcmV?d00001 diff --git a/docs/src/index.md b/docs/src/index.md index 6d0a2de..49bcd11 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -53,7 +53,11 @@ julia> @time jacobian_enzyme_forward(TrixiEnzyme.upwind!, x, N=11); 0.000332 seconds (307 allocations: 410.453 KiB) ``` -If you do not explicitly provide a chunk size, TrixiEnzyme will try to guess one for you based on your input vector: +When the cache is relatively small and you have appropriately chosen the batch size, +Enzyme generally performs faster than ForwardDiff (see [test](https://github.com/junyixu/TrixiEnzyme.jl/blob/main/test/UpwindTest.jl)). +![enzyme ForwardDiff upwind](./img/enzyme_ForwardDiff.png) + +If you do not explicitly provide a batch size, TrixiEnzyme will try to guess one for you based on your input vector: ```julia-repl julia> x = -1:0.01:1;