Add liscence and prepare for OSS release
All checks were successful
🚦 CI / changes (push) Successful in 39s
🚦 CI / docker (push) Has been skipped
🚦 CI / test (push) Has been skipped
🚦 CI / docs (push) Successful in 7s

This commit is contained in:
Duncan Tourolle 2026-06-28 12:05:56 +02:00
parent 7c6a8be2b7
commit a4de64ea04
5 changed files with 93 additions and 12 deletions

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 Duncan Tourolle
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -467,7 +467,7 @@ not data.
Overhead µs/item at **work_us = 10** (framework overhead dominates):
| Topology | KPN private | TBB |
| Topology | KPN++ | TBB |
|---|---|---|
| chain depth-1 | 1.7 | **1.4** |
| chain depth-4 | 2.5 | **2.2** |
@ -479,7 +479,7 @@ Overhead µs/item at **work_us = 10** (framework overhead dominates):
Overhead µs/item at **work_us = 100** (moderate compute, KPN wins):
| Topology | KPN private | TBB |
| Topology | KPN++ | TBB |
|---|---|---|
| chain depth-1 | **2.1** | 3.5 |
| chain depth-4 | **4.3** | 5.2 |
@ -489,7 +489,7 @@ Overhead µs/item at **work_us = 100** (moderate compute, KPN wins):
| wide fanout-4 | 3.4 | **1.9** |
| diamond (2×2) | **4.1** | 6.1 |
KPN private pools beat TBB for every chain and diamond topology at 100 µs/node, and
KPN++ pools beat TBB for every chain and diamond topology at 100 µs/node, and
match TBB within ~20% at 10 µs/node for shallow chains. TBB retains an edge on wide
fanout (serial dispatch loop vs. work-stealing pool) and at extreme oversubscription
depths (chain-32 at 10 µs). The remaining gap at light work is the cost of
@ -578,3 +578,33 @@ examples/
scripts/
render_readme.py — regenerates README.md from README.md.in
```
---
## Contributing
Contributions are welcome. This project is hosted on a self-hosted Gitea
instance that accepts sign-in and registration with a GitHub account, so you
can log in with your existing GitHub identity to open issues and pull requests.
If you change any code that appears in a README snippet, edit `README.md.in`
(the template) rather than `README.md` directly, then regenerate:
```bash
cmake --build build --target readme # or: python scripts/render_readme.py
```
---
## Acknowledgments
AI tooling was used heavily throughout the development of this project,
including the design, implementation, tests, and documentation. All output
has been reviewed, but please keep this in mind when reading or building on the
code.
---
## License
Released under the [MIT License](LICENSE). Copyright (c) 2026 Duncan Tourolle.

View File

@ -289,7 +289,7 @@ not data.
Overhead µs/item at **work_us = 10** (framework overhead dominates):
| Topology | KPN private | TBB |
| Topology | KPN++ | TBB |
|---|---|---|
| chain depth-1 | 1.7 | **1.4** |
| chain depth-4 | 2.5 | **2.2** |
@ -301,7 +301,7 @@ Overhead µs/item at **work_us = 10** (framework overhead dominates):
Overhead µs/item at **work_us = 100** (moderate compute, KPN wins):
| Topology | KPN private | TBB |
| Topology | KPN++ | TBB |
|---|---|---|
| chain depth-1 | **2.1** | 3.5 |
| chain depth-4 | **4.3** | 5.2 |
@ -311,7 +311,7 @@ Overhead µs/item at **work_us = 100** (moderate compute, KPN wins):
| wide fanout-4 | 3.4 | **1.9** |
| diamond (2×2) | **4.1** | 6.1 |
KPN private pools beat TBB for every chain and diamond topology at 100 µs/node, and
KPN++ pools beat TBB for every chain and diamond topology at 100 µs/node, and
match TBB within ~20% at 10 µs/node for shallow chains. TBB retains an edge on wide
fanout (serial dispatch loop vs. work-stealing pool) and at extreme oversubscription
depths (chain-32 at 10 µs). The remaining gap at light work is the cost of
@ -400,3 +400,33 @@ examples/
scripts/
render_readme.py — regenerates README.md from README.md.in
```
---
## Contributing
Contributions are welcome. This project is hosted on a self-hosted Gitea
instance that accepts sign-in and registration with a GitHub account, so you
can log in with your existing GitHub identity to open issues and pull requests.
If you change any code that appears in a README snippet, edit `README.md.in`
(the template) rather than `README.md` directly, then regenerate:
```bash
cmake --build build --target readme # or: python scripts/render_readme.py
```
---
## Acknowledgments
AI tooling was used heavily throughout the development of this project,
including the design, implementation, tests, and documentation. All output
has been reviewed, but please keep this in mind when reading or building on the
code.
---
## License
Released under the [MIT License](LICENSE). Copyright (c) 2026 Duncan Tourolle.

View File

@ -1,7 +1,7 @@
site_name: KPN++
site_description: A C++20 Kahn Process Network library
repo_url: https://github.com/yourusername/kpn
repo_name: kpn
repo_url: https://gitea.tourolle.paris/dtourolle/KPN
repo_name: dtourolle/KPN
theme:
name: material

View File

@ -6,9 +6,9 @@ Directive format (in README.md.in):
<!-- @snippet path/to/file.cpp snippet_name -->
Snippet tags (in C++ source files):
// [snippet: snippet_name]
// --8<-- [start:snippet_name]
...content...
// [/snippet: snippet_name]
// --8<-- [end:snippet_name]
In Python files use # instead of //.
"""
@ -33,8 +33,8 @@ def comment_prefix(path: Path) -> str:
def extract_snippet(file_path: Path, name: str) -> str:
prefix = comment_prefix(file_path)
open_tag = f'{prefix} [snippet: {name}]'
close_tag = f'{prefix} [/snippet: {name}]'
open_tag = f'{prefix} --8<-- [start:{name}]'
close_tag = f'{prefix} --8<-- [end:{name}]'
text = file_path.read_text()
lines = text.splitlines()