Repository: sharkdp/hyperfine (language: rust)

Issue:
Conclude phase (opposite of --prepare)
In the same manner as the --prepare phase exists, the feature request is for a non-timed --conclude or --post phase that would run after each benchmarked command. There would each be 1 or N number of these.

In my use case, I cannot do the cleanup after the command executes W(armup)+N times. I also understand that running in this phase can pollute the cache, but in my case, the benchmarks can already run for hours.

The current workaround is to put the per command shutdown steps in each bechmarked command but that pollutes the benchmarking times.

Thanks again for an excellent utility



Discussion / hints:
My use case, right now, is benchmarking server startup performance - e.g. "time to successfully serve the first request".

In terms of phasing, I'd use
- prepare == <nothing>
- command == bash: start server, busy-loop with curl until HTTP 200
- conclude == bash: zap server out of existence (pkill or whatever), this will release the server port

After enough warmup, the file system cache will be hot enough so that the only thing being measured would be the (CPU) time it takes for the server to start (plus, of course, the time to generate the response)

"conclude" (or whatever the name would be) establishes complete symmetry in phasing:

```
setup
    prepare
    conclude  <-- the missing piece
cleanup
```

Coming to think of it, I can actually make do with only the prepare phase:

* prepare == kill (any) running server 
* command == launch server, ...
* cleanup == kill (any) running server

This is workable, but ... does not feel nice ... compared to

* command == launch server, ...
* conclude == kill running server

It's the current workaround I am using as well, but it means both the prepare and cleanup phase need to have duplicated mechanics. Going through and understanding what is actually happening is already not-clear to new comers. 
Thank you for the feature request. I can certainly see the use case for this and agree that it would lead to a better UX.

Before someone goes ahead an implements this: it might make sense to introduce some useful abstractions to avoid a lot of code duplication for all of those options (`--setup`, `--prepare`, `--conclude`, `--cleanup`).

Naming wise, I think `--conclude` is not bad. Are there any alternative proposals? To avoid too much confusion, would it make sense to introduce a new naming scheme? Something like
* `--before-benchmark <cmd>` (for `--setup <cmd>`)
* `--before-run <cmd>` (for `--prepare <cmd>`)
* `--after-run <cmd>` (for `--conclude <cmd>`)
* `--after-benchmark <cmd>` (for `--cleanup <cmd>`)

> "conclude" (or whatever the name would be) establishes complete symmetry in phasing:
> 
> ```
> setup
>     prepare
>     conclude  <-- the missing piece
> cleanup
> ```

Yes. See also: https://github.com/sharkdp/hyperfine#detailed-benchmark-flowchart
> I think `--conclude` is not bad. Are there any alternative proposals?

`--wrapup, --shutdown, --finish` are a couple more suggestions

>To avoid too much confusion, would it make sense to introduce a new naming scheme

Are you suggesting both sets of names would be available? ie there would be aliases? If not is there any concern for breaking backward compatibility with the new names?
I just took a very quick stab at (blindly) implementing `--conclude`, see https://github.com/sharkdp/hyperfine/compare/master...shoffmeister:hyperfine:feature/add-conclusion

Those changes are plenty ugly, much duplication, so I now understand the need domain expert's ;) perspective of there being a desire to  
> introduce some useful abstractions to avoid a lot of code duplication

I might find some minutes to fix my mess.

With respect to naming:
* removing the existing command-line parameters breaks the (user) contract, hence that would not be an option I would consider
* adding a new command-line option needs to be in line with the current single-word philosophy for the sake of consistency; `conclude` seems to be as good as any other informal working title until the bike-shedding is done?
* introducing a `before` and `after` pattern sounds like a very good idea, as it would improve UX; my gut feeling here is that
  * this should happen in a separate PR / issue (it is orthogonal)
  * before/after would become the primary documented command-line options and the single-word variants would be demoted to aliases (because of UX)
This sounds like an excellent plan

Fix patch:
diff --git a/doc/execution-order.png b/doc/execution-order.png
index 48350fc38..845a302fe 100644
Binary files a/doc/execution-order.png and b/doc/execution-order.png differ
diff --git a/doc/execution-order.svg b/doc/execution-order.svg
index c875c9c5f..9c5f333e3 100644
--- a/doc/execution-order.svg
+++ b/doc/execution-order.svg
@@ -7,9 +7,9 @@
    viewBox="0 0 397.65199 482.07085"
    version="1.1"
    id="svg5"
-   inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
+   inkscape:version="1.3 (1:1.3+202307231459+0e150ed6c4)"
    sodipodi:docname="execution-order.svg"
-   inkscape:export-filename="/home/shark/Informatik/rust/hyperfine/doc/execution-order.png"
+   inkscape:export-filename="execution-order.png"
    inkscape:export-xdpi="38.32"
    inkscape:export-ydpi="38.32"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
@@ -26,11 +26,11 @@
      inkscape:pagecheckerboard="0"
      inkscape:document-units="mm"
      showgrid="false"
-     inkscape:zoom="0.38529391"
-     inkscape:cx="1022.596"
-     inkscape:cy="939.54249"
-     inkscape:window-width="1920"
-     inkscape:window-height="1175"
+     inkscape:zoom="0.70710678"
+     inkscape:cx="627.91082"
+     inkscape:cy="893.07586"
+     inkscape:window-width="2560"
+     inkscape:window-height="1417"
      inkscape:window-x="1920"
      inkscape:window-y="0"
      inkscape:window-maximized="1"
@@ -43,667 +43,915 @@
      fit-margin-right="30"
      fit-margin-bottom="30"
      lock-margins="true"
-     units="px">
+     units="px"
+     inkscape:showpageshadow="2"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:export-bgcolor="#ffffffff">
     <inkscape:grid
        type="xygrid"
        id="grid949"
        originx="323.88106"
-       originy="-12.964584" />
+       originy="-12.964584"
+       spacingy="1"
+       spacingx="1"
+       units="px"
+       visible="false" />
     <sodipodi:guide
-       position="179.6831,358.775"
+       position="202.85342,175.48018"
        orientation="1,0"
-       id="guide130046" />
+       id="guide130046"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="26.437454,239.02565"
+       orientation="1,0"
+       id="guide58"
+       inkscape:locked="false" />
   </sodipodi:namedview>
   <defs
-     id="defs2" />
+     id="defs2">
+    <rect
+       x="287.17187"
+       y="480.72656"
+       width="21.71875"
+       height="332.875"
+       id="rect14" />
+    <rect
+       x="249.83594"
+       y="1389.4844"
+       width="8.7890625"
+       height="188.23437"
+       id="rect13" />
+    <rect
+       x="508.35665"
+       y="352.30533"
+       width="20.402297"
+       height="106.86184"
+       id="rect7" />
+  </defs>
   <g
      inkscape:label="Ebene 1"
      inkscape:groupmode="layer"
      id="layer1"
      transform="translate(323.88102,-12.964581)">
     <rect
