diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..05e75a0 --- /dev/null +++ b/LICENSE @@ -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. diff --git a/README.md b/README.md index 124f044..1d7d1e1 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/README.md.in b/README.md.in index 1883aae..cd821d4 100644 --- a/README.md.in +++ b/README.md.in @@ -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. diff --git a/mkdocs.yml b/mkdocs.yml index 597795d..2bc5276 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -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 diff --git a/scripts/render_readme.py b/scripts/render_readme.py index c0fbc08..6b8afb8 100644 --- a/scripts/render_readme.py +++ b/scripts/render_readme.py @@ -6,9 +6,9 @@ Directive format (in README.md.in): 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()