Skip to content

Commit

Permalink
chore: update results
Browse files Browse the repository at this point in the history
  • Loading branch information
abeimler committed Jul 29, 2023
1 parent 5a32ddb commit 520efdc
Show file tree
Hide file tree
Showing 77 changed files with 8,735 additions and 8,890 deletions.
361 changes: 165 additions & 196 deletions README.md

Large diffs are not rendered by default.

21 changes: 5 additions & 16 deletions README.md.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ Benchmarks of more common features, like "Creating entities", "Add and remove co
{{{DestroyEntities}}}


### Get one (non-const) component from Entity
### Get one component from Entity

{{{UnpackOneComponent}}}

Expand All @@ -98,15 +98,6 @@ Benchmarks of more common features, like "Creating entities", "Add and remove co
1. `PositionComponent`


### Get one (const) component from Entity

{{{UnpackOneComponentConst}}}

**Note:**
* Get one const component
1. `const PositionComponent`


### Get two components from entity

{{{UnpackTwoComponents}}}
Expand Down Expand Up @@ -229,6 +220,10 @@ You can now find the benchmark-results in [`reports/`](reports/).

_You need python (>=3.9.0) and some [dependencies](scripts/gen-benchmark-report/requirements.txt) to run [gen-benchmark-report](scripts/gen-benchmark-report) (plotting)_

```bash
pip install -r ./scripts/gen-benchmark-report/requirements.txt
```

### ~~Step-by-Step~~

1. Configure and build benchmarks, see [Building Details](doc/README_building.md):
Expand Down Expand Up @@ -268,9 +263,3 @@ Version: {{version}}
{{/version}}

{{/candidates}}


#### _Deprecated_