-       style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.481194;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       style="fill:#abe1ac;fill-opacity:1;stroke:#000000;stroke-width:0.623093;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect56"
+       width="176.10442"
+       height="13.304932"
+       x="-297.13202"
+       y="357.00705"
+       ry="0.99500984" />
+    <rect
+       style="fill:#e1abcc;fill-opacity:1;stroke:#000000;stroke-width:0.635821;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect55"
+       width="176.09804"
+       height="13.292206"
+       x="-297.12564"
+       y="299.96063"
+       ry="0.99704427" />
+    <rect
+       style="fill:#abe1d8;fill-opacity:1;stroke:#000000;stroke-width:0.623093;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
        id="rect159433"
-       width="80.681"
-       height="13.446833"
-       x="-226.03801"
-       y="147.57736"
-       ry="1.0056218" />
+       width="176.10442"
+       height="13.157444"
+       x="-297.13202"
+       y="328.08582"
+       ry="0.99500984" />
     <rect
-       style="fill:#010101;fill-opacity:1;stroke:#000000;stroke-width:0.654957;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       style="fill:#923340;fill-opacity:1;stroke:#000000;stroke-width:0.857224;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
        id="rect123376"
-       width="80.026047"
-       height="12.791878"
-       x="-302.52026"
-       y="132.40656"
-       ry="0.9593913" />
+       width="175.98735"
+       height="12.5896"
+       x="-297.01495"
+       y="285.72119"
+       ry="0.94422126" />
     <rect
-       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.654957;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       style="fill:#286f50;fill-opacity:1;stroke:#000000;stroke-width:0.854989;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
        id="rect129065"
-       width="80.026047"
-       height="12.791878"
-       x="-302.52026"
-       y="162.73172"
-       ry="0.9593913" />
+       width="175.98848"
+       height="12.591858"
+       x="-297.01608"
+       y="342.95483"
+       ry="0.94438893" />
     <rect
-       style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.481194;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       style="fill:#e1b0ab;fill-opacity:1;stroke:#000000;stroke-width:0.635821;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
        id="rect117266"
-       width="80.681"
-       height="13.446833"
-       x="-225.7778"
-       y="117.46693"
-       ry="1.0086428" />
+       width="176.09804"
+       height="13.113291"
+       x="-297.12564"
+       y="270.72006"
+       ry="0.99704427" />
     <rect
-       style="fill:#b3b3b3;stroke:#000000;stroke-width:0.481194;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       style="fill:#b3b3b3;stroke:#000000;stroke-width:0.651841;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
        id="rect117165"
-       width="80.681"
-       height="13.446827"
-       x="-226.03755"
-       y="177.90302"
-       ry="1.0085125" />
+       width="176.09004"
+       height="14.086456"
+       x="-297.11765"
+       y="241.5974"
+       ry="1.0564854" />
     <rect
-       style="fill:#b3b3b3;stroke:#000000;stroke-width:0.481194;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       style="fill:#b3b3b3;stroke:#000000;stroke-width:0.63283;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
        id="rect117064"
-       width="80.681"
-       height="13.446837"
-       x="-225.7778"
-       y="102.33925"
-       ry="1.0085125" />
+       width="176.09953"
+       height="13.295197"
+       x="-297.12714"
+       y="226.3399"
+       ry="0.99713981" />
     <text
        xml:space="preserve"
-       style="font-size:10.5833px;line-height:1.2;font-family:Audiowide;-inkscape-font-specification:Audiowide;white-space:pre;inline-size:199.93;stroke-width:0.264583"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.22134px;line-height:1.2;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';white-space:pre;inline-size:199.93;display:inline;fill:#000000;stroke-width:0.264583"
        x="-79.596779"
        y="-115.14695"
        id="text41875"
-       transform="matrix(1.1724504,0,0,1.1724504,-222.61922,201.56959)"><tspan
+       transform="matrix(1.6931389,0,0,1.6931389,-165.28593,372.79263)"><tspan
          x="-79.596779"
          y="-115.14695"
-         id="tspan1466"><tspan
-           style="font-family:'Fira Code';-inkscape-font-specification:'Fira Code'"
-           id="tspan1464">hyperfine
-</tspan></tspan><tspan
+         id="tspan1">hyperfine&#10;</tspan><tspan
+         x="-79.596779"
+         y="-106.48134"
+         id="tspan6"><tspan
+   style="fill:#ff6600"
+   id="tspan5">  --warmup 2</tspan>&#10;</tspan><tspan
+         x="-79.596779"
+         y="-97.815729"
+         id="tspan9"><tspan
+           style="fill:#00cccc"
+           id="tspan8">  --runs 3&#10;</tspan></tspan><tspan
+         x="-79.596779"
+         y="-89.150118"
+         id="tspan10">&#10;</tspan><tspan
          x="-79.596779"
-         y="-102.16832"
-         id="tspan1472"><tspan
-           style="font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#e35a00"
-           id="tspan1468">  --warmup 2</tspan><tspan
-           style="font-family:'Fira Code';-inkscape-font-specification:'Fira Code'"
-           id="tspan1470">
-</tspan></tspan><tspan
+         y="-80.484506"
+         id="tspan13">  --setup   &lt;setup&gt;&#10;</tspan><tspan
          x="-79.596779"
-         y="-89.189692"
-         id="tspan1478"><tspan
-           style="font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#00bbeb"
-           id="tspan1474">  --runs 3</tspan><tspan
-           style="font-family:'Fira Code';-inkscape-font-specification:'Fira Code'"
-           id="tspan1476">
-</tspan></tspan><tspan
+         y="-71.818895"
+         id="tspan14">  --cleanup &lt;cleanup&gt;&#10;</tspan><tspan
          x="-79.596779"
-         y="-76.211062"
-         id="tspan1482"><tspan
-           style="font-family:'Fira Code';-inkscape-font-specification:'Fira Code'"
-           id="tspan1480">  --setup   &lt;setup&gt;
-</tspan></tspan><tspan
+         y="-63.153284"
+         id="tspan15">&#10;</tspan><tspan
          x="-79.596779"
-         y="-63.232432"
-         id="tspan1486"><tspan
-           style="font-family:'Fira Code';-inkscape-font-specification:'Fira Code'"
-           id="tspan1484">  --prepare &lt;prepare1&gt;
-</tspan></tspan><tspan
+         y="-54.487676"
+         id="tspan17">  --prepare &lt;prepare1&gt;&#10;</tspan><tspan
          x="-79.596779"
-         y="-50.253802"
-         id="tspan1492"><tspan
-           style="font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff"
-           id="tspan1488">  &lt;command1&gt;</tspan><tspan
-           style="font-family:'Fira Code';-inkscape-font-specification:'Fira Code'"
-           id="tspan1490">
-</tspan></tspan><tspan
+         y="-45.822069"
+         id="tspan19"><tspan
+           style="fill:#ffffff"
+           id="tspan18">  &lt;command1&gt;&#10;</tspan></tspan><tspan
          x="-79.596779"
-         y="-37.275172"
-         id="tspan1496"><tspan
-           style="font-family:'Fira Code';-inkscape-font-specification:'Fira Code'"
-           id="tspan1494">  --prepare &lt;prepare2&gt;
-</tspan></tspan><tspan
+         y="-37.156462"
+         id="tspan21"><tspan
+           style="fill:#1a1a1a"
+           id="tspan20">  --conclude &lt;conclude1&gt;&#10;</tspan></tspan><tspan
          x="-79.596779"
-         y="-24.296542"
-         id="tspan1500"><tspan
-           style="font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff"
-           id="tspan1498">  &lt;command2&gt;
-</tspan></tspan><tspan
+         y="-28.490854"
+         id="tspan22">&#10;</tspan><tspan
          x="-79.596779"
-         y="-11.317913"
-         id="tspan1504"><tspan
-           style="font-family:'Fira Code';-inkscape-font-specification:'Fira Code'"
-           id="tspan1502">  --cleanup &lt;cleanup&gt;</tspan></tspan></text>
+         y="-19.825247"
+         id="tspan23">  --prepare &lt;prepare2&gt;&#10;</tspan><tspan
+         x="-79.596779"
+         y="-11.159639"
+         id="tspan37"><tspan
+           style="fill:#ffffff"
+           id="tspan24">  &lt;command2&gt;&#10;</tspan></tspan><tspan
+         x="-79.596779"
+         y="-2.4940308"
+         id="tspan55"><tspan
+   style="fill:#1a1a1a"
+   id="tspan38">  --conclude &lt;conclude2&gt;</tspan>&#10;</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;line-height:1;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#e35a00;fill-opacity:1;stroke-width:0.264583"
+       x="-29.380138"
+       y="76.532524"
+       id="text7364"><tspan
+         sodipodi:role="line"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#e35a00;fill-opacity:1;stroke-width:0.264583"
+         x="-29.380138"
+         y="76.532524"
+         id="tspan20001">2 warmup runs</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;line-height:1;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';white-space:pre;inline-size:105.635;display:inline;fill:#00bbeb;fill-opacity:1;stroke-width:0.264583"
+       x="-16.304935"
+       y="161.32399"
+       id="text12858"
+       transform="translate(-13.033123,20.367734)"><tspan
+         x="-16.304935"
+         y="161.32399"
+         id="tspan56">3 benchmark runs</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;line-height:1;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#e35a00;fill-opacity:1;stroke-width:0.264583"
+       x="-29.380138"
+       y="317.78952"
+       id="text272448"><tspan
+         sodipodi:role="line"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#e35a00;fill-opacity:1;stroke-width:0.264583"
+         x="-29.380138"
+         y="317.78952"
+         id="tspan272446">2 warmup runs</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46667px;line-height:1;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';white-space:pre;inline-size:105.635;display:inline;fill:#00bbeb;fill-opacity:1;stroke-width:0.264583"
+       x="-16.304935"
+       y="161.32399"
+       id="text272452"
+       transform="translate(-13.033123,261.62471)"><tspan
+         x="-16.304935"
+         y="161.32399"
+         id="tspan57">3 benchmark runs</tspan></text>
+    <text
+       xml:space="preserve"
+       transform="matrix(0.26458333,0,0,0.26458333,-323.88102,12.964581)"
+       id="text7"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';white-space:pre;shape-inside:url(#rect7);display:inline;fill:#000000;fill-opacity:1" />
     <rect
-       style="fill:#80e5ff;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect6355"
+       style="fill:#e4e4e4;fill-opacity:1;stroke:#00bbeb;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect272406-8"
        width="58.208336"
-       height="111.12499"
+       height="115.26278"
        x="-95.249992"
-       y="116.41667"
+       y="120.93826"
        ry="0.79374999" />
     <rect
-       style="fill:#ffb380;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect846"
-       width="58.20834"
-       height="74.083336"
-       x="-95.249992"
-       y="37.041668"
-       ry="0.79374999" />
-    <rect
-       style="fill:#010101;fill-opacity:1;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect1145"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="137.58333"
-       ry="0.79374999" />
+       style="fill:#e4e4e4;fill-opacity:1;stroke:#e35a00;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect272408-6"
+       width="58.173439"
+       height="84.228279"
+       x="-95.232544"
+       y="32.354633"
+       ry="0.90244579" />
+    <rect
+       style="fill:#923340;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect272434-2"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880974"
+       y="50.421993"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-       x="-88.119713"
-       y="145.76901"
-       id="text2821"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+       x="-84.727898"
+       y="58.101753"
+       id="text272438-6"><tspan
          sodipodi:role="line"
-         id="tspan2819"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-         x="-88.119713"
-         y="145.76901">command1</tspan></text>
-    <rect
-       style="fill:#ececec;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect4643"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="121.70834"
-       ry="0.79374999" />
+         id="tspan272436-6"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+         x="-84.727898"
+         y="58.101753">command1</tspan></text>
+    <rect
+       style="fill:#e1b0ab;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect272440-4"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="39.18755"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-       x="-88.119713"
-       y="129.40845"
-       id="text4647"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-84.76268"
+       y="45.858795"
+       id="text272444-9"><tspan
          sodipodi:role="line"
-         id="tspan4645"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-         x="-88.119713"
-         y="129.40845">prepare1</tspan></text>
-    <rect
-       style="fill:#010101;fill-opacity:1;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect6456"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="95.249985"
-       ry="0.79374999" />
+         id="tspan272442-5"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-84.76268"
+         y="45.858795">prepare1</tspan></text>
+    <text
+       xml:space="preserve"
+       transform="matrix(0.26458333,0,0,0.26458333,-323.88102,12.964581)"
+       id="text13"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';white-space:pre;shape-inside:url(#rect13);display:inline;fill:#ffffff;fill-opacity:1;stroke-width:1.75748;stroke-dasharray:none" />
+    <text
+       xml:space="preserve"
+       transform="matrix(0.26458333,0,0,0.26458333,-323.88102,12.964581)"
+       id="text14"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';white-space:pre;shape-inside:url(#rect14);display:inline;fill:#ffffff;fill-opacity:1;stroke-width:1.75748;stroke-dasharray:none" />
+    <rect
+       style="fill:#e1abcc;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect1"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="61.656441"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-       x="-88.119713"
-       y="103.43568"
-       id="text6460"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-87.04631"
+       y="69.336189"
+       id="text4"><tspan
          sodipodi:role="line"