I removed [anax](https://github.com/miguelmartin75/anax) and [Artemis-Cpp](https://github.com/matachi/Artemis-Cpp), they are out-of-date and didn't receive any updates in the last time.
You can still checkout the old versions and branches.
2 changes: 1 addition & 1 deletion img/ComplexSystemsUpdate.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/ComplexSystemsUpdateMixedEntities.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/ComplexSystemsUpdateNoEntities.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/CreateEmptyEntities.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/CreateEmptyEntitiesInBulk.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/CreateEntities.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/CreateEntitiesInBulk.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/CreateNoEntities.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/DestroyEntities.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/DestroyEntitiesInBulk.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/IterateThreeComponentsWithMixedEntities.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/IterateTwoComponents.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/RemoveAddComponent.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/SystemsUpdate.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/SystemsUpdateMixedEntities.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/SystemsUpdateNoEntities.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/UnpackNoComponent.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/UnpackOneComponent.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/UnpackOneComponentNoEntities.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/UnpackThreeComponents.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion img/UnpackTwoComponents.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 9 additions & 15 deletions plot.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,6 @@
"regex": "^BM_(.*_)?UnpackOneComponent_NoEntities$",
"header": "Get component from No Entity"
},
"UnpackOneComponentConst": {
"index": "Get one (const) component in {:>5s} entities",
"title": "Get one (const) component from Entity",
"regex": "^BM_(.*_)?UnpackOneConstComponent\\/[0-9]+$",
"header": "Get one (const) component from Entity"
},
"UnpackOneComponent": {
"index": "Unpack one component in {:>5s} entities",
"title": "Get one component from Entity",
Expand Down Expand Up @@ -169,54 +163,54 @@
"name": "EnTT",
"author": "@skypjack",
"description": "EnTT is a header-only, tiny and easy to use library for game programming and much more written in modern C++.",
"version": "v3.11.1",
"version": "v3.12.2",
"link": "https://github.com/skypjack/entt"
},
"entt (runtime)": {
"name": "EnTT (runtime)",
"author": "@skypjack",
"description": "EnTT is a header-only, tiny and easy to use library for game programming and much more written in modern C++.",
"version": "v3.11.1",
"version": "v3.12.2",
"link": "https://github.com/skypjack/entt",
"skip_candidate": true
},
"entt (group)": {
"name": "EnTT (group)",
"author": "@skypjack",
"description": "EnTT is a header-only, tiny and easy to use library for game programming and much more written in modern C++.",
"version": "v3.11.1",
"version": "v3.12.2",
"link": "https://github.com/skypjack/entt",
"skip_candidate": true
},
"entt (group, non-owning)": {
"name": "EnTT (non-owning group)",
"author": "@skypjack",
"description": "EnTT is a header-only, tiny and easy to use library for game programming and much more written in modern C++.",
"version": "v3.11.1",
"version": "v3.12.2",
"link": "https://github.com/skypjack/entt",
"skip_candidate": true
},
"entt (group, full-owning)": {
"name": "EnTT (full-owning group)",
"author": "@skypjack",
"description": "EnTT is a header-only, tiny and easy to use library for game programming and much more written in modern C++.",
"version": "v3.11.1",
"version": "v3.12.2",
"link": "https://github.com/skypjack/entt",
"skip_candidate": true
},
"entt (group, partial-owning)": {
"name": "EnTT (partial-owning group)",
"author": "@skypjack",
"description": "EnTT is a header-only, tiny and easy to use library for game programming and much more written in modern C++.",
"version": "v3.11.1",
"version": "v3.12.2",
"link": "https://github.com/skypjack/entt",
"skip_candidate": true
},
"entt (stable)": {
"name": "EnTT (stable)",
"author": "@skypjack",
"description": "EnTT is a header-only, tiny and easy to use library for game programming and much more written in modern C++.",
"version": "v3.11.1",
"version": "v3.12.2",
"link": "https://github.com/skypjack/entt",
"skip_candidate": true
},
Expand Down Expand Up @@ -245,14 +239,14 @@
"name": "Flecs",
"author": "@SanderMertens",
"description": "Flecs is a fast and lightweight Entity Component System that lets you build games and simulations with millions of entities.",
"version": "v3.2.1",
"version": "v3.2.4",
"link": "https://github.com/SanderMertens/flecs"
},
"pico_ecs": {
"name": "pico_ecs",
"author": "@empyreanx",
"description": "A collection of cross-platform single header libraries written in C. Pure and simple ECS.",
"version": "v2.0.0 (Apr 2023)",
"version": "2.2 (Mai 2023)",
"link": "https://github.com/empyreanx/pico_headers"
},
"oop": {
Expand Down
85 changes: 49 additions & 36 deletions results/linux-amd-r5/RESULTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,74 +2,87 @@

## TL;DR Results

![Summary SystemsUpdate Plot](img/SystemsUpdate.png)
![Summary SystemsUpdate Plot](img/SystemsUpdate.svg)

_(lower is faster)_

| | EntityX | EnTT | Ginseng | mustache | Flecs | pico_ecs |
|:-------------------------------------|:----------|:---------|:----------|:-----------|:---------|:-----------|
| Update ~16K entities with 2 systems | 1781ns | 1601ns | 1901ns | 67473ns | 2068ns | 1492ns |
| Update ~65K entities with 2 systems | 6986ns | 6028ns | 6889ns | 74531ns | 6202ns | 5926ns |
| Update 262K entities with 2 systems | 27604ns | 24079ns | 27438ns | 89616ns | 22681ns | 23490ns |
| Update ~1M entities with 2 systems | 109156ns | 93349ns | 103881ns | 164338ns | 88204ns | 93159ns |
| Update ~2M entities with 2 systems | 431842ns | 370726ns | 422970ns | 428359ns | 348574ns | 366802ns |
| Update ~16K entities with 2 systems | 1896ns | 1582ns | 1513ns | 10693ns | 3046ns | 1509ns |
| Update ~65K entities with 2 systems | 7021ns | 6370ns | 5972ns | 15035ns | 8567ns | 5931ns |
| Update 262K entities with 2 systems | 27914ns | 24363ns | 23848ns | 31699ns | 28082ns | 23732ns |
| Update ~1M entities with 2 systems | 107835ns | 93592ns | 95078ns | 97670ns | 105934ns | 91998ns |
| Update ~2M entities with 2 systems | 464062ns | 366421ns | 382524ns | 361184ns | 416798ns | 366435ns |

| | EntityX | EnTT | Ginseng | mustache | Flecs | pico_ecs |
|:-------------------------------------|:----------|:-------|:----------|:-----------|:--------|:-----------|
| Update ~16K entities with 2 systems | 1ms | 1ms | 1ms | 1ms | 1ms | 1ms |
| Update ~65K entities with 2 systems | 6ms | 5ms | 6ms | 6ms | 5ms | 5ms |
| Update 262K entities with 2 systems | 27ms | 22ms | 26ms | 23ms | 21ms | 22ms |
| Update ~1M entities with 2 systems | 109ms | 89ms | 104ms | 92ms | 86ms | 89ms |
| Update ~2M entities with 2 systems | 218ms | 179ms | 211ms | 185ms | 174ms | 179ms |
| Update ~65K entities with 2 systems | 7ms | 5ms | 6ms | 5ms | 6ms | 5ms |
| Update 262K entities with 2 systems | 27ms | 25ms | 25ms | 23ms | 25ms | 24ms |
| Update ~1M entities with 2 systems | 113ms | 96ms | 96ms | 92ms | 102ms | 95ms |
| Update ~2M entities with 2 systems | 233ms | 193ms | 196ms | 185ms | 206ms | 191ms |



## Benchmarks

### Update systems (for-each entities in 2 systems) with zero entities

![SystemsUpdateNoEntities Plot](img/SystemsUpdateNoEntities.svg)

_(lower is better)_

| | EntityX | EnTT | Ginseng | mustache | Flecs | pico_ecs |
|:---------------------------------|:----------|:-------|:----------|:-----------|:--------|:-----------|
| Update 0 entities with 2 systems | 36ns | 19ns | 8ns | 298ns | 357ns | 10ns |




### Update systems (for-each entities in 2 systems)

![SystemsUpdate Plot](img/SystemsUpdate.png)
![SystemsUpdate Plot](img/SystemsUpdate.svg)

_(lower is better)_

| | EntityX | EnTT | Ginseng | mustache | Flecs | pico_ecs |
|:-------------------------------------|:----------|:---------|:----------|:-----------|:---------|:-----------|
| Update 16 entities with 2 systems | 1781ns | 1601ns | 1901ns | 67473ns | 2068ns | 1492ns |
| Update 64 entities with 2 systems | 6986ns | 6028ns | 6889ns | 74531ns | 6202ns | 5926ns |
| Update 256 entities with 2 systems | 27604ns | 24079ns | 27438ns | 89616ns | 22681ns | 23490ns |
| Update ~1K entities with 2 systems | 109156ns | 93349ns | 103881ns | 164338ns | 88204ns | 93159ns |
| Update ~4K entities with 2 systems | 431842ns | 370726ns | 422970ns | 428359ns | 348574ns | 366802ns |
| Update 16 entities with 2 systems | 1896ns | 1582ns | 1513ns | 10693ns | 3046ns | 1509ns |
| Update 64 entities with 2 systems | 7021ns | 6370ns | 5972ns | 15035ns | 8567ns | 5931ns |
| Update 256 entities with 2 systems | 27914ns | 24363ns | 23848ns | 31699ns | 28082ns | 23732ns |
| Update ~1K entities with 2 systems | 107835ns | 93592ns | 95078ns | 97670ns | 105934ns | 91998ns |
| Update ~4K entities with 2 systems | 464062ns | 366421ns | 382524ns | 361184ns | 416798ns | 366435ns |

| | EntityX | EnTT | Ginseng | mustache | Flecs | pico_ecs |
|:-------------------------------------|:----------|:-------|:----------|:-----------|:--------|:-----------|
| Update ~16K entities with 2 systems | 1ms | 1ms | 1ms | 1ms | 1ms | 1ms |
| Update ~65K entities with 2 systems | 6ms | 5ms | 6ms | 6ms | 5ms | 5ms |
| Update 262K entities with 2 systems | 27ms | 22ms | 26ms | 23ms | 21ms | 22ms |
| Update ~1M entities with 2 systems | 109ms | 89ms | 104ms | 92ms | 86ms | 89ms |
| Update ~2M entities with 2 systems | 218ms | 179ms | 211ms | 185ms | 174ms | 179ms |
| Update ~65K entities with 2 systems | 7ms | 5ms | 6ms | 5ms | 6ms | 5ms |
| Update 262K entities with 2 systems | 27ms | 25ms | 25ms | 23ms | 25ms | 24ms |
| Update ~1M entities with 2 systems | 113ms | 96ms | 96ms | 92ms | 102ms | 95ms |
| Update ~2M entities with 2 systems | 233ms | 193ms | 196ms | 185ms | 206ms | 191ms |


### Update systems (for-each entities (with mixed components) in 2 systems)

![SystemsUpdateMixedEntities Plot](img/SystemsUpdateMixedEntities.png)
![SystemsUpdateMixedEntities Plot](img/SystemsUpdateMixedEntities.svg)

_(lower is better)_

| | EntityX | EnTT | Ginseng | mustache | Flecs | pico_ecs |
|:-------------------------------------|:----------|:---------|:----------|:-----------|:---------|:-----------|
| Update 16 entities with 2 systems | 1542ns | 1347ns | 1682ns | 69758ns | 2006ns | 1055ns |
| Update 64 entities with 2 systems | 6385ns | 5531ns | 6620ns | 76723ns | 5895ns | 4171ns |
| Update 256 entities with 2 systems | 27578ns | 23531ns | 27584ns | 93017ns | 22738ns | 23526ns |
| Update ~1K entities with 2 systems | 108889ns | 92464ns | 105542ns | 176507ns | 88207ns | 92361ns |
| Update ~4K entities with 2 systems | 430554ns | 362892ns | 421684ns | 539253ns | 352383ns | 362030ns |
| Update 16 entities with 2 systems | 1741ns | 1382ns | 1314ns | 12076ns | 2901ns | 1082ns |
| Update 64 entities with 2 systems | 7357ns | 5892ns | 5498ns | 15774ns | 7967ns | 4392ns |
| Update 256 entities with 2 systems | 27980ns | 24349ns | 23812ns | 32926ns | 28531ns | 24260ns |
| Update ~1K entities with 2 systems | 112417ns | 94608ns | 94073ns | 99601ns | 106679ns | 91252ns |
| Update ~4K entities with 2 systems | 442703ns | 365843ns | 375218ns | 362228ns | 412745ns | 369230ns |

| | EntityX | EnTT | Ginseng | mustache | Flecs | pico_ecs |
|:-------------------------------------|:----------|:-------|:----------|:-----------|:--------|:-----------|
| Update ~16K entities with 2 systems | 1ms | 1ms | 1ms | 1ms | 1ms | 1ms |
| Update ~65K entities with 2 systems | 6ms | 5ms | 6ms | 5ms | 5ms | 5ms |
| Update 262K entities with 2 systems | 27ms | 22ms | 26ms | 23ms | 21ms | 22ms |
| Update ~1M entities with 2 systems | 108ms | 89ms | 99ms | 92ms | 86ms | 88ms |
| Update ~2M entities with 2 systems | 218ms | 179ms | 183ms | 184ms | 172ms | 180ms |
| Update ~65K entities with 2 systems | 6ms | 5ms | 6ms | 5ms | 6ms | 5ms |
| Update 262K entities with 2 systems | 28ms | 23ms | 24ms | 23ms | 25ms | 29ms |
| Update ~1M entities with 2 systems | 119ms | 93ms | 96ms | 92ms | 103ms | 98ms |
| Update ~2M entities with 2 systems | 227ms | 184ms | 194ms | 184ms | 210ms | 197ms |



Expand All @@ -87,7 +100,7 @@ Version: 1.1.2 (Dec 2021)

> EnTT is a header-only, tiny and easy to use library for game programming and much more written in modern C++.
Version: v3.11.1
Version: v3.12.2

#### Ginseng by @apples

Expand All @@ -103,7 +116,7 @@ Version: 1.1 (Dec 2021)

> A fast, modern C++ Entity Component System
Version: 0.2 (Aug 2022)
Version: 0.2 (Apr 2023)

#### OpenEcs by @Gronis

Expand All @@ -115,20 +128,20 @@ Version: Beta (Apr 2017)

> Flecs is a fast and lightweight Entity Component System that lets you build games and simulations with millions of entities.
Version: v3.1.3
Version: v3.2.4

#### pico_ecs by @empyreanx

> A collection of cross-platform single header libraries written in C. Pure and simple ECS.
Version: v2.0.0
Version: 2.2 (Mai 2023)




### Environment

* **OS:** Linux
* **CPU:** 3.89GHz @ 12Cores
* **RAM:** 15.55GB
* **CPU:** 3.38GHz @ 12Cores
* **RAM:** 46.98GB

Loading

0 comments on commit 520efdc

Please sign in to comment.