-         id="tspan6458"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-         x="-88.119713"
-         y="103.43568">command1</tspan></text>
-    <rect
-       style="fill:#ececec;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect6462"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="79.375"
-       ry="0.79374999" />
+         id="tspan4"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-87.04631"
+         y="69.336189">conclude1</tspan></text>
+    <rect
+       style="fill:#923340;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect6"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880974"
+       y="88.65126"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-       x="-88.119713"
-       y="87.075104"
-       id="text6466"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+       x="-84.727898"
+       y="96.331017"
+       id="text11"><tspan
          sodipodi:role="line"
-         id="tspan6464"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-         x="-88.119713"
-         y="87.075104">prepare1</tspan></text>
-    <rect
-       style="fill:#010101;fill-opacity:1;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect6567"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="58.208324"
-       ry="0.79374999" />
+         id="tspan11"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+         x="-84.727898"
+         y="96.331017">command1</tspan></text>
+    <rect
+       style="fill:#e1b0ab;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect11"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="77.416817"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-       x="-88.119713"
-       y="66.39402"
-       id="text6571"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-84.76268"
+       y="84.088058"
+       id="text12"><tspan
          sodipodi:role="line"
-         id="tspan6569"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-         x="-88.119713"
-         y="66.39402">command1</tspan></text>
-    <rect
-       style="fill:#ececec;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect6573"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="42.333336"
-       ry="0.79374999" />
+         id="tspan12"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-84.76268"
+         y="84.088058">prepare1</tspan></text>
+    <rect
+       style="fill:#e1abcc;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect12"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="99.885681"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-       x="-88.119713"
-       y="50.03344"
-       id="text6577"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-87.04631"
+       y="107.56544"
+       id="text16"><tspan
          sodipodi:role="line"
-         id="tspan6575"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-         x="-88.119713"
-         y="50.03344">prepare1</tspan></text>
+         id="tspan16"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-87.04631"
+         y="107.56544">conclude1</tspan></text>
+    <rect
+       style="fill:#923340;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect25"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880974"
+       y="135.45992"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.76603px;line-height:1;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#e35a00;fill-opacity:1;stroke-width:0.264583"
-       x="-29.380138"
-       y="76.524841"
-       id="text7364"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+       x="-84.727898"
+       y="143.13966"
+       id="text25"><tspan
          sodipodi:role="line"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.76603px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#e35a00;fill-opacity:1;stroke-width:0.264583"
-         x="-29.380138"
-         y="76.524841"
-         id="tspan20001">2 warmup runs</tspan></text>
+         id="tspan25"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+         x="-84.727898"
+         y="143.13966">command1</tspan></text>
+    <rect
+       style="fill:#e1b0ab;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect26"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="124.22549"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.76603px;line-height:1;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';white-space:pre;inline-size:105.635;fill:#00bbeb;fill-opacity:1;stroke-width:0.264583"
-       x="-16.304935"
-       y="161.32399"
-       id="text12858"
-       transform="translate(-13.033123,14.34874)"><tspan
-         x="-16.304935"
-         y="161.32399"
-         id="tspan1506">3 benchmark runs</tspan></text>
-    <rect
-       style="fill:#b3b3b3;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect13386"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="21.166664"
-       ry="0.79374999" />
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-84.76268"
+       y="130.89671"
+       id="text26"><tspan
+         sodipodi:role="line"
+         id="tspan26"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-84.76268"
+         y="130.89671">prepare1</tspan></text>
+    <rect
+       style="fill:#e1abcc;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect27"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="146.69435"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-       x="-88.119713"
-       y="29.352339"
-       id="text13390"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-87.04631"
+       y="154.37411"
+       id="text27"><tspan
          sodipodi:role="line"
-         id="tspan13388"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-         x="-88.119713"
-         y="29.352339">setup</tspan></text>
-    <rect
-       style="fill:#b3b3b3;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect37849"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="232.83333"
-       ry="0.79374999" />
+         id="tspan27"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-87.04631"
+         y="154.37411">conclude1</tspan></text>
+    <rect
+       style="fill:#923340;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect28"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880974"
+       y="172.76315"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-       x="-88.119713"
-       y="241.019"
-       id="text37853"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+       x="-84.727898"
+       y="180.4429"
+       id="text28"><tspan
          sodipodi:role="line"
-         id="tspan37851"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-         x="-88.119713"
-         y="241.019">cleanup</tspan></text>
-    <rect
-       style="fill:#010101;fill-opacity:1;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect38128"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="174.62498"
-       ry="0.79374999" />
+         id="tspan28"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+         x="-84.727898"
+         y="180.4429">command1</tspan></text>
+    <rect
+       style="fill:#e1b0ab;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect29"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="161.5287"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-       x="-88.119713"
-       y="182.81067"
-       id="text38132"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-84.76268"
+       y="168.19995"
+       id="text29"><tspan
          sodipodi:role="line"
-         id="tspan38130"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-         x="-88.119713"
-         y="182.81067">command1</tspan></text>
-    <rect
-       style="fill:#ececec;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect38134"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="158.75"
-       ry="0.79374999" />
+         id="tspan29"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-84.76268"
+         y="168.19995">prepare1</tspan></text>
+    <rect
+       style="fill:#e1abcc;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect30"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="183.99759"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-       x="-88.119713"
-       y="166.4501"
-       id="text38138"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-87.04631"
+       y="191.67734"
+       id="text30"><tspan
          sodipodi:role="line"
-         id="tspan38136"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-         x="-88.119713"
-         y="166.4501">prepare1</tspan></text>
-    <rect
-       style="fill:#010101;fill-opacity:1;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect38140"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="211.66666"
-       ry="0.79374999" />
+         id="tspan30"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-87.04631"
+         y="191.67734">conclude1</tspan></text>
+    <rect
+       style="fill:#923340;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect31"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880974"
+       y="209.56593"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-       x="-88.119713"
-       y="219.85234"
-       id="text38144"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+       x="-84.727898"
+       y="217.2457"
+       id="text31"><tspan
          sodipodi:role="line"
-         id="tspan38142"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-         x="-88.119713"
-         y="219.85234">command1</tspan></text>
-    <rect
-       style="fill:#ececec;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect38146"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="195.79167"
-       ry="0.79374999" />
+         id="tspan31"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+         x="-84.727898"
+         y="217.2457">command1</tspan></text>
+    <rect
+       style="fill:#e1b0ab;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect32"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="198.3315"
+       ry="0.72450507" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-84.76268"
+       y="205.00273"
+       id="text32"><tspan
+         sodipodi:role="line"
+         id="tspan32"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-84.76268"
+         y="205.00273">prepare1</tspan></text>
+    <rect
+       style="fill:#e1abcc;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect33"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="220.80038"
+       ry="0.72450507" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-87.04631"
+       y="228.48013"
+       id="text33"><tspan
+         sodipodi:role="line"
+         id="tspan33"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-87.04631"
+         y="228.48013">conclude1</tspan></text>
+    <rect
+       style="fill:#b3b3b3;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect34"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="240.13783"
+       ry="0.72450507" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-82.444275"
+       y="247.00227"
+       id="text34"><tspan
+         sodipodi:role="line"
+         id="tspan34"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-82.444275"
+         y="247.00227">cleanup</tspan></text>
+    <rect
+       style="fill:#b3b3b3;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect35"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="261.07349"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-       x="-88.119713"
-       y="203.49178"
-       id="text38150"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-77.737892"
+       y="267.61914"
+       id="text35"><tspan
          sodipodi:role="line"
-         id="tspan38148"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-         x="-88.119713"
-         y="203.49178">prepare1</tspan></text>
+         id="tspan35"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-77.737892"
+         y="267.61914">setup</tspan></text>
+    <rect
+       style="fill:#b3b3b3;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect36"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="16.718643"
+       ry="0.72450507" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-77.737892"
+       y="23.264297"
+       id="text36"><tspan
+         sodipodi:role="line"
+         id="tspan36"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-77.737892"
+         y="23.264297">setup</tspan></text>
     <rect
-       style="fill:#80e5ff;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect272406"
+       style="fill:#e4e4e4;fill-opacity:1;stroke:#00bbeb;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect37"
        width="58.208336"
-       height="111.12499"
-       x="-95.249992"
-       y="359.83334"
-       ry="0.79374999" />
-    <rect
-       style="fill:#ffb380;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect272408"
-       width="58.20834"
-       height="74.083336"
+       height="115.26278"
        x="-95.249992"
-       y="280.45834"
+       y="362.19525"
        ry="0.79374999" />
     <rect
-       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect272410"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="381"
-       ry="0.79374999" />
+       style="fill:#e4e4e4;fill-opacity:1;stroke:#e35a00;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect38"
+       width="58.173439"
+       height="84.228279"
+       x="-95.232544"
+       y="273.61163"
+       ry="0.90244579" />
+    <rect
+       style="fill:#286f50;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect39"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880974"
+       y="291.67899"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-       x="-88.119713"
-       y="389.18567"
-       id="text272414"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+       x="-84.727898"
+       y="299.35873"
+       id="text39"><tspan
          sodipodi:role="line"
-         id="tspan272412"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-         x="-88.119713"
-         y="389.18567">command2</tspan></text>
-    <rect
-       style="fill:#ececec;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect272416"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="365.125"
-       ry="0.79374999" />
+         id="tspan39"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+         x="-84.727898"
+         y="299.35873">command2</tspan></text>
+    <rect
+       style="fill:#abe1d8;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect40"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="280.44455"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-       x="-88.119713"
-       y="372.8251"
-       id="text272420"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-84.76268"
+       y="287.11578"
+       id="text40"><tspan
          sodipodi:role="line"
-         id="tspan272418"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-         x="-88.119713"
-         y="372.8251">prepare2</tspan></text>
-    <rect
-       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect272422"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="338.66666"
-       ry="0.79374999" />
+         id="tspan40"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-84.76268"
+         y="287.11578">prepare2</tspan></text>
+    <rect
+       style="fill:#abe1ac;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect41"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="302.91345"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-       x="-88.119713"
-       y="346.85236"
-       id="text272426"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-87.04631"
+       y="310.5932"
+       id="text41"><tspan
          sodipodi:role="line"
-         id="tspan272424"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-         x="-88.119713"
-         y="346.85236">command2</tspan></text>
-    <rect
-       style="fill:#ececec;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect272428"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="322.79166"
-       ry="0.79374999" />
+         id="tspan41"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-87.04631"
+         y="310.5932">conclude2</tspan></text>
+    <rect
+       style="fill:#286f50;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect42"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880974"
+       y="329.90826"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-       x="-88.119713"
-       y="330.49176"
-       id="text272432"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+       x="-84.727898"
+       y="337.58801"
+       id="text42"><tspan
          sodipodi:role="line"
-         id="tspan272430"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-         x="-88.119713"
-         y="330.49176">prepare2</tspan></text>
-    <rect
-       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect272434"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="301.625"
-       ry="0.79374999" />
+         id="tspan42"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+         x="-84.727898"
+         y="337.58801">command2</tspan></text>
+    <rect
+       style="fill:#abe1d8;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect43"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="318.6738"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-       x="-88.119713"
-       y="309.8107"
-       id="text272438"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-84.76268"
+       y="325.34506"
+       id="text43"><tspan
          sodipodi:role="line"
-         id="tspan272436"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-         x="-88.119713"
-         y="309.8107">command2</tspan></text>
-    <rect
-       style="fill:#ececec;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect272440"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="285.75"
-       ry="0.79374999" />
+         id="tspan43"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-84.76268"
+         y="325.34506">prepare2</tspan></text>
+    <rect
+       style="fill:#abe1ac;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect44"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="341.1427"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-       x="-88.119713"
-       y="293.4501"
-       id="text272444"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-87.04631"
+       y="348.82245"
+       id="text44"><tspan
          sodipodi:role="line"
-         id="tspan272442"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-         x="-88.119713"
-         y="293.4501">prepare2</tspan></text>
+         id="tspan44"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-87.04631"
+         y="348.82245">conclude2</tspan></text>
+    <rect
+       style="fill:#286f50;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect45"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880974"
+       y="376.71692"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.76603px;line-height:1;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#e35a00;fill-opacity:1;stroke-width:0.264583"
-       x="-29.380138"
-       y="319.9415"
-       id="text272448"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+       x="-84.727898"
+       y="384.39667"
+       id="text45"><tspan
          sodipodi:role="line"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.76603px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#e35a00;fill-opacity:1;stroke-width:0.264583"
-         x="-29.380138"
-         y="319.9415"
-         id="tspan272446">2 warmup runs</tspan></text>
+         id="tspan45"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+         x="-84.727898"
+         y="384.39667">command2</tspan></text>
+    <rect
+       style="fill:#abe1d8;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect46"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="365.48248"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.76603px;line-height:1;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';white-space:pre;inline-size:105.635;fill:#00bbeb;fill-opacity:1;stroke-width:0.264583"
-       x="-16.304935"
-       y="161.32399"
-       id="text272452"
-       transform="translate(-13.033123,257.76541)"><tspan
-         x="-16.304935"
-         y="161.32399"
-         id="tspan1508">3 benchmark runs</tspan></text>
-    <rect
-       style="fill:#b3b3b3;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect272454"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="264.58334"
-       ry="0.79374999" />
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-84.76268"
+       y="372.15372"
+       id="text46"><tspan
+         sodipodi:role="line"
+         id="tspan46"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-84.76268"
+         y="372.15372">prepare2</tspan></text>
+    <rect
+       style="fill:#abe1ac;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect47"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="387.95135"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-       x="-88.119713"
-       y="272.76901"
-       id="text272458"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-87.04631"
+       y="395.6311"
+       id="text47"><tspan
          sodipodi:role="line"
-         id="tspan272456"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-         x="-88.119713"
-         y="272.76901">setup</tspan></text>
-    <rect
-       style="fill:#b3b3b3;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect272460"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="476.25"
-       ry="0.79374999" />
+         id="tspan47"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-87.04631"
+         y="395.6311">conclude2</tspan></text>
+    <rect
+       style="fill:#286f50;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect48"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880974"
+       y="414.02014"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-       x="-88.119713"
-       y="484.43567"
-       id="text272464"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+       x="-84.727898"
+       y="421.69989"
+       id="text48"><tspan
          sodipodi:role="line"
-         id="tspan272462"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-         x="-88.119713"
-         y="484.43567">cleanup</tspan></text>
-    <rect
-       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect272466"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="418.04166"
-       ry="0.79374999" />
+         id="tspan48"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+         x="-84.727898"
+         y="421.69989">command2</tspan></text>
+    <rect
+       style="fill:#abe1d8;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect49"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="402.78571"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-       x="-88.119713"
-       y="426.22733"
-       id="text272470"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-84.76268"
+       y="409.45694"
+       id="text49"><tspan
          sodipodi:role="line"
-         id="tspan272468"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-         x="-88.119713"
-         y="426.22733">command2</tspan></text>
-    <rect
-       style="fill:#ececec;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect272472"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="402.16666"
-       ry="0.79374999" />
+         id="tspan49"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-84.76268"
+         y="409.45694">prepare2</tspan></text>
+    <rect
+       style="fill:#abe1ac;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect50"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="425.25458"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-       x="-88.119713"
-       y="409.86676"
-       id="text272476"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-87.04631"
+       y="432.93433"
+       id="text50"><tspan
          sodipodi:role="line"
-         id="tspan272474"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-         x="-88.119713"
-         y="409.86676">prepare2</tspan></text>
-    <rect
-       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect272478"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="455.08331"
-       ry="0.79374999" />
+         id="tspan50"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-87.04631"
+         y="432.93433">conclude2</tspan></text>
+    <rect
+       style="fill:#286f50;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect51"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880974"
+       y="450.82294"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-       x="-88.119713"
-       y="463.26901"
-       id="text272482"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+       x="-84.727898"
+       y="458.50269"
+       id="text51"><tspan
          sodipodi:role="line"
-         id="tspan272480"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.173299"
-         x="-88.119713"
-         y="463.26901">command2</tspan></text>
-    <rect
-       style="fill:#ececec;stroke:#000000;stroke-width:0.529167;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
-       id="rect272484"
-       width="47.625"
-       height="10.583333"
-       x="-89.958328"
-       y="439.20834"
-       ry="0.79374999" />
+         id="tspan51"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';fill:#ffffff;stroke-width:0.564;stroke-dasharray:none"
+         x="-84.727898"
+         y="458.50269">command2</tspan></text>
+    <rect
+       style="fill:#abe1d8;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect52"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="439.5885"
+       ry="0.72450507" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-84.76268"
+       y="446.25974"
+       id="text52"><tspan
+         sodipodi:role="line"
+         id="tspan52"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-84.76268"
+         y="446.25974">prepare2</tspan></text>
+    <rect
+       style="fill:#abe1ac;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect53"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="462.05737"
+       ry="0.72450507" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-87.04631"
+       y="469.73712"
+       id="text53"><tspan
+         sodipodi:role="line"
+         id="tspan53"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-87.04631"
+         y="469.73712">conclude2</tspan></text>
+    <rect
+       style="fill:#b3b3b3;fill-opacity:1;stroke:#000000;stroke-width:0.564;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.80126;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect54"
+       width="43.470306"
+       height="9.6600676"
+       x="-87.880981"
+       y="481.39484"
+       ry="0.72450507" />
     <text
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-       x="-88.119713"
-       y="446.90845"
-       id="text272488"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;line-height:0;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+       x="-82.444275"
+       y="488.25928"
+       id="text54"><tspan
          sodipodi:role="line"
-         id="tspan272486"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.81944px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.173299"
-         x="-88.119713"
-         y="446.90845">prepare2</tspan></text>
+         id="tspan54"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.72806px;font-family:'Fira Code';-inkscape-font-specification:'Fira Code';stroke-width:0.564;stroke-dasharray:none"
+         x="-82.444275"
+         y="488.25928">cleanup</tspan></text>
   </g>
 </svg>
diff --git a/doc/hyperfine.1 b/doc/hyperfine.1
index 862430d73..73f8e20f4 100644
--- a/doc/hyperfine.1
+++ b/doc/hyperfine.1
@@ -16,6 +16,8 @@ hyperfine \- command\-line benchmarking tool
 .IR CMD ]
 .RB [ \-\-prepare
 .IR CMD ]
+.RB [ \-\-conclude
+.IR CMD ]
 .RB [ \-\-cleanup
 .IR CMD ]
 .RB [ \-\-parameter\-scan
@@ -115,11 +117,20 @@ The \fB\-\-prepare\fR option can be specified once for all commands or multiple
 once for each command. In the latter case, each preparation command will be
 run prior to the corresponding benchmark command.
 .HP
+.IP
+Execute \fICMD\fP after each timing run. This is useful for clearing disk caches,
+for example.
+The \fB\-\-conclude\fR option can be specified once for all commands or multiple times,
+once for each command. In the latter case, each conclusion command will be
+run after the corresponding benchmark command.
+.HP
 \fB\-c\fR, \fB\-\-cleanup\fR \fICMD...\fP
 .IP
 Execute \fICMD\fP after the completion of all benchmarking runs for each individual
 command to be benchmarked. This is useful if the commands to be benchmarked
-produce artifacts that need to be cleaned up.
+produce artifacts that need to be cleaned up. It only runs once a series of
+benchmark runs, as opposed to \fB\-\-conclude\fR option which runs after
+ever run.
 .HP
 \fB\-P\fR, \fB\-\-parameter\-scan\fR \fIVAR\fP \fIMIN\fP \fIMAX\fP
 .IP
@@ -335,12 +346,13 @@ Export the results of a parameter scan benchmark to a markdown table:
 .fi
 .RE
 .LP
-Demonstrate when each of \fB\-\-setup\fR, \fB\-\-prepare\fR, \fIcmd\fP and \fB\-\-cleanup\fR will run:
+Demonstrate when each of \fB\-\-setup\fR, \fB\-\-prepare\fR, \fB\-\-conclude\fR, \fIcmd\fP and \fB\-\-cleanup\fR will run:
 .RS
 .nf
 \fBhyperfine\fR \fB\-L\fR n 1,2 \fB\-r\fR 2 \fB\-\-show-output\fR \\
 	\fB\-\-setup\fR 'echo setup n={n}' \\
 	\fB\-\-prepare\fR 'echo prepare={n}' \\
+	\fB\-\-conclude\fR 'echo conclude={n}' \\
 	\fB\-\-cleanup\fR 'echo cleanup n={n}' \\
 	'echo command n={n}'
 .fi
diff --git a/src/benchmark/mod.rs b/src/benchmark/mod.rs
index 0699f7d93..658494d93 100644
--- a/src/benchmark/mod.rs
+++ b/src/benchmark/mod.rs
@@ -110,6 +110,14 @@ impl<'a> Benchmark<'a> {
         self.run_intermediate_command(command, error_output)
     }
 
+    /// Run the command specified by `--conclude`.
+    fn run_conclusion_command(&self, command: &Command<'_>) -> Result<TimingResult> {
+        let error_output = "The conclusion command terminated with a non-zero exit code. \
+                            Append ' || true' to the command if you are sure that this can be ignored.";
+
+        self.run_intermediate_command(command, error_output)
+    }
+
     /// Run the benchmark for a single command
     pub fn run(&self) -> Result<BenchmarkResult> {
         if self.options.output_style != OutputStyleOption::Disabled {
@@ -146,6 +154,25 @@ impl<'a> Benchmark<'a> {
                 .transpose()
         };
 
+        let conclusion_command = self.options.conclusion_command.as_ref().map(|values| {
+            let conclusion_command = if values.len() == 1 {
+                &values[0]
+            } else {
+                &values[self.number]
+            };
+            Command::new_parametrized(
+                None,
+                conclusion_command,
+                self.command.get_parameters().iter().cloned(),
+            )
+        });
+        let run_conclusion_command = || {
+            conclusion_command
+                .as_ref()
+                .map(|cmd| self.run_conclusion_command(cmd))
+                .transpose()
+        };
+
         self.run_setup_command(self.command.get_parameters().iter().cloned())?;
 
         // Warmup phase
@@ -163,6 +190,7 @@ impl<'a> Benchmark<'a> {
             for _ in 0..self.options.warmup_count {
                 let _ = run_preparation_command()?;
                 let _ = self.executor.run_command_and_measure(self.command, None)?;
+                let _ = run_conclusion_command()?;
                 if let Some(bar) = progress_bar.as_ref() {
                     bar.inc(1)
                 }
@@ -191,10 +219,16 @@ impl<'a> Benchmark<'a> {
         let (res, status) = self.executor.run_command_and_measure(self.command, None)?;
         let success = status.success();
 
+        let conclusion_result = run_conclusion_command()?;
+        let conclusion_overhead =
+            conclusion_result.map_or(0.0, |res| res.time_real + self.executor.time_overhead());
+
         // Determine number of benchmark runs
         let runs_in_min_time = (self.options.min_benchmarking_time
-            / (res.time_real + self.executor.time_overhead() + preparation_overhead))
-            as u64;
+            / (res.time_real
+                + self.executor.time_overhead()
+                + preparation_overhead
+                + conclusion_overhead)) as u64;
 
         let count = {
             let min = cmp::max(runs_in_min_time, self.options.run_bounds.min);
@@ -251,6 +285,8 @@ impl<'a> Benchmark<'a> {
             if let Some(bar) = progress_bar.as_ref() {
                 bar.inc(1)
             }
+
+            run_conclusion_command()?;
         }
 
         if let Some(bar) = progress_bar.as_ref() {
diff --git a/src/cli.rs b/src/cli.rs
index a3c0c7e0c..cc924cbae 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -102,6 +102,23 @@ fn build_command() -> Command {
                      be run prior to the corresponding benchmark command.",
                 ),
         )
+        .arg(
+            Arg::new("conclude")
+                .long("conclude")
+                .short('C')
+                .action(ArgAction::Append)
+                .num_args(1)
+                .value_name("CMD")
+                .value_hint(ValueHint::CommandString)
+                .help(
+                    "Execute CMD after each timing run. This is useful for killing \
+                     long-running processes started (e.g. a web server started in --prepare), \
+                     for example.\nThe --conclude option can be specified once for all \
+                     commands or multiple times, once for each command. In the latter case, \
+                     each conclude command will be run after the corresponding benchmark \
+                     command.",
+                ),
+        )
         .arg(
             Arg::new("cleanup")
                 .long("cleanup")
diff --git a/src/options.rs b/src/options.rs
index 2f83889d4..43bb82bc6 100644
--- a/src/options.rs
+++ b/src/options.rs
@@ -207,6 +207,9 @@ pub struct Options {
     /// Command(s) to run before each timing run
     pub preparation_command: Option<Vec<String>>,
 
+    /// Command(s) to run after each timing run
+    pub conclusion_command: Option<Vec<String>>,
+
     /// Command to run before each *batch* of timing runs, i.e. before each individual benchmark
     pub setup_command: Option<String>,
 
@@ -243,6 +246,7 @@ impl Default for Options {
             min_benchmarking_time: 3.0,
             command_failure_action: CmdFailureAction::RaiseError,
             preparation_command: None,
+            conclusion_command: None,
             setup_command: None,
             cleanup_command: None,
             output_style: OutputStyleOption::Full,
@@ -304,6 +308,10 @@ impl Options {
             .get_many::<String>("prepare")
             .map(|values| values.map(String::from).collect::<Vec<String>>());
 
+        options.conclusion_command = matches
+            .get_many::<String>("conclude")
+            .map(|values| values.map(String::from).collect::<Vec<String>>());
+
         options.cleanup_command = matches.get_one::<String>("cleanup").map(String::from);
 
         options.command_output_policy = if matches.get_flag("show-output") {
@@ -432,6 +440,15 @@ impl Options {
             );
         }
 
+        if let Some(conclusion_command) = &self.conclusion_command {
+            ensure!(
+                conclusion_command.len() <= 1
+                    || commands.num_commands() == conclusion_command.len(),
+                "The '--conclude' option has to be provided just once or N times, where N is the \
+             number of benchmark commands."
+            );
+        }
+
         Ok(())
     }
 }


Test patch:
diff --git a/tests/execution_order_tests.rs b/tests/execution_order_tests.rs
index fbbfe4eee..540415760 100644
--- a/tests/execution_order_tests.rs
+++ b/tests/execution_order_tests.rs
@@ -54,6 +54,11 @@ impl ExecutionOrderTest {
         self.command(output)
     }
 
+    fn conclude(&mut self, output: &str) -> &mut Self {
+        self.arg("--conclude");
+        self.command(output)
+    }
+
     fn cleanup(&mut self, output: &str) -> &mut Self {
         self.arg("--cleanup");
         self.command(output)
@@ -160,6 +165,24 @@ fn prepare_commands_are_executed_before_each_timing_run() {
         .run();
 }
 
+#[test]
+fn conclude_commands_are_executed_after_each_timing_run() {
+    ExecutionOrderTest::new()
+        .arg("--runs=2")
+        .conclude("conclude")
+        .command("command 1")
+        .command("command 2")
+        .expect_output("command 1")
+        .expect_output("conclude")
+        .expect_output("command 1")
+        .expect_output("conclude")
+        .expect_output("command 2")
+        .expect_output("conclude")
+        .expect_output("command 2")
+        .expect_output("conclude")
+        .run();
+}
+
 #[test]
 fn prepare_commands_are_executed_before_each_warmup() {
     ExecutionOrderTest::new()
@@ -187,6 +210,33 @@ fn prepare_commands_are_executed_before_each_warmup() {
         .run();
 }
 
+#[test]
+fn conclude_commands_are_executed_after_each_warmup() {
+    ExecutionOrderTest::new()
+        .arg("--warmup=2")
+        .arg("--runs=1")
+        .conclude("conclude")
+        .command("command 1")
+        .command("command 2")
+        // warmup 1
+        .expect_output("command 1")
+        .expect_output("conclude")
+        .expect_output("command 1")
+        .expect_output("conclude")
+        // benchmark 1
+        .expect_output("command 1")
+        .expect_output("conclude")
+        // warmup 2
+        .expect_output("command 2")
+        .expect_output("conclude")
+        .expect_output("command 2")
+        .expect_output("conclude")
+        // benchmark 2
+        .expect_output("command 2")
+        .expect_output("conclude")
+        .run();
+}
+
 #[test]
 fn cleanup_commands_are_executed_once_after_each_benchmark() {
     ExecutionOrderTest::new()
@@ -234,6 +284,44 @@ fn setup_prepare_cleanup_combined() {
         .run();
 }
 
+#[test]
+fn setup_prepare_conclude_cleanup_combined() {
+    ExecutionOrderTest::new()
+        .arg("--warmup=1")
+        .arg("--runs=2")
+        .setup("setup")
+        .prepare("prepare")
+        .command("command1")
+        .command("command2")
+        .conclude("conclude")
+        .cleanup("cleanup")
+        // 1
+        .expect_output("setup")
+        .expect_output("prepare")
+        .expect_output("command1")
+        .expect_output("conclude")
+        .expect_output("prepare")
+        .expect_output("command1")
+        .expect_output("conclude")
+        .expect_output("prepare")
+        .expect_output("command1")
+        .expect_output("conclude")
+        .expect_output("cleanup")
+        // 2
+        .expect_output("setup")
+        .expect_output("prepare")
+        .expect_output("command2")
+        .expect_output("conclude")
+        .expect_output("prepare")
+        .expect_output("command2")
+        .expect_output("conclude")
+        .expect_output("prepare")
+        .expect_output("command2")
+        .expect_output("conclude")
+        .expect_output("cleanup")
+        .run();
+}
+
 #[test]
 fn single_parameter_value() {
     ExecutionOrderTest::new()
diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs
index 0c8dbf0c8..2bbde41bf 100644
--- a/tests/integration_tests.rs
+++ b/tests/integration_tests.rs
@@ -75,6 +75,31 @@ fn fails_with_wrong_number_of_prepare_options() {
         ));
 }
 
+#[test]
+fn fails_with_wrong_number_of_conclude_options() {
+    hyperfine()
+        .arg("--runs=1")
+        .arg("--conclude=echo a")
+        .arg("--conclude=echo b")
+        .arg("echo a")
+        .arg("echo b")
+        .assert()
+        .success();
+
+    hyperfine()
+        .arg("--runs=1")
+        .arg("--conclude=echo a")
+        .arg("--conclude=echo b")
+        .arg("echo a")
+        .arg("echo b")
+        .arg("echo c")
+        .assert()
+        .failure()
+        .stderr(predicate::str::contains(
+            "The '--conclude' option has to be provided",
+        ));
+}
+
 #[test]
 fn fails_with_duplicate_parameter_names() {
     hyperfine()
@@ -167,6 +192,18 @@ fn fails_for_unknown_prepare_command() {
         ));
 }
 
+#[test]
+fn fails_for_unknown_conclude_command() {
+    hyperfine()
+        .arg("--conclude=some-nonexisting-program-b5d9574198b7e4b12a71fa4747c0a577")
+        .arg("echo test")
+        .assert()
+        .failure()
+        .stderr(predicate::str::contains(
+            "The conclusion command terminated with a non-zero exit code.",
+        ));
+}
+
 #[cfg(unix)]
 #[test]
 fn can_run_failing_commands_with_ignore_failure_option() {
@@ -320,6 +357,48 @@ fn takes_preparation_command_into_account_for_computing_number_of_runs() {
         .stdout(predicate::str::contains("30 runs"));
 }
 
+#[test]
+fn takes_conclusion_command_into_account_for_computing_number_of_runs() {
+    hyperfine_debug()
+        .arg("--conclude=sleep 0.02")
+        .arg("sleep 0.01")
+        .assert()
+        .success()
+        .stdout(predicate::str::contains("100 runs"));
+
+    // Shell overhead needs to be added to both the conclude command and the actual command,
+    // leading to a total benchmark time of (cmd + shell + conclude + shell = 0.1 s)
+    hyperfine_debug()
+        .arg("--shell=sleep 0.01")
+        .arg("--conclude=sleep 0.03")
+        .arg("sleep 0.05")
+        .assert()
+        .success()
+        .stdout(predicate::str::contains("30 runs"));
+}
+
+#[test]
+fn takes_both_preparation_and_conclusion_command_into_account_for_computing_number_of_runs() {
+    hyperfine_debug()
+        .arg("--prepare=sleep 0.01")
+        .arg("--conclude=sleep 0.01")
+        .arg("sleep 0.01")
+        .assert()
+        .success()
+        .stdout(predicate::str::contains("100 runs"));
+
+    // Shell overhead needs to be added to both the prepare, conclude and the actual command,
+    // leading to a total benchmark time of (prepare + shell + cmd + shell + conclude + shell = 0.1 s)
+    hyperfine_debug()
+        .arg("--shell=sleep 0.01")
+        .arg("--prepare=sleep 0.01")
+        .arg("--conclude=sleep 0.01")
+        .arg("sleep 0.05")
+        .assert()
+        .success()
+        .stdout(predicate::str::contains("30 runs"));
+}
+
 #[test]
 fn shows_benchmark_comparison_with_relative_times() {
     hyperfine_debug()