Compare commits
358 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
9826879bcd | ||
a7103f8510 | |||
![]() |
d931a68b3e | ||
![]() |
a297adab7a | ||
![]() |
b5fd438ce0 | ||
![]() |
a4a5bf0d37 | ||
180ac51aea | |||
73b19ca1c4 | |||
31e8802803 | |||
fe860b2e38 | |||
60b575c8f8 | |||
3a20cb717c | |||
3bbfe0f0ec | |||
04d984d4fc | |||
05c4ed4963 | |||
7cf69d055a | |||
4c80cb3ed1 | |||
4c5e3ae151 | |||
86d0d11869 | |||
bf8c609dbd | |||
706aa4a787 | |||
dd5b85d2c8 | |||
53aa3b3679 | |||
6c33a2f4c0 | |||
ea77f3d72e | |||
c190d27467 | |||
ecf4c5da8c | |||
6285a47f72 | |||
5d4fa15eb9 | |||
bb4e4d7e56 | |||
c9bbd542c5 | |||
6e99d91dae | |||
4c2071e906 | |||
b49671d530 | |||
5c11c469f2 | |||
361290e24f | |||
65d1a5ecec | |||
6af367ba76 | |||
65907a96f4 | |||
05c1724234 | |||
4180300e87 | |||
c61f5a8772 | |||
fdcff58318 | |||
72e60e97ea | |||
132b2fd536 | |||
12835ad23a | |||
06a2262db9 | |||
cc5578e306 | |||
8765588667 | |||
9a8dc382a2 | |||
85859a488d | |||
e54e3e684e | |||
17c74d2e32 | |||
c60f22f7f7 | |||
36cf3121d1 | |||
c8b95313ff | |||
e5448af6d8 | |||
49149e452c | |||
b2d91391b3 | |||
13f70be87b | |||
71aa33d22f | |||
4c3da12ea1 | |||
a47082730a | |||
99dc3904af | |||
acf18c1bb4 | |||
e9788e22ad | |||
6cb983a7c4 | |||
7496a6a866 | |||
c8750b9dfd | |||
d98ca97624 | |||
61d57901b1 | |||
9c82038561 | |||
15dfa48d2d | |||
2457e50712 | |||
92c36502bc | |||
439b716a71 | |||
97282ff051 | |||
093c91521a | |||
74aa7b4ea6 | |||
3d8c84e17c | |||
91e8367d35 | |||
129020e1c5 | |||
d03fe10be8 | |||
3fdbb95080 | |||
![]() |
3103018404 | ||
![]() |
478ed1f5d0 | ||
42feb53c86 | |||
391d695144 | |||
038b9d8564 | |||
5448b5c0ec | |||
be45235d15 | |||
87e4b829c5 | |||
1ab605b70d | |||
fbb78ae22d | |||
a21dc76d81 | |||
49cecb798a | |||
e31f0f1ded | |||
43792fb349 | |||
d6a83a0520 | |||
c803a7566f | |||
670edb6ddc | |||
f5d1e0a3cb | |||
a58b3d194c | |||
d9180d950b | |||
9da7234684 | |||
610b1223d9 | |||
6954f05dee | |||
db57136f1b | |||
2c111fd98c | |||
90f8ae4188 | |||
b4d445b378 | |||
ea79c90c89 | |||
1b2f72cc3a | |||
505245d54c | |||
93ab5a5833 | |||
247ea7e7c3 | |||
d1e8a62396 | |||
2ac67cff18 | |||
eed2273ddf | |||
31d6eb076c | |||
bb5e406af3 | |||
aab33ccfab | |||
98164afc90 | |||
819e83d138 | |||
16b9b2ba85 | |||
9d94189165 | |||
![]() |
9fb53df45d | ||
92cc779caf | |||
e3d72fb14e | |||
014152fc89 | |||
3a300c816e | |||
8c8bde4a0f | |||
0c64f62d01 | |||
d5d5f2fcd4 | |||
51269a478b | |||
bf3165af8b | |||
bd629136ef | |||
e3bd221d01 | |||
8f1f7a2040 | |||
eb1fc0f7da | |||
aaa7769448 | |||
70f34e9e33 | |||
c7dbf643d3 | |||
4fba6cd10e | |||
37a567299e | |||
d1e4f46128 | |||
7cd4fa2bf0 | |||
6aff4388eb | |||
31fa1508f7 | |||
d1312ff6e9 | |||
f4296c66e4 | |||
![]() |
7cb67ecaee | ||
31c3c965c7 | |||
2c58a6058b | |||
929cc12c04 | |||
0404304803 | |||
f8fdcc0a79 | |||
3e5b949c4e | |||
f81c5695f1 | |||
096775f08f | |||
24324ae734 | |||
50837d6173 | |||
815633221d | |||
27a23f25ca | |||
a0e7fad83e | |||
bdd5696641 | |||
989685b134 | |||
55318d9da7 | |||
![]() |
bf2b3b73a0 | ||
454504d0cc | |||
![]() |
3e7006cec7 | ||
4993197fb9 | |||
233e35e8ff | |||
4d95f046ea | |||
7a62e396cb | |||
68fc8b0eba | |||
df0e7b2bd4 | |||
402ea82847 | |||
e4da326c76 | |||
028aa48b98 | |||
b878e5290a | |||
1792c650ec | |||
bae38d1d26 | |||
a2b2d11b0d | |||
1930cc4fd6 | |||
7212273141 | |||
6bfacf0e1e | |||
0439399f05 | |||
75833f5e21 | |||
1918ab6669 | |||
2b2a0eea8e | |||
ae7ef21014 | |||
0a534f6c46 | |||
1959ad047f | |||
f56bc51dd5 | |||
0496aeffc6 | |||
bf2b4af15a | |||
6d584c646c | |||
0f7ccc89de | |||
998200d507 | |||
c424a3177d | |||
3267ea873f | |||
e002db72fd | |||
2b18171e94 | |||
effdf36f7e | |||
927837df25 | |||
c7e8b256d2 | |||
423e3b15d2 | |||
855dd76678 | |||
93fdfd51de | |||
70e886fcfe | |||
f02994c149 | |||
f34479712a | |||
d836b7e46d | |||
6b0b5bfbbd | |||
58fe0d1b4b | |||
72b7eb8332 | |||
25cf46036d | |||
fa436604b7 | |||
6f7ce4063f | |||
59385fad03 | |||
30d5e4b0ca | |||
d45041e00c | |||
354f2f50eb | |||
3d10bef305 | |||
428e0b44b8 | |||
ab42ac4557 | |||
5d9aef4ed8 | |||
7a33deffb7 | |||
c13d57f0f6 | |||
2d5046654d | |||
e6537b78b0 | |||
906f4cc40a | |||
8de5f329d9 | |||
eda93acc49 | |||
4b4f1bd218 | |||
0df018cf5f | |||
0db35980a0 | |||
d1bf4e7520 | |||
![]() |
7b4ebca002 | ||
![]() |
24252ebbb3 | ||
![]() |
3ea89edac7 | ||
d100b42e5a | |||
b6903bc445 | |||
![]() |
afb81172a7 | ||
![]() |
9a628e78ca | ||
![]() |
1e2102c0a0 | ||
![]() |
276afd5479 | ||
![]() |
9269dd7202 | ||
b1ee2e7143 | |||
a3ffb2443a | |||
bf8a2213c1 | |||
97c936d41f | |||
7e96c0cb2a | |||
f08595b3a7 | |||
f8c6b7c7c0 | |||
bb946fa5f6 | |||
74557ab348 | |||
c257405060 | |||
721dabf007 | |||
6fbdd8fd6b | |||
2b612166d7 | |||
7c68922a95 | |||
48df02f102 | |||
e2119f77d6 | |||
ee9111a1ec | |||
4abd92e139 | |||
cd2e844066 | |||
![]() |
7346d1ba3b | ||
5a9086e6d1 | |||
929af74d3f | |||
cd0d0eb7c7 | |||
05979df34d | |||
d9b82494d0 | |||
c1b0768e7d | |||
553d0a1c62 | |||
f8a15df1b9 | |||
5a7f7b0f70 | |||
f2e8e46fcb | |||
64c2d52a7a | |||
9814abbcdf | |||
f5a911485a | |||
778c119bd6 | |||
cec52ada83 | |||
d0a47783f2 | |||
7d7c59bbf8 | |||
44d120d7a8 | |||
fb435842b2 | |||
7089db0bd0 | |||
c2b6bfd3a8 | |||
8a92023cf3 | |||
a8944b3763 | |||
3b51902713 | |||
7262133782 | |||
ff340df5b5 | |||
3a28e1c3d3 | |||
4a936dcb99 | |||
bc513832a5 | |||
49f915fda5 | |||
3c6c6ed230 | |||
![]() |
26d01d18eb | ||
ff2f33abb9 | |||
d0f50c9e3d | |||
63e79a9a73 | |||
1ec6f799f1 | |||
b16c30a5e6 | |||
6cafd347ce | |||
171e439bd4 | |||
6eead7e28e | |||
bfff1a815e | |||
9568d4f379 | |||
676e30b4ca | |||
e69df2e5c8 | |||
1d8b5e6f09 | |||
80b8b209fa | |||
9e105413fd | |||
602daabe23 | |||
7aa3434e79 | |||
3c6027056b | |||
29a7011141 | |||
0e75a2b6ad | |||
14dc70c6a2 | |||
c30a5d94b5 | |||
999a79b074 | |||
1c82470bfc | |||
b17ff6d166 | |||
1582a60522 | |||
a827113c2a | |||
881e556e06 | |||
cc09920c80 | |||
6711afdb58 | |||
acd63a915e | |||
30812e134e | |||
5b64737ad9 | |||
30f68ea5df | |||
467cc9aa7e | |||
e287087d3b | |||
35de33e0f9 | |||
d7caca2a37 | |||
0134ceee9d | |||
e838d687f0 | |||
a90768c1d4 | |||
6b8099b6af | |||
35872354e0 | |||
1909d8106c | |||
c624374cc8 | |||
920866d8af | |||
4b053b9a38 | |||
4f440c5104 | |||
f3bcdeccd1 | |||
43fa556fa9 | |||
31f24a2a55 | |||
029e185c6c | |||
70b29b6459 | |||
a4ce0e2a1e | |||
f848ddb37f | |||
54527b0006 | |||
5c5f9f0f1a |
@ -7,6 +7,7 @@ BasedOnStyle: LLVM
|
||||
AlignAfterOpenBracket: DontAlign
|
||||
AlignConsecutiveAssignments: None
|
||||
AllowShortBlocksOnASingleLine: false
|
||||
AllowShortEnumsOnASingleLine: true
|
||||
AllowShortFunctionsOnASingleLine: None
|
||||
AllowShortIfStatementsOnASingleLine: false
|
||||
AlwaysBreakAfterDefinitionReturnType: true
|
||||
@ -15,12 +16,14 @@ BreakBeforeBraces: Custom
|
||||
BreakConstructorInitializers: AfterColon
|
||||
BraceWrapping:
|
||||
AfterControlStatement: false
|
||||
AfterEnum: false
|
||||
AfterFunction: true
|
||||
AfterStruct: false
|
||||
AfterUnion: false
|
||||
BeforeElse: false
|
||||
ColumnLimit: 0
|
||||
ContinuationIndentWidth: 16
|
||||
Cpp11BracedListStyle: false
|
||||
IncludeBlocks: Preserve
|
||||
IndentCaseLabels: true
|
||||
IndentWidth: 8
|
||||
|
45
.gitea/workflows/ci.yaml
Normal file
@ -0,0 +1,45 @@
|
||||
name: CI
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
build:local:
|
||||
runs-on: native
|
||||
steps:
|
||||
- uses: https://gitea.com/ScMi1/checkout@v1.4
|
||||
- run: nix build -L --no-link .#ovniPackages.local
|
||||
|
||||
build:rt:
|
||||
runs-on: native
|
||||
steps:
|
||||
- uses: https://gitea.com/ScMi1/checkout@v1.4
|
||||
- run: nix build -L --no-link .#ovniPackages.rt
|
||||
|
||||
build:debug:
|
||||
runs-on: native
|
||||
steps:
|
||||
- uses: https://gitea.com/ScMi1/checkout@v1.4
|
||||
- run: nix build -L --no-link .#ovniPackages.debug
|
||||
|
||||
build:asan:
|
||||
runs-on: native
|
||||
steps:
|
||||
- uses: https://gitea.com/ScMi1/checkout@v1.4
|
||||
- run: nix build -L --no-link .#ovniPackages.asan
|
||||
|
||||
build:nompi:
|
||||
runs-on: native
|
||||
steps:
|
||||
- uses: https://gitea.com/ScMi1/checkout@v1.4
|
||||
- run: nix build -L --no-link .#ovniPackages.nompi
|
||||
|
||||
build:compilers:
|
||||
runs-on: native
|
||||
steps:
|
||||
- uses: https://gitea.com/ScMi1/checkout@v1.4
|
||||
- run: nix build -L --no-link .#ovniPackages.compilers
|
@ -2,7 +2,6 @@ build:debian-testing:
|
||||
image: debian:testing
|
||||
tags:
|
||||
- docker
|
||||
- mestral
|
||||
stage: build
|
||||
before_script:
|
||||
- apt update && apt -y install make autoconf gfortran libopenmpi-dev cmake
|
||||
@ -15,30 +14,72 @@ build:debian-testing:
|
||||
paths:
|
||||
- install/
|
||||
|
||||
build:rt-tests:
|
||||
build:local:
|
||||
stage: build
|
||||
tags:
|
||||
- nix
|
||||
script:
|
||||
- nix build -L --tarball-ttl 0 --file nix/rt.nix bsc.ovni-rt
|
||||
- nix build -L --no-link .#ovniPackages.local
|
||||
|
||||
build:old-gcc:
|
||||
build:rt:
|
||||
stage: build
|
||||
tags:
|
||||
- nix
|
||||
script:
|
||||
- nix build -L --tarball-ttl 0 --file nix/rt.nix bsc.oldOvnis
|
||||
- nix build -L --no-link .#ovniPackages.rt
|
||||
|
||||
build:old-gcc-no-lto:
|
||||
build:debug:
|
||||
stage: build
|
||||
tags:
|
||||
- nix
|
||||
script:
|
||||
- nix build -L --tarball-ttl 0 --file nix/rt.nix bsc.oldOvnisNoLTO
|
||||
- nix build -L --no-link .#ovniPackages.debug
|
||||
|
||||
build:old-gcc-release:
|
||||
build:asan:
|
||||
stage: build
|
||||
tags:
|
||||
- nix
|
||||
script:
|
||||
- nix build -L --tarball-ttl 0 --file nix/rt.nix bsc.oldOvnisRelease
|
||||
- nix build -L --no-link .#ovniPackages.asan
|
||||
|
||||
build:ubsan:
|
||||
stage: build
|
||||
tags:
|
||||
- nix
|
||||
script:
|
||||
- nix build -L --no-link .#ovniPackages.ubsan
|
||||
|
||||
build:nompi:
|
||||
stage: build
|
||||
tags:
|
||||
- nix
|
||||
script:
|
||||
- nix build -L --no-link .#ovniPackages.nompi
|
||||
|
||||
build:compilers:
|
||||
stage: build
|
||||
tags:
|
||||
- nix
|
||||
script:
|
||||
- nix build -L --no-link .#ovniPackages.compilers
|
||||
|
||||
build:armv7:
|
||||
stage: build
|
||||
tags:
|
||||
- nix
|
||||
script:
|
||||
- nix build -L --no-link .#ovniPackages.armv7
|
||||
|
||||
build:aarch64:
|
||||
stage: build
|
||||
tags:
|
||||
- nix
|
||||
script:
|
||||
- nix build -L --no-link .#ovniPackages.aarch64
|
||||
|
||||
build:riscv64:
|
||||
stage: build
|
||||
tags:
|
||||
- nix
|
||||
script:
|
||||
- nix build -L --no-link .#ovniPackages.riscv64
|
||||
|
20
.readthedocs.yaml
Normal file
@ -0,0 +1,20 @@
|
||||
# .readthedocs.yaml
|
||||
# Read the Docs configuration file
|
||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||
|
||||
# Required
|
||||
version: 2
|
||||
|
||||
# Set the version of Python and other tools you might need
|
||||
build:
|
||||
os: ubuntu-22.04
|
||||
tools:
|
||||
python: "3.11"
|
||||
|
||||
mkdocs:
|
||||
configuration: mkdocs.yml
|
||||
fail_on_warning: false
|
||||
|
||||
python:
|
||||
install:
|
||||
- requirements: doc/requirements.txt
|
312
CHANGELOG.md
Normal file
@ -0,0 +1,312 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Changed
|
||||
|
||||
- OpenMP model version increased to 1.2.0.
|
||||
|
||||
### Added
|
||||
|
||||
- Add support OpenMP label and task ID views.
|
||||
|
||||
## [1.11.0] - 2024-11-08
|
||||
|
||||
### Added
|
||||
|
||||
- Introduce part model.
|
||||
- Support for `nosv_cond_wait`, `nosv_cond_signal` and `nosv_cond_broadcast` events VA{oOgGkK}.
|
||||
|
||||
### Changed
|
||||
|
||||
- Enable -Wconversion and -Wsign-conversion.
|
||||
- Update trace format to version 3.
|
||||
- The ovni.require metadata key is now mandatory.
|
||||
- Store process metadata in thread metadata.
|
||||
- nOS-V model version increased to 2.4.0.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix bug in ovnisort when injecting events in a previously modified section.
|
||||
|
||||
## [1.10.0] - 2024-07-26
|
||||
|
||||
### Changed
|
||||
|
||||
- nOS-V model version increased to 2.3.0.
|
||||
- Prevent accidental use of nOS-V traces without required events for the
|
||||
breakdown model using the `nosv.can_breakdown` attribute.
|
||||
- Increase ovni model version to 1.1.0 for the mark events `OM*`.
|
||||
|
||||
### Added
|
||||
|
||||
- Add support for nOS-V progressing events VP{pra}.
|
||||
- Add breakdown model for nOS-V.
|
||||
- New API to manage stream metadata `ovni_attr_*()`.
|
||||
- New mark API `ovni_mark_*()` to emit user-defined events.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Cross-compilation for ARM 32 bits.
|
||||
|
||||
## [1.9.1] - 2024-05-10
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix breakdown model error that was preventing a zero value to be written in
|
||||
the PRV trace.
|
||||
- Fix gcc 11.3.1 -Wstringop-overflow warning.
|
||||
|
||||
## [1.9.0] - 2024-04-25
|
||||
|
||||
### Added
|
||||
|
||||
- Consistency check for events emitted when the kernel has removed the thread
|
||||
from the CPU.
|
||||
- The nOS-V model version is bumped to 2.1.0.
|
||||
- Add support for `nosv_mutex_lock`, `nosv_mutex_trylock` and
|
||||
`nosv_mutex_unlock` events VA{lLtTuU}.
|
||||
- Add support for the `nosv_barrier_event` event VA{bB}.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Open Paraver windows at (100,100) instead of (0,0) to avoid them appearing
|
||||
under the menu bar in Mac OS.
|
||||
|
||||
## [1.8.0] - 2024-03-18
|
||||
|
||||
### Added
|
||||
|
||||
- Add new body model to support parallel tasks in nOS-V (used in taskfor).
|
||||
- Add the ability to restrict transitions in the task model states.
|
||||
- Add nOS-V support for parallel tasks reading the body id from the
|
||||
event payload.
|
||||
- Keep a changelog of emulation model versions.
|
||||
|
||||
### Changed
|
||||
|
||||
- The task model now requires the previous task body to be paused before nesting
|
||||
another one. A compatibility flag is still available to still allow the old
|
||||
behavior.
|
||||
- Nanos6 model version increased to 1.1.0.
|
||||
- nOS-V model version increased to 2.0.0.
|
||||
|
||||
## [1.7.0] - 2024-03-12
|
||||
|
||||
### Added
|
||||
|
||||
- Add OpenMP model (`P`) at version 1.1.0 (currently it only supports subsystems
|
||||
and only works with the OpenMP-V runtime, on top of nOS-V).
|
||||
|
||||
### Changed
|
||||
|
||||
- Add support for `nosv_attach` and `nosv_detach` events VA{aAeE}.
|
||||
- Ignore old nOS-V attach events VH{aA}.
|
||||
- The nOS-V model version is bumped to 1.1.0.
|
||||
|
||||
## [1.6.0] - 2024-02-14
|
||||
|
||||
### Changed
|
||||
|
||||
- All events now must be declared for each emulation model and given a
|
||||
description including the payload arguments.
|
||||
|
||||
### Added
|
||||
|
||||
- Manual page for ovnidump(1).
|
||||
- Describe events in human readable format with ovnidump.
|
||||
- New `-x` option in ovnidump to show the payload in hexadecimal.
|
||||
|
||||
## [1.5.1] - 2023-12-20
|
||||
|
||||
### Fixed
|
||||
|
||||
- Calling `ovni_thread_isready()` after `ovni_thread_free()` now returns 0.
|
||||
- Emitting events in a non-ready thread now aborts the program with a
|
||||
message rather than causing a segfault.
|
||||
|
||||
## [1.5.0] - 2023-12-15
|
||||
|
||||
### Added
|
||||
|
||||
- New function `ovni_thread_require()` to selectively enable emulation models
|
||||
and check their version is compatible (if not used all models will be
|
||||
enabled).
|
||||
- Support for per-thread metadata
|
||||
- Store the version of libovni in the metadata
|
||||
- Streams are marked as finished when `ovni_thread_free()` is called. A warning
|
||||
is emitted in the emulator for those streams that are not finished properly.
|
||||
- List the emulation models and versions with `ovniemu -h`
|
||||
- New `-a` ovniemu option to enable all models
|
||||
|
||||
### Changed
|
||||
|
||||
- Updated process metadata to version 2 (traces generated with an older libovni
|
||||
are not compatible with the emulator).
|
||||
- Emulation models now have a semantic version (X.Y.Z) instead of just a number.
|
||||
- Install ovniver with the runpath set.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Close stream FD on `ovni_thread_free()`.
|
||||
|
||||
## [1.4.1] - 2023-11-16
|
||||
|
||||
### Changed
|
||||
|
||||
- Fix emulation for level 2 or lower in nOS-V with inline tasks by
|
||||
allowing duplicates in the subsystem channel.
|
||||
|
||||
## [1.4.0] - 2023-11-08
|
||||
|
||||
### Added
|
||||
|
||||
- Add `OVNI_TRACEDIR` envar to change the trace directory (default is `ovni`).
|
||||
|
||||
### Changed
|
||||
|
||||
- Don't modify nOS-V subsystem state on task pause. The "Task: Running"
|
||||
state is now renamed to "Task: In body" to reflect the change.
|
||||
- Use pkg-config to locate the nOS-V library and get the version. Use
|
||||
`PKG_CONFIG_LIBDIR=/path/to/nosv/install/lib/pkgconfig` to use a custom
|
||||
installation path.
|
||||
|
||||
## [1.3.0] - 2023-09-07
|
||||
|
||||
### Added
|
||||
|
||||
- Add `ovni_version_get()` function.
|
||||
- Add the `ovniver` program to report the libovni version and commit.
|
||||
- Add nOS-V API subsystem events for `nosv_create()` and `nosv_destroy()`.
|
||||
- Add TAMPI model with `T` code.
|
||||
- Add subsytem events and cfgs for TAMPI model.
|
||||
- Add MPI model with `M` code.
|
||||
- Add function events and cfgs for MPI model.
|
||||
|
||||
## [1.2.2] - 2022-07-26
|
||||
|
||||
### Added
|
||||
|
||||
- Add this CHANGELOG.md file to keep track of changes.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Don't rely on /tmp or $TMPDIR in tests.
|
||||
- Fix misleading message in version check.
|
||||
- Fix error message when opening missing trace directories
|
||||
|
||||
## [1.2.1] - 2022-07-25
|
||||
|
||||
### Fixed
|
||||
|
||||
- Set default visibility to hidden to prevent clashes with other functions such
|
||||
as the verr() in the glibc.
|
||||
- Don't hardcore destination directory names like lib, to use the ones in the
|
||||
destination host (like lib64).
|
||||
- Add support in ovnisort for cases where in the sorting region there are flush
|
||||
events.
|
||||
- Remove CI nix roots from the builds to allow the garbage collector to remove
|
||||
the build.
|
||||
- Fix the detection of the -fompss-2 flag in cmake by setting the flag at link
|
||||
time too.
|
||||
- Fix spawn task test by waiting for the task to finish before exiting.
|
||||
|
||||
## [1.2.0] - 2022-05-02
|
||||
|
||||
This version adds the initial support for the breakdown view and some fixes.
|
||||
|
||||
### Added
|
||||
|
||||
- Add the initial breakdown view showing the task type, the subsystem or the
|
||||
idle state.
|
||||
- Added the sort module for channels to support the breakdown view.
|
||||
- Add the -b option in ovniemu to enable the breakdown trace.
|
||||
- Add support for sponge CPUs in Nanos6.
|
||||
- Add the cmake option `-DUSE_MPI=OFF` to build ovni without MPI.
|
||||
- Add a test for two nOS-V shared memory segments.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Sort the timeline rows in MPI rank order if given.
|
||||
- Skip duplicated entries when ovnisync to runs multiple times in the same node.
|
||||
- Allow tasks to be re-executed to support the taskiter in the nOS-V model.
|
||||
- Use the signed `int64_t` type for clock offsets, so they can be negative.
|
||||
- Avoid fmemopen() due to a bug in old glibc versions.
|
||||
- Fix clang format for braced list
|
||||
- Fix buffer overflow in `sort_replace()` of the sort module.
|
||||
- Set the size of the channel property arrays to prevent a buffer overflow.
|
||||
|
||||
## [1.1.0] - 2022-03-24
|
||||
|
||||
This version introduces the patch bay and a big redesign in the way the channels
|
||||
are used along with some other changes.
|
||||
|
||||
### Changed
|
||||
|
||||
- The channels are now connected using the patch bay, where they must be
|
||||
registered using an unique name.
|
||||
- The tracking modes are implemented by using a mux, and an arbitrary way of
|
||||
tracking other channels is now possible, as it is required for the breakdown
|
||||
model.
|
||||
- The channels don't have visibility with other parts of the code, they interact
|
||||
with a callback only.
|
||||
- The emulator code has been split into smaller modules which are independent of
|
||||
each other, so we can unit test them separately.
|
||||
- The models are now implemented following the model spec functions.
|
||||
- Updated the ovni and Nanos6 models
|
||||
- Model data is now stored by the `extend_set`/`get` methods, so it is kept
|
||||
separate between models.
|
||||
- The CPU and thread channels have been moved to the emulator while the ones
|
||||
specific to the user space tracing with libovni.so are controlled by the ovni
|
||||
model. This allows other thread/CPU tracing mechanisms (kernel events) to
|
||||
update the emulator channels while the other models are not affected.
|
||||
- The trace streams are now independent of the hierarchy loom/proc/thread, and
|
||||
end with the suffix .obs, so we can add other types of traces in the future.
|
||||
- Models can register any arbitrary number of channels on runtime, so we can add
|
||||
load hardware counters in one channel each.
|
||||
- Channels have a user friendly name so debugging is easier
|
||||
- The die() abort mechanism has been transformed into if() + return -1, so we
|
||||
can do unit testing and check the errors and also finish the PRV traces when
|
||||
the emulator encounters an error and open them in Paraver with the last
|
||||
processed event.
|
||||
- The emulator can be stopped with ^C, producing a valid Paraver trace.
|
||||
- Prevents leaving threads in the running state by adding a check at the end of
|
||||
emulation
|
||||
- The Paraver configurations files are copied into the trace directory.
|
||||
|
||||
### Removed
|
||||
|
||||
- The TAMPI and OpenMP models have been removed as they are not maintained.
|
||||
- Punctual events are not implemented for now.
|
||||
- No error states, when more than one thread is running in the virtual
|
||||
CPU, no subsystem is shown in the CPU view.
|
||||
|
||||
## [1.0.0] - 2022-12-16
|
||||
|
||||
### Added
|
||||
|
||||
- First ovni release.
|
||||
|
||||
[unreleased]: https://jungle.bsc.es/git/rarias/ovni
|
||||
[1.11.0]: https://github.com/rodarima/ovni/releases/tag/1.11.0
|
||||
[1.10.0]: https://github.com/rodarima/ovni/releases/tag/1.10.0
|
||||
[1.9.1]: https://github.com/rodarima/ovni/releases/tag/1.9.1
|
||||
[1.9.0]: https://github.com/rodarima/ovni/releases/tag/1.9.0
|
||||
[1.8.0]: https://github.com/rodarima/ovni/releases/tag/1.8.0
|
||||
[1.7.0]: https://github.com/rodarima/ovni/releases/tag/1.7.0
|
||||
[1.6.0]: https://github.com/rodarima/ovni/releases/tag/1.6.0
|
||||
[1.5.1]: https://github.com/rodarima/ovni/releases/tag/1.5.1
|
||||
[1.5.0]: https://github.com/rodarima/ovni/releases/tag/1.5.0
|
||||
[1.4.1]: https://github.com/rodarima/ovni/releases/tag/1.4.1
|
||||
[1.4.0]: https://github.com/rodarima/ovni/releases/tag/1.4.0
|
||||
[1.3.0]: https://github.com/rodarima/ovni/releases/tag/1.3.0
|
||||
[1.2.2]: https://github.com/rodarima/ovni/releases/tag/1.2.2
|
||||
[1.2.1]: https://github.com/rodarima/ovni/releases/tag/1.2.1
|
||||
[1.2.0]: https://github.com/rodarima/ovni/releases/tag/1.2.0
|
||||
[1.1.0]: https://github.com/rodarima/ovni/releases/tag/1.1.0
|
||||
[1.0.0]: https://github.com/rodarima/ovni/releases/tag/1.0.0
|
@ -1,24 +1,32 @@
|
||||
# Copyright (c) 2021-2023 Barcelona Supercomputing Center (BSC)
|
||||
# Copyright (c) 2021-2024 Barcelona Supercomputing Center (BSC)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
project(OVNI LANGUAGES C)
|
||||
project(OVNI LANGUAGES C VERSION 1.11.0)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
|
||||
|
||||
add_compile_options(-Wall -Wextra -Wformat
|
||||
-Wmissing-prototypes -Wstrict-prototypes
|
||||
#-Wconversion -Wsign-conversion
|
||||
-Wconversion -Wsign-conversion
|
||||
-Wold-style-definition -pedantic
|
||||
-Werror
|
||||
)
|
||||
|
||||
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_C_STANDARD_REQUIRED TRUE)
|
||||
set(CMAKE_C_EXTENSIONS FALSE)
|
||||
|
||||
option(ENABLE_DEBUG_LOG "Enable debug messages (very verbose)")
|
||||
option(ENABLE_ALL_TESTS "Forces the execution of all tests")
|
||||
set(OVNI_GIT_COMMIT "unknown" CACHE STRING "Set the git commit")
|
||||
|
||||
if("${OVNI_GIT_COMMIT}" STREQUAL "unknown")
|
||||
message(WARNING "OVNI_GIT_COMMIT is unknown, please specify the git commit")
|
||||
endif()
|
||||
|
||||
if(ENABLE_DEBUG_LOG)
|
||||
add_definitions(-DENABLE_DEBUG)
|
||||
@ -59,7 +67,9 @@ set(CMAKE_C_FLAGS_ASAN "${CMAKE_C_FLAGS_DEBUG} \
|
||||
-fno-omit-frame-pointer"
|
||||
CACHE STRING "Flags used by the C compiler during AddressSanitizer builds." FORCE)
|
||||
|
||||
set(CMAKE_C_FLAGS_UBSAN "${CMAKE_C_FLAGS_DEBUG} -fsanitize=undefined"
|
||||
set(CMAKE_C_FLAGS_UBSAN "${CMAKE_C_FLAGS_DEBUG} \
|
||||
-fsanitize=undefined \
|
||||
-fno-sanitize-recover=all"
|
||||
CACHE STRING "Flags used by the C compiler during UndefinedBehaviorSanitizer builds." FORCE)
|
||||
|
||||
find_program(IWYU NAMES include-what-you-use iwyu)
|
||||
@ -95,3 +105,6 @@ if(BUILD_TESTING)
|
||||
endif()
|
||||
|
||||
install(DIRECTORY cfg/ DESTINATION "${OVNI_CONFIG_RELDIR}")
|
||||
|
||||
include(FeatureSummary)
|
||||
feature_summary(WHAT ALL)
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: Context switches of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
42
cfg/cpu/mpi/function.cfg
Normal file
@ -0,0 +1,42 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW CPU: MPI function of the RUNNING thread >
|
||||
################################################################################
|
||||
window_name CPU: MPI function of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 25
|
||||
window_filter_module evt_type_label 1 "CPU: MPI function of the RUNNING thread"
|
||||
|
44
cfg/cpu/nanos6/breakdown.cfg
Normal file
@ -0,0 +1,44 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW CPU: Nanos6 Runtime/Idle/Task breakdown >
|
||||
################################################################################
|
||||
window_name CPU: Nanos6 Runtime/Idle/Task breakdown
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_custom_color_enabled true
|
||||
window_custom_color_palette {1.000000000000:0,70,0},{3.000000000000:99,131,0},{4.000000000000:53,121,221},{5.000000000000:223,108,0},{6.000000000000:75,127,82},{7.000000000000:242,110,162},{8.000000000000:255,190,0},{9.000000000000:153,114,0},{10.000000000000:156,12,231},{11.000000000000:177,25,229},{12.000000000000:255,72,50},{15.000000000000:0,171,255},{16.000000000000:124,213,228},{17.000000000000:242,239,141},{18.000000000000:80,80,80},{19.000000000000:94,0,0},{20.000000000000:128,165,214},{22.000000000000:222,101,128},{23.000000000000:110,148,255},{100.000000000000:0,100,0},{101.000000000000:100,100,177},{102.000000000000:150,150,0}
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 41
|
||||
window_filter_module evt_type_label 1 "CPU: Nanos6 Runtime/Idle/Task breakdown"
|
||||
|
44
cfg/cpu/nanos6/idle.cfg
Normal file
@ -0,0 +1,44 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW CPU: Nanos6 idle state of the RUNNING thread >
|
||||
################################################################################
|
||||
window_name CPU: Nanos6 idle state of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_custom_color_enabled true
|
||||
window_custom_color_palette {100.000000000000:0,100,0},{101.000000000000:100,100,177},{102.000000000000:150,150,0}
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 40
|
||||
window_filter_module evt_type_label 1 "CPU: Nanos6 idle state of the RUNNING thread"
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: Nanos6 task MPI rank of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
|
@ -9,15 +9,15 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: Nanos6 subsystem of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_custom_color_enabled true
|
||||
window_custom_color_palette {1.000000000000:0,70,0},{2.000000000000:99,131,0},{3.000000000000:53,121,221},{4.000000000000:223,108,0},{5.000000000000:75,127,82},{6.000000000000:242,110,162},{7.000000000000:255,190,0},{8.000000000000:153,114,0},{9.000000000000:156,12,231},{10.000000000000:177,25,229},{11.000000000000:255,72,50},{14.000000000000:0,171,255},{15.000000000000:124,213,228},{16.000000000000:242,239,141},{17.000000000000:80,80,80},{18.000000000000:94,0,0},{19.000000000000:128,165,214},{21.000000000000:222,101,128},{22.000000000000:110,148,255}
|
||||
window_custom_color_palette {1.000000000000:0,70,0},{3.000000000000:99,131,0},{4.000000000000:53,121,221},{5.000000000000:223,108,0},{6.000000000000:75,127,82},{7.000000000000:242,110,162},{8.000000000000:255,190,0},{9.000000000000:153,114,0},{10.000000000000:156,12,231},{11.000000000000:177,25,229},{12.000000000000:255,72,50},{15.000000000000:0,171,255},{16.000000000000:124,213,228},{17.000000000000:242,239,141},{18.000000000000:80,80,80},{19.000000000000:94,0,0},{20.000000000000:128,165,214},{22.000000000000:222,101,128},{23.000000000000:110,148,255}
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: Nanos6 task ID of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: Nanos6 task type of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: Nanos6 thread type of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: NODES subsystem of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
42
cfg/cpu/nosv/body-id.cfg
Normal file
@ -0,0 +1,42 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW CPU: nOS-V task body ID of the RUNNING thread >
|
||||
################################################################################
|
||||
window_name CPU: nOS-V task body ID of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_color_mode window_in_null_gradient_mode
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 15
|
||||
window_filter_module evt_type_label 1 "CPU: nOS-V task body ID of the RUNNING thread"
|
44
cfg/cpu/nosv/breakdown.cfg
Normal file
@ -0,0 +1,44 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW CPU: nOS-V Runtime/Idle/Task breakdown >
|
||||
################################################################################
|
||||
window_name CPU: nOS-V Runtime/Idle/Task breakdown
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_custom_color_enabled true
|
||||
window_custom_color_palette {6.000000000000:94,0,0},{7.000000000000:153,114,0},{9.000000000000:124,213,228},{10.000000000000:242,239,141},{11.000000000000:0,70,0},{19.000000000000:195,96,151},{20.000000000000:255,162,255},{21.000000000000:203,255,3},{22.000000000000:7,255,12},{23.000000000000:21,224,189},{24.000000000000:255,103,0},{25.000000000000:0,99,162},{26.000000000000:110,77,252},{100.000000000000:0,100,0},{101.000000000000:60,60,60},{102.000000000000:150,150,0}
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 17
|
||||
window_filter_module evt_type_label 1 "CPU: nOS-V Runtime/Idle/Task breakdown"
|
||||
|
44
cfg/cpu/nosv/idle.cfg
Normal file
@ -0,0 +1,44 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW CPU: nOS-V idle state of the RUNNING thread >
|
||||
################################################################################
|
||||
window_name CPU: nOS-V idle state of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_custom_color_enabled true
|
||||
window_custom_color_palette {100.000000000000:0,100,0},{101.000000000000:60,60,60},{102.000000000000:150,150,0}
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 16
|
||||
window_filter_module evt_type_label 1 "CPU: nOS-V idle state of the RUNNING thread"
|
||||
|
@ -9,15 +9,15 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: nOS-V subsystem of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_custom_color_enabled true
|
||||
window_custom_color_palette {6.000000000000:94,0,0},{7.000000000000:153,114,0},{9.000000000000:124,213,228},{10.000000000000:242,239,141},{11.000000000000:0,70,0}
|
||||
window_custom_color_palette {6.000000000000:94,0,0},{7.000000000000:153,114,0},{9.000000000000:124,213,228},{10.000000000000:242,239,141},{11.000000000000:0,70,0},{19.000000000000:195,96,151},{20.000000000000:255,162,255},{21.000000000000:203,255,3},{22.000000000000:7,255,12},{23.000000000000:21,165,118},{24.000000000000:255,103,0},{25.000000000000:200,30,5},{26.000000000000:255,10,200},{27.000000000000:98,133,80},{28.000000000000:0,99,162},{29.000000000000:110,77,252}
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: nOS-V task AppID of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: nOS-V TaskID of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: nOS-V task rank+1 of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: nOS-V task type of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
41
cfg/cpu/openmp/label.cfg
Normal file
@ -0,0 +1,41 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW CPU: OpenMP label of the RUNNING thread >
|
||||
################################################################################
|
||||
window_name CPU: OpenMP label of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 51
|
||||
window_filter_module evt_type_label 1 "CPU: OpenMP label of the RUNNING thread"
|
44
cfg/cpu/openmp/subsystem.cfg
Normal file
@ -0,0 +1,44 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW CPU: OpenMP subsystem of the RUNNING thread >
|
||||
################################################################################
|
||||
window_name CPU: OpenMP subsystem of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_custom_color_enabled true
|
||||
window_custom_color_palette {1.000000000000:255,177,245},{2.000000000000:255,86,239},{3.000000000000:122,44,22},{5.000000000000:239,188,0},{6.000000000000:160,89,0},{8.000000000000:0,255,73},{10.000000000000:86,209,43},{11.000000000000:203,208,93},{12.000000000000:0,176,169},{13.000000000000:190,82,201},{14.000000000000:124,114,183},{15.000000000000:157,231,255},{16.000000000000:199,194,0},{17.000000000000:96,0,200},{18.000000000000:255,255,124},{19.000000000000:35,152,0},{21.000000000000:255,251,174},{22.000000000000:232,0,0},{23.000000000000:210,66,40},{26.000000000000:101,101,99},{27.000000000000:200,0,255},{28.000000000000:0,203,249},{30.000000000000:255,219,0},{31.000000000000:48,103,107},{34.000000000000:194,105,126}
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 50
|
||||
window_filter_module evt_type_label 1 "CPU: OpenMP subsystem of the RUNNING thread"
|
||||
|
41
cfg/cpu/openmp/task-id.cfg
Normal file
@ -0,0 +1,41 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW CPU: OpenMP task id of the RUNNING thread >
|
||||
################################################################################
|
||||
window_name CPU: OpenMP task id of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 52
|
||||
window_filter_module evt_type_label 1 "CPU: OpenMP task id of the RUNNING thread"
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: Flushing state of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
41
cfg/cpu/ovni/mark.cfg
Normal file
@ -0,0 +1,41 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW CPU: Mark value of the RUNNING thread >
|
||||
################################################################################
|
||||
window_name CPU: Mark value of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 100
|
||||
window_filter_module evt_type_label 1 "CPU: Mark value of the RUNNING thread"
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: Number of RUNNING threads
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: PID of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: TID of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
42
cfg/cpu/tampi/subsystem.cfg
Normal file
@ -0,0 +1,42 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW CPU: TAMPI subsystem of the RUNNING thread >
|
||||
################################################################################
|
||||
window_name CPU: TAMPI subsystem of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 20
|
||||
window_filter_module evt_type_label 1 "CPU: TAMPI subsystem of the RUNNING thread"
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: Context switches of the CURRENT thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
42
cfg/thread/mpi/function.cfg
Normal file
@ -0,0 +1,42 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW Thread: MPI function of the RUNNING thread >
|
||||
################################################################################
|
||||
window_name Thread: MPI function of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 25
|
||||
window_filter_module evt_type_label 1 "Thread: MPI function of the RUNNING thread"
|
||||
|
44
cfg/thread/nanos6/idle.cfg
Normal file
@ -0,0 +1,44 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW Thread: Nanos6 idle state >
|
||||
################################################################################
|
||||
window_name Thread: Nanos6 idle state
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_custom_color_enabled true
|
||||
window_custom_color_palette {100.000000000000:0,100,0},{101.000000000000:100,100,177},{102.000000000000:150,150,0}
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 40
|
||||
window_filter_module evt_type_label 1 "Thread: Nanos6 idle state"
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: Nanos6 task MPI rank of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
|
@ -9,15 +9,15 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: Nanos6 subsystem of the ACTIVE thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_custom_color_enabled true
|
||||
window_custom_color_palette {1.000000000000:0,70,0},{2.000000000000:99,131,0},{3.000000000000:53,121,221},{4.000000000000:223,108,0},{5.000000000000:75,127,82},{6.000000000000:242,110,162},{7.000000000000:255,190,0},{8.000000000000:153,114,0},{9.000000000000:156,12,231},{10.000000000000:177,25,229},{11.000000000000:255,72,50},{14.000000000000:0,171,255},{15.000000000000:124,213,228},{16.000000000000:242,239,141},{17.000000000000:80,80,80},{18.000000000000:94,0,0},{19.000000000000:128,165,214},{21.000000000000:222,101,128},{22.000000000000:110,148,255}
|
||||
window_custom_color_palette {1.000000000000:0,70,0},{3.000000000000:99,131,0},{4.000000000000:53,121,221},{5.000000000000:223,108,0},{6.000000000000:75,127,82},{7.000000000000:242,110,162},{8.000000000000:255,190,0},{9.000000000000:153,114,0},{10.000000000000:156,12,231},{11.000000000000:177,25,229},{12.000000000000:255,72,50},{15.000000000000:0,171,255},{16.000000000000:124,213,228},{17.000000000000:242,239,141},{18.000000000000:80,80,80},{19.000000000000:94,0,0},{20.000000000000:128,165,214},{22.000000000000:222,101,128},{23.000000000000:110,148,255}
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: Nanos6 task ID of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: Nanos6 task type of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: Nanos6 thread type
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled false
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: NODES subsystem of the ACTIVE thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
42
cfg/thread/nosv/body-id.cfg
Normal file
@ -0,0 +1,42 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW Thread: nOS-V task body ID of the RUNNING thread >
|
||||
################################################################################
|
||||
window_name Thread: nOS-V task body ID of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_color_mode window_in_null_gradient_mode
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 15
|
||||
window_filter_module evt_type_label 1 "Thread: nOS-V task body ID of the RUNNING thread"
|
@ -9,15 +9,15 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: nOS-V subsystem of the ACTIVE thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_custom_color_enabled true
|
||||
window_custom_color_palette {6.000000000000:94,0,0},{7.000000000000:153,114,0},{9.000000000000:124,213,228},{10.000000000000:242,239,141},{11.000000000000:0,70,0}
|
||||
window_custom_color_palette {6.000000000000:94,0,0},{7.000000000000:153,114,0},{9.000000000000:124,213,228},{10.000000000000:242,239,141},{11.000000000000:0,70,0},{19.000000000000:195,96,151},{20.000000000000:255,162,255},{21.000000000000:203,255,3},{22.000000000000:7,255,12},{23.000000000000:21,165,118},{24.000000000000:255,103,0},{25.000000000000:200,30,5},{26.000000000000:255,10,200},{27.000000000000:98,133,80},{28.000000000000:0,99,162},{29.000000000000:110,77,252}
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: nOS-V task AppID of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: nOS-V TaskID of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: nOS-V task rank+1 of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: nOS-V task type of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
41
cfg/thread/openmp/label.cfg
Normal file
@ -0,0 +1,41 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW Thread: OpenMP label of the ACTIVE thread >
|
||||
################################################################################
|
||||
window_name Thread: OpenMP label of the ACTIVE thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 51
|
||||
window_filter_module evt_type_label 1 "Thread: OpenMP label of the ACTIVE thread"
|
44
cfg/thread/openmp/subsystem.cfg
Normal file
@ -0,0 +1,44 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW Thread: OpenMP subsystem of the ACTIVE thread >
|
||||
################################################################################
|
||||
window_name Thread: OpenMP subsystem of the ACTIVE thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_custom_color_enabled true
|
||||
window_custom_color_palette {1.000000000000:255,177,245},{2.000000000000:255,86,239},{3.000000000000:122,44,22},{5.000000000000:239,188,0},{6.000000000000:160,89,0},{8.000000000000:0,255,73},{10.000000000000:86,209,43},{11.000000000000:203,208,93},{12.000000000000:0,176,169},{13.000000000000:190,82,201},{14.000000000000:124,114,183},{15.000000000000:157,231,255},{16.000000000000:199,194,0},{17.000000000000:96,0,200},{18.000000000000:255,255,124},{19.000000000000:35,152,0},{21.000000000000:255,251,174},{22.000000000000:232,0,0},{23.000000000000:210,66,40},{26.000000000000:101,101,99},{27.000000000000:200,0,255},{28.000000000000:0,203,249},{30.000000000000:255,219,0},{31.000000000000:48,103,107},{34.000000000000:194,105,126}
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 50
|
||||
window_filter_module evt_type_label 1 "Thread: OpenMP subsystem of the ACTIVE thread"
|
||||
|
41
cfg/thread/openmp/task-id.cfg
Normal file
@ -0,0 +1,41 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW Thread: OpenMP task id of the ACTIVE thread >
|
||||
################################################################################
|
||||
window_name Thread: OpenMP task id of the ACTIVE thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 52
|
||||
window_filter_module evt_type_label 1 "Thread: OpenMP task id of the ACTIVE thread"
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: CPU affinity of the CURRENT thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: Flushing state of the CURRENT thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
41
cfg/thread/ovni/mark.cfg
Normal file
@ -0,0 +1,41 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW Thread: Mark value of the ACTIVE thread >
|
||||
################################################################################
|
||||
window_name Thread: Mark value of the ACTIVE thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 100
|
||||
window_filter_module evt_type_label 1 "Thread: Mark value of the ACTIVE thread"
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name CPU: PID of the RUNNING thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: State of the CURRENT thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
|
||||
window_name Thread: TID of the ACTIVE thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 0
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
|
42
cfg/thread/tampi/subsystem.cfg
Normal file
@ -0,0 +1,42 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 1
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW Thread: TAMPI subsystem of the ACTIVE thread >
|
||||
################################################################################
|
||||
window_name Thread: TAMPI subsystem of the ACTIVE thread
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 100
|
||||
window_position_y 100
|
||||
window_width 600
|
||||
window_height 150
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled false
|
||||
window_noncolor_mode true
|
||||
window_logical_filtered true
|
||||
window_physical_filtered false
|
||||
window_comm_fromto true
|
||||
window_comm_tagsize true
|
||||
window_comm_typeval true
|
||||
window_units Microseconds
|
||||
window_maximum_y 1000.0
|
||||
window_minimum_y 1.0
|
||||
window_compute_y_max true
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_randnotzero
|
||||
window_drawmode_rows draw_randnotzero
|
||||
window_pixel_size 1
|
||||
window_labels_to_draw 1
|
||||
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
|
||||
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
|
||||
window_filter_module evt_type 1 20
|
||||
window_filter_module evt_type_label 1 "Thread: TAMPI subsystem of the ACTIVE thread"
|
||||
|
7
cmake/CheckOmpSs2Compiler.cmake
Normal file
@ -0,0 +1,7 @@
|
||||
# Copyright (c) 2022-2023 Barcelona Supercomputing Center (BSC)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
include(CheckCCompilerFlag)
|
||||
|
||||
set(CMAKE_REQUIRED_LINK_OPTIONS "-fompss-2")
|
||||
check_c_compiler_flag("-fompss-2" OMPSS2_COMPILER_FOUND)
|
20
cmake/CheckPerfParanoid.cmake
Normal file
@ -0,0 +1,20 @@
|
||||
# Copyright (c) 2024 Barcelona Supercomputing Center (BSC)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
if(EXISTS "/proc/sys/kernel/perf_event_paranoid")
|
||||
file(READ "/proc/sys/kernel/perf_event_paranoid" paranoid_raw)
|
||||
|
||||
string(REPLACE "\n" "" paranoid_value "${paranoid_raw}")
|
||||
message(STATUS "Value of /proc/sys/kernel/perf_event_paranoid is ${paranoid_value}")
|
||||
|
||||
if(paranoid_value LESS_EQUAL 1)
|
||||
message(STATUS "Value of perf_event_paranoid suitable for Kernel tests")
|
||||
set(PERF_PARANOID_KERNEL ON)
|
||||
else()
|
||||
message(STATUS "Value of perf_event_paranoid NOT suitable for Kernel tests")
|
||||
set(PERF_PARANOID_KERNEL OFF)
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Missing /proc/sys/kernel/perf_event_paranoid")
|
||||
set(PERF_PARANOID_KERNEL OFF)
|
||||
endif()
|
@ -1,3 +1,6 @@
|
||||
# Copyright (c) 2022-2023 Barcelona Supercomputing Center (BSC)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
find_library(NANOS6_LIBRARY NAMES nanos6)
|
||||
|
@ -1,3 +1,6 @@
|
||||
# Copyright (c) 2022-2023 Barcelona Supercomputing Center (BSC)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
if(DEFINED ENV{NODES_HOME})
|
||||
@ -6,9 +9,9 @@ else()
|
||||
message(STATUS "NODES_HOME not set, refusing to search")
|
||||
endif()
|
||||
|
||||
find_library(NODES_LIBRARY NAMES nanos6 PATHS "${NODES_HOME}/lib" NO_DEFAULT_PATH)
|
||||
find_file(NODES_WRAPPER NAMES nanos6-main-wrapper.o PATHS "${NODES_HOME}/lib" NO_DEFAULT_PATH)
|
||||
find_path(NODES_INCLUDE_DIR nanos6.h PATHS "${NODES_HOME}/include" NO_DEFAULT_PATH)
|
||||
find_library(NODES_LIBRARY NAMES nodes PATHS "${NODES_HOME}/lib" NO_DEFAULT_PATH)
|
||||
find_file(NODES_WRAPPER NAMES nodes-main-wrapper.o PATHS "${NODES_HOME}/lib" NO_DEFAULT_PATH)
|
||||
find_path(NODES_INCLUDE_DIR nodes.h PATHS "${NODES_HOME}/include" NO_DEFAULT_PATH)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
|
19
cmake/FindNosv.cmake
Normal file
@ -0,0 +1,19 @@
|
||||
# Copyright (c) 2023 Barcelona Supercomputing Center (BSC)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
find_package(PkgConfig)
|
||||
|
||||
if(NOT PKG_CONFIG_FOUND)
|
||||
message(STATUS "pkg-config not found, required to locate nOSV-V")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Use PKG_CONFIG_LIBDIR=/path/to/nosv/install/lib/pkgconfig to use a custom
|
||||
# installation.
|
||||
pkg_search_module(NOSV IMPORTED_TARGET nos-v)
|
||||
|
||||
if(NOT NOSV_FOUND)
|
||||
message(STATUS "nOS-V not found")
|
||||
else()
|
||||
message(STATUS "Found nOS-V ${NOSV_VERSION} at ${NOSV_LINK_LIBRARIES}")
|
||||
endif()
|
1
doc/CHANGELOG.md
Symbolic link
@ -0,0 +1 @@
|
||||
../CHANGELOG.md
|
@ -65,5 +65,5 @@ to write the duplicated value with no error.
|
||||
A unique function can be set to each channel which will be called once a channel
|
||||
becomes dirty with `chan_set_dirty_cb()`. This callback will be called before
|
||||
`chan_set()`, `chan_push()` or `chan_pop()` returns. The [patch
|
||||
bay](../patchbay) uses this callback to detect when a channel is modified an run
|
||||
bay](patchbay.md) uses this callback to detect when a channel is modified an run
|
||||
other callbacks.
|
||||
|
101
doc/dev/events.md
Normal file
@ -0,0 +1,101 @@
|
||||
# Emulator events
|
||||
|
||||
The events processed by the emulator are described in each model.
|
||||
Unrecognized events will cause a panic and stop the emulator in most
|
||||
cases.
|
||||
|
||||
The events may have additional arguments in the payload, which are also
|
||||
described. To this end, a simple language was created to specify the
|
||||
format of each event in a concise declaration.
|
||||
|
||||
Additionally, a printf-like string is declared for each event, so they
|
||||
can be explained in plain English. The values of the arguments are also
|
||||
substituted in the description of the event following a extended printf
|
||||
format described below.
|
||||
|
||||
## Event format
|
||||
|
||||
The events are defined by a small language that defines the MCV of an event, if
|
||||
is a jumbo and the arguments in the payload (if any).
|
||||
|
||||
The grammar of this language is as follows in [ABNF][abnf].
|
||||
|
||||
[abnf]: https://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_form
|
||||
|
||||
```ABNF
|
||||
event-definition = event-mcv event-type [ "(" argument-list ")" ]
|
||||
event-mcv = VCHAR VCHAR VCHAR
|
||||
event-type = [ '+' ]
|
||||
argument-list = argument-type " " argument-name [ ", " argument-list ]
|
||||
argument-name = 1*(CHAR / DIGIT)
|
||||
argument-type = type-signed | type-unsigned | type-string
|
||||
type-signed = "i8" | "i16" | "i32" | "i64"
|
||||
type-unsigned = "u8" | "u16" | "u32" | "u64"
|
||||
type-string = "str"
|
||||
```
|
||||
|
||||
The `event-type` defines the type of event. Using the symbol `+` defines
|
||||
the event as jumbo. Otherwise, if not given it is considered a normal
|
||||
event.
|
||||
|
||||
Here are some examples:
|
||||
|
||||
- `OHp`: A normal event with `OHp` MCV and no payload.
|
||||
|
||||
- `OAs(i32 cpu)`: A normal event with `OAs` MCV that has the cpu stored in
|
||||
the payload as a 32 bits signed integer.
|
||||
|
||||
- `OHC(i32 cpu, u64 tag)`: A normal event with `OHC` MCV that has two
|
||||
arguments in the payload: the cpu stored as a 32 bit signed integer,
|
||||
and a tag stored as a 64 bit unsigned integer.
|
||||
|
||||
- `VYc+(u32 typeid, str label)`: A jumbo event with `VTc` MCV that has in the
|
||||
jumbo payload a 32 bits unsigned integer for the typeid followed by the label
|
||||
null-terminated string of variable size.
|
||||
|
||||
## Event description
|
||||
|
||||
To describe the meaning of each event, a description follows the event
|
||||
declaration. This description accepts printf-like format specifiers that
|
||||
are replaced with the value of the argument they refer to.
|
||||
|
||||
The formats are specified as follows:
|
||||
|
||||
```ABNF
|
||||
format-specifier = "%" [ printf-format] "{" argument-name "}"
|
||||
argument-name = 1*(CHAR / DIGIT)
|
||||
```
|
||||
|
||||
Where the optional `printf-format` is any string accepted by the format
|
||||
specifier of `printf()`, as defined in the manual `printf(3)`. If the
|
||||
`printf-format` is not given, the default format for the argument type
|
||||
is used.
|
||||
|
||||
Here are some examples of event descriptions of the previous events:
|
||||
|
||||
```c
|
||||
{ "OHp", "pauses the execution" },
|
||||
{ "OAs(i32 cpu)", "switches it's own affinity to the CPU %{cpu}" },
|
||||
{ "OHC(i32 cpu, u64 tag)", "creates a new thread on CPU %{cpu} with tag %#llx{tag}" },
|
||||
{ "VYc+(u32 typeid, str label)", "creates task type %{typeid} with label \"%{label}\"" },
|
||||
```
|
||||
|
||||
Which would be printed with ovnidump like:
|
||||
|
||||
```nohighlight
|
||||
OHp pauses the execution
|
||||
OAs switches it's own affinity to the CPU 7
|
||||
OHC creates a new thread on CPU 3 with tag 0x7f9239c6b6c0
|
||||
VYc creates task type 4 with label "block computation"
|
||||
```
|
||||
|
||||
## Model version
|
||||
|
||||
When adding new events of changing the format of already existing
|
||||
events, the version of the model that defines the event must be changed
|
||||
accordingly to the rules of [Semantic Versions](https://semver.org).
|
||||
|
||||
In general, adding new events will cause a minor increase in the
|
||||
version, while changing events will cause a major increase. Notice that
|
||||
the emulator will reject a stream which contains events from a model
|
||||
which is not compatible with the current model version.
|
@ -22,7 +22,7 @@ If the model is not enabled, no other function will be called.
|
||||
|
||||
The create function is called for each enabled model to allow them to allocate
|
||||
all the required structures to perform the emulation using the
|
||||
[extend](../extend) mechanism. All the required channels must be created and
|
||||
[extend](extend.md) mechanism. All the required channels must be created and
|
||||
registered in the patch bay in this function, so other models can found them in
|
||||
the next stage.
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Mux
|
||||
|
||||
The emulator provides a mechanism to interconnect [channels](../channels) in a
|
||||
The emulator provides a mechanism to interconnect [channels](channels.md) in a
|
||||
similar way as an [analog
|
||||
multiplexer](https://en.wikipedia.org/wiki/Multiplexer) by using the `mux`
|
||||
module.
|
||||
@ -19,7 +19,7 @@ selected. This allows a multiplexer to act as a filter too.
|
||||
|
||||
The typical use of multiplexers is to implement the tracking modes of channels.
|
||||
As an example, the following diagram shows two multiplexers used to implement
|
||||
the subsystem view of [Nanos6](../nanos6):
|
||||
the subsystem view of [Nanos6](../user/emulation/nanos6.md):
|
||||
|
||||

|
||||
|
||||
@ -51,5 +51,5 @@ Multiplexers allow models to interact with each other in a controlled way. In
|
||||
the example, the blue channel (*nanos6.thread0.subsystem*) is directly modified by
|
||||
the Nanos6 model when a new event is received. While the red channels are
|
||||
controlled by the ovni model. The rest of the channels are automatically updated
|
||||
in the propagation phase of the [bay](../patchbay) allowing the ovni model to
|
||||
in the propagation phase of the [bay](patchbay.md) allowing the ovni model to
|
||||
modify the Nanos6 Paraver view of the subsystems.
|
||||
|
@ -16,7 +16,7 @@ A channel can be connected to each row in a trace with `prv_register()`, so the
|
||||
new values of the channel get written in the trace. Only null and int64 data
|
||||
values are supported for now.
|
||||
|
||||
The emission phase is controlled by the [patch bay](../patchbay) and runs all
|
||||
The emission phase is controlled by the [patch bay](patchbay.md) and runs all
|
||||
the emit callbacks at once for all dirty channels.
|
||||
|
||||
## Duplicate values
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Patch bay
|
||||
|
||||
The patch bay (or simply bay) allows [channels](../channels/) to be registered
|
||||
The patch bay (or simply bay) allows [channels](channels.md) to be registered
|
||||
with their name so they are visible to all parts of the emulator and provides a
|
||||
way to run callbacks when the channels update their values.
|
||||
|
||||
|
@ -13,8 +13,9 @@ The ovni project implements a fast instrumentation library that records
|
||||
small events (starting at 12 bytes) during the execution of programs to
|
||||
later investigate how the execution happened.
|
||||
|
||||
The instrumentation process is split in two stages: [runtime](runtime)
|
||||
tracing and [emulation](emulation/).
|
||||
The instrumentation process is split in two stages:
|
||||
[runtime](user/runtime/index.md)
|
||||
tracing and [emulation](user/emulation/index.md).
|
||||
|
||||
During runtime, very short binary events are stored on disk which
|
||||
describe what is happening. Once the execution finishes, the events are
|
||||
|
@ -1,4 +1,4 @@
|
||||
mkdocs==1.4.1
|
||||
mkdocs==1.6.0
|
||||
markdown==3.3.7
|
||||
python-markdown-math==0.8
|
||||
jinja2==3.1.2
|
||||
|
@ -1,31 +0,0 @@
|
||||
# Overview
|
||||
|
||||
The objective of the ovni project is to provide insight into what
|
||||
happened at execution of a program.
|
||||
|
||||

|
||||
|
||||
The key pieces of software involved are instrumented so they emit events
|
||||
during the execution which allow the reconstruction of the execution
|
||||
later on.
|
||||
|
||||
During the execution phase, the information gathered in the events is
|
||||
kept very short and simple, so the overhead is kept at minimum to avoid
|
||||
disturbing the execution process. Here is an example of a single event
|
||||
emitted during the execution phase, informing the current thread to
|
||||
finish the execution:
|
||||
|
||||
00 4f 48 65 52 c0 27 b4 d3 ec 01 00
|
||||
|
||||
During the emulation phase, the events are read and processed in the
|
||||
emulator, reconstructing the execution. State transitions are recorded
|
||||
in a Paraver trace. Here is an example of the same thread ceasing the
|
||||
execution:
|
||||
|
||||
2:0:1:1:1:50105669:1:0
|
||||
|
||||
Finally, loading the trace in the Paraver program, we can generate a
|
||||
timeline visualization of the state change. Here is the example for the
|
||||
same state transition of the thread stopping the execution:
|
||||
|
||||

|
62
doc/user/concepts/part-model.md
Normal file
@ -0,0 +1,62 @@
|
||||
# Part model
|
||||
|
||||
Ovni has a model to represent the hardware components as well as the software
|
||||
concepts like threads or processes. Each concept is considered to be a *part*.
|
||||
Here is an example diagram depicting the part hierarchy:
|
||||
|
||||

|
||||
|
||||
Notice how a loom can restrict the CPUs of the node to its child processes.
|
||||
|
||||
## Software parts
|
||||
|
||||
These are not physical parts, but they abstract common concepts.
|
||||
|
||||
### Thread
|
||||
|
||||
A thread in ovni is directly mapped to a [POSIX
|
||||
thread](https://en.wikipedia.org/wiki/Pthreads) and they are identified by a
|
||||
`TID` which must be unique in a [node](#node). Threads in ovni have [a model with
|
||||
an internal state](../emulation/ovni.md/#thread_model) that tries to tracks the
|
||||
state of the real thread.
|
||||
|
||||
### Process
|
||||
|
||||
A process is directly mapped to a UNIX
|
||||
[process](https://en.wikipedia.org/wiki/Process_(computing)) and they are
|
||||
identified by a `PID` number which must be unique in a [node](#node).
|
||||
|
||||
### Loom
|
||||
|
||||
A loom has no direct mapping to a usual concept. It consists of a set of
|
||||
[CPUs](#cpu) from the same node and a set of processes that can *only run in
|
||||
those CPUs*. Each CPUs must belong to one and only one loom. It is often used
|
||||
to group CPUs that belong to the same process when running workloads with
|
||||
multiple processes (like with MPI).
|
||||
|
||||
Each loom has a virtual CPU which collects running threads that are not
|
||||
exclusively assigned to a physical CPU, so we cannot determine on which CPU they
|
||||
are running.
|
||||
|
||||
## Hardware parts
|
||||
|
||||
These parts have a physical object assigned.
|
||||
|
||||
### CPU
|
||||
|
||||
A CPU is a hardware thread that can execute at most one thread at a time. Each
|
||||
CPU must have a physical ID that is unique in a node. In ovni there is also a
|
||||
virtual CPU, which simply is used to collect threads that are not tied to an
|
||||
specific physical CPU, so it cannot be easily determined where they are running.
|
||||
|
||||
### Node
|
||||
|
||||
A *node* refers to a compute node, often a physical machine with memory and
|
||||
network which may contain one or more
|
||||
[sockets](https://en.wikipedia.org/wiki/CPU_socket), where each socket has one
|
||||
or more CPUs.
|
||||
|
||||
### System
|
||||
|
||||
A system represents the complete set of hardware parts and software parts that
|
||||
are known to ovni in a given trace.
|
516
doc/user/concepts/part-model.svg
Normal file
@ -0,0 +1,516 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="306.91663mm"
|
||||
height="127.00001mm"
|
||||
viewBox="0 0 306.91663 127.00001"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
sodipodi:docname="part-model.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#999999"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.73049944"
|
||||
inkscape:cx="629.70616"
|
||||
inkscape:cy="280.62992"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1031"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1">
|
||||
<inkscape:grid
|
||||
id="grid1"
|
||||
units="px"
|
||||
originx="-74.083327"
|
||||
originy="-89.958345"
|
||||
spacingx="0.26458333"
|
||||
spacingy="0.26458334"
|
||||
empcolor="#7a7aff"
|
||||
empopacity="0.25098039"
|
||||
color="#6a6aff"
|
||||
opacity="0.1254902"
|
||||
empspacing="5"
|
||||
dotted="false"
|
||||
gridanglex="30"
|
||||
gridanglez="30"
|
||||
visible="false" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1" />
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-74.083328,-89.958344)">
|
||||
<rect
|
||||
style="fill:none;stroke:none;stroke-width:0.264999;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
id="rect33"
|
||||
width="306.91663"
|
||||
height="127.00001"
|
||||
x="74.083328"
|
||||
y="89.958344" />
|
||||
<rect
|
||||
style="fill:#ffeeaa;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
id="rect32"
|
||||
width="121.70832"
|
||||
height="84.666679"
|
||||
x="253.99998"
|
||||
y="127.00001" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="290.19363"
|
||||
y="202.25124"
|
||||
id="text32"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan32"
|
||||
style="font-size:6.35px;stroke-width:0.264583"
|
||||
x="290.19363"
|
||||
y="202.25124">Hardware parts</tspan></text>
|
||||
<rect
|
||||
style="fill:#eeffaa;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
id="rect31"
|
||||
width="169.33333"
|
||||
height="84.666679"
|
||||
x="79.374992"
|
||||
y="127.00001" />
|
||||
<rect
|
||||
style="fill:#fff6d5;stroke:#000000;stroke-width:0.3;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
id="rect27"
|
||||
width="47.625004"
|
||||
height="21.166676"
|
||||
x="269.87497"
|
||||
y="148.16667"
|
||||
ry="2.645834" />
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect1"
|
||||
width="21.166662"
|
||||
height="10.583329"
|
||||
x="84.566666"
|
||||
y="174.52502"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="87.947342"
|
||||
y="181.39488"
|
||||
id="text1"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1"
|
||||
style="stroke-width:0.264583"
|
||||
x="87.947342"
|
||||
y="181.39488">Thread</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect3"
|
||||
width="21.166664"
|
||||
height="10.583337"
|
||||
x="111.12499"
|
||||
y="153.45834"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="113.57446"
|
||||
y="160.26309"
|
||||
id="text3"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3"
|
||||
style="stroke-width:0.264583"
|
||||
x="113.57446"
|
||||
y="160.26309">Process</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect4"
|
||||
width="21.166664"
|
||||
height="10.583333"
|
||||
x="111.12499"
|
||||
y="174.62502"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="114.50567"
|
||||
y="181.49487"
|
||||
id="text4"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4"
|
||||
style="stroke-width:0.264583"
|
||||
x="114.50567"
|
||||
y="181.49487">Thread</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect5"
|
||||
width="21.166658"
|
||||
height="10.583333"
|
||||
x="137.58333"
|
||||
y="174.62502"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="140.964"
|
||||
y="181.49487"
|
||||
id="text5"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5"
|
||||
style="stroke-width:0.264583"
|
||||
x="140.964"
|
||||
y="181.49487">Thread</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect6"
|
||||
width="21.166672"
|
||||
height="10.583333"
|
||||
x="169.33331"
|
||||
y="174.62502"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="172.71399"
|
||||
y="181.49487"
|
||||
id="text6"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan6"
|
||||
style="stroke-width:0.264583"
|
||||
x="172.71399"
|
||||
y="181.49487">Thread</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect7"
|
||||
width="20.966642"
|
||||
height="10.38336"
|
||||
x="195.99167"
|
||||
y="153.55833"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="198.24112"
|
||||
y="160.16312"
|
||||
id="text7"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan7"
|
||||
style="stroke-width:0.264583"
|
||||
x="198.24112"
|
||||
y="160.16312">Process</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect8"
|
||||
width="21.16667"
|
||||
height="10.583333"
|
||||
x="195.79164"
|
||||
y="174.62502"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="199.17232"
|
||||
y="181.49487"
|
||||
id="text8"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan8"
|
||||
style="stroke-width:0.264583"
|
||||
x="199.17232"
|
||||
y="181.49487">Thread</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect9"
|
||||
width="21.166666"
|
||||
height="10.583333"
|
||||
x="222.24997"
|
||||
y="174.62502"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="225.63065"
|
||||
y="181.49487"
|
||||
id="text9"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan9"
|
||||
style="stroke-width:0.264583"
|
||||
x="225.63065"
|
||||
y="181.49487">Thread</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect10"
|
||||
width="21.166658"
|
||||
height="10.583337"
|
||||
x="153.45833"
|
||||
y="132.29167"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="158.21979"
|
||||
y="139.09644"
|
||||
id="text10"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan10"
|
||||
style="stroke-width:0.264583"
|
||||
x="158.21979"
|
||||
y="139.09644">Loom</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect11"
|
||||
width="21.166651"
|
||||
height="10.58334"
|
||||
x="306.91666"
|
||||
y="132.29167"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="311.88068"
|
||||
y="139.16154"
|
||||
id="text11"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan11"
|
||||
style="stroke-width:0.264583"
|
||||
x="311.88068"
|
||||
y="139.16154">Node</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect12"
|
||||
width="15.875001"
|
||||
height="10.583341"
|
||||
x="275.16666"
|
||||
y="153.45834"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="278.86566"
|
||||
y="160.291"
|
||||
id="text12"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan12"
|
||||
style="stroke-width:0.264583"
|
||||
x="278.86566"
|
||||
y="160.291">CPU</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect13"
|
||||
width="15.874983"
|
||||
height="10.583341"
|
||||
x="296.33334"
|
||||
y="153.45834"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="300.03235"
|
||||
y="160.291"
|
||||
id="text13"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan13"
|
||||
style="stroke-width:0.264583"
|
||||
x="300.03235"
|
||||
y="160.291">CPU</tspan></text>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 121.70832,164.04168 0,10.58334"
|
||||
id="path15"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect3"
|
||||
inkscape:connection-end="#rect4" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 206.45046,163.94169 -0.0505,10.68333"
|
||||
id="path16"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect7"
|
||||
inkscape:connection-end="#rect8" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 212.94006,163.94169 13.30366,10.68333"
|
||||
id="path17"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-end="#rect9"
|
||||
inkscape:connection-start="#rect7" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 199.96086,163.94169 -13.40463,10.68333"
|
||||
id="path18"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect7"
|
||||
inkscape:connection-end="#rect6" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 128.32291,164.04168 13.22917,10.58334"
|
||||
id="path19"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect3"
|
||||
inkscape:connection-end="#rect5" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 115.03723,164.04168 -13.21614,10.48334"
|
||||
id="path20"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect3"
|
||||
inkscape:connection-end="#rect1" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 153.45833,142.87501 -21.16667,10.58333"
|
||||
id="path21"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect10"
|
||||
inkscape:connection-end="#rect3" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 174.62499,142.86254 21.44212,10.69579"
|
||||
id="path22"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect10"
|
||||
inkscape:connection-end="#rect7" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 314.19269,142.87501 -6.61457,10.58333"
|
||||
id="path24"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect11"
|
||||
inkscape:connection-end="#rect13" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 308.90102,142.87501 291.04166,153.8654"
|
||||
id="path25"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect11"
|
||||
inkscape:connection-end="#rect12" />
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect25"
|
||||
width="15.875013"
|
||||
height="10.583337"
|
||||
x="322.79163"
|
||||
y="153.45834"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="326.49063"
|
||||
y="160.291"
|
||||
id="text25"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan25"
|
||||
style="stroke-width:0.264583"
|
||||
x="326.49063"
|
||||
y="160.291">CPU</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect26"
|
||||
width="15.874991"
|
||||
height="10.583337"
|
||||
x="343.95831"
|
||||
y="153.45834"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="347.65732"
|
||||
y="160.291"
|
||||
id="text26"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan26"
|
||||
style="stroke-width:0.264583"
|
||||
x="347.65732"
|
||||
y="160.291">CPU</tspan></text>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 320.80727,142.87501 6.61457,10.58333"
|
||||
id="path26"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect11"
|
||||
inkscape:connection-end="#rect25" />
|
||||
<path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 326.09894,142.87501 17.85937,10.99039"
|
||||
id="path27"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect11"
|
||||
inkscape:connection-end="#rect26" />
|
||||
<path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 174.62499,139.70001 95.24998,19.05"
|
||||
id="path28"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect10" />
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect29"
|
||||
width="21.166666"
|
||||
height="10.583335"
|
||||
x="216.95831"
|
||||
y="95.250008"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="219.6889"
|
||||
y="101.67236"
|
||||
id="text29"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan29"
|
||||
style="stroke-width:0.264583"
|
||||
x="219.6889"
|
||||
y="101.67236">System</tspan></text>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 238.12498,104.89952 68.79168,28.32598"
|
||||
id="path29"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect29"
|
||||
inkscape:connection-end="#rect11" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 218.47022,105.83334 -45.35713,26.45833"
|
||||
id="path30"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect29"
|
||||
inkscape:connection-end="#rect10" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="140.81671"
|
||||
y="202.25124"
|
||||
id="text31"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan31"
|
||||
style="font-size:6.35px;stroke-width:0.264583"
|
||||
x="140.81671"
|
||||
y="202.25124">Software parts</tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 18 KiB |
123
doc/user/concepts/trace.md
Normal file
@ -0,0 +1,123 @@
|
||||
# Trace concepts
|
||||
|
||||
When using libovni to generate traces or the emulator to process them, there are
|
||||
several concepts to keep in mind.
|
||||
|
||||
## Trace elements
|
||||
|
||||
The information generated by a program or later processed by other ovni tools is
|
||||
known as a trace. A runtime trace stores the information as-is in disk from a
|
||||
program execution. While a emulation trace is generated from the runtime trace
|
||||
for visualization with Paraver.
|
||||
|
||||
Both runtime and emulation traces are always stored inside the same directory,
|
||||
by default `ovni/`, which is known as the *trace directory*.
|
||||
|
||||
Here are the components of a runtime trace, as generated by libovni:
|
||||
|
||||
<p align="center">
|
||||
<img alt="Trace concepts" src="../trace.svg">
|
||||
</p>
|
||||
|
||||
### Stream
|
||||
|
||||
A stream is a directory which contains a binary stream and the associated stream
|
||||
metadata file. Each stream is associated with a given part of a system. As of
|
||||
now, libovni can only generate streams associated to [threads](part-model.md#thread).
|
||||
|
||||
### Stream metadata
|
||||
|
||||
The stream metadata is a JSON file named `stream.json` which holds information
|
||||
about the stream itself.
|
||||
|
||||
### Binary stream
|
||||
|
||||
A binary stream is a file named `stream.obs` (.obs stands for Ovni Binary
|
||||
Stream) composed of a header and a concatenated array of events without padding.
|
||||
Notice that each event may have different length.
|
||||
|
||||
### Event
|
||||
|
||||
An event is a point in time that has some information associated. Events written
|
||||
at runtime by libovni have at MCV, a clock and a optional payload. The list of
|
||||
all events recognized by the emulator can be found [here](../emulation/events.md).
|
||||
|
||||
Events can be displayed by ovnidump, which shows an explanation of what the
|
||||
event means:
|
||||
|
||||
```txt
|
||||
$ ovnidump ovni/loom.hop.nosv-u1000/proc.1121064 | grep -A 10 VTx | head
|
||||
517267929632815 VTx thread.1121064 executes the task 1 with bodyid 0
|
||||
517267930261672 VYc thread.1121064 creates task type 2 with label "task"
|
||||
517267930875858 VTC thread.1121064 creates parallel task 2 with type 2
|
||||
517267930877789 VU[ thread.1121064 starts submitting a task
|
||||
517267930877990 VU] thread.1121064 stops submitting a task
|
||||
517267930878098 VTC thread.1121064 creates parallel task 3 with type 2
|
||||
517267930878196 VU[ thread.1121064 starts submitting a task
|
||||
517267930878349 VU] thread.1121064 stops submitting a task
|
||||
517267930878432 VTC thread.1121064 creates parallel task 4 with type 2
|
||||
517267930878494 VU[ thread.1121064 starts submitting a task
|
||||
```
|
||||
|
||||
There are two types or events: normal and jumbo events, the latter can hold
|
||||
large attached payloads.
|
||||
|
||||
### MCV
|
||||
|
||||
The MCV acronym is the abbreviation of Model-Class-Value, which are a three
|
||||
characters that identify any event. The MCV is shown in the ovnitop and ovnidump
|
||||
tools and allows easy filtering with grep, for a single or related events:
|
||||
|
||||
```
|
||||
$ ovnitop ovni | grep VT
|
||||
VTe 20002
|
||||
VTx 20002
|
||||
VTC 200
|
||||
VTc 2
|
||||
VTp 1
|
||||
VTr 1
|
||||
```
|
||||
|
||||
### Clock
|
||||
|
||||
A clock is a 64 bit counter, which counts the number of nanoseconds from an
|
||||
arbitrary point in time in the past. Each event has the value of the clock
|
||||
stored inside, to indicate when that event happened. In a given trace there can
|
||||
be multiple clocks which don't refer to the same point in the past and must be
|
||||
corrected so they all produce an ordered sequence of events. The ovnisync
|
||||
program performs this correction by measuring the difference across clocks of
|
||||
different nodes.
|
||||
|
||||
### Payload
|
||||
|
||||
Events may have associated additional information which is stored in the stream.
|
||||
Normal events can hold up to 16 bytes, otherwise the jumbo events must be used
|
||||
to hold additional payload.
|
||||
|
||||
## Other related concepts
|
||||
|
||||
Apart from the trace itself, there are other concepts to keep in mind when the
|
||||
trace is being processed by the emulator.
|
||||
|
||||
### Event model
|
||||
|
||||
Each event belongs to an event model, as identified by the model character in
|
||||
the MCV. An event model is composed of several components:
|
||||
|
||||
- A set of [events](#event) all with the same model identifier in the
|
||||
[MCV](#mcv)
|
||||
- The emulator code that processes those events.
|
||||
- A human readable name, like `ovni` or `nanos6`.
|
||||
- A semantic version.
|
||||
|
||||
### State
|
||||
|
||||
A state is a discrete value that can change over time based on the events the
|
||||
emulator receives. Usually a single event causes a single state change, which is
|
||||
then written to the Paraver traces. An example is the thread state, which can
|
||||
change over time based on the events `OH*` that indicate a state transition
|
||||
of the current thread.
|
||||
|
||||
In contrast with an event, states have a duration associated which can usually
|
||||
be observed in Paraver. Notice that the trace only contains events, the states
|
||||
are computed at emulation.
|
474
doc/user/concepts/trace.svg
Normal file
@ -0,0 +1,474 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="116.41666mm"
|
||||
height="105.83334mm"
|
||||
viewBox="0 0 116.41666 105.83334"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
sodipodi:docname="trace.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#999999"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="true"
|
||||
inkscape:zoom="1.4609989"
|
||||
inkscape:cx="248.80238"
|
||||
inkscape:cy="199.17879"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1031"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1">
|
||||
<inkscape:grid
|
||||
id="grid1"
|
||||
units="px"
|
||||
originx="-39.687498"
|
||||
originy="-15.875"
|
||||
spacingx="0.26458333"
|
||||
spacingy="0.26458334"
|
||||
empcolor="#7a7aff"
|
||||
empopacity="0.25098039"
|
||||
color="#6a6aff"
|
||||
opacity="0.1254902"
|
||||
empspacing="5"
|
||||
dotted="false"
|
||||
gridanglex="30"
|
||||
gridanglez="30"
|
||||
visible="true" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1">
|
||||
<rect
|
||||
x="45"
|
||||
y="370"
|
||||
width="209.99998"
|
||||
height="35"
|
||||
id="rect15" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-39.687498,-15.875)">
|
||||
<g
|
||||
id="g59"
|
||||
transform="translate(5.5781353,-0.74017783)"
|
||||
style="stroke-width:0.15875;stroke-dasharray:none">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="100.23113"
|
||||
y="24.896034"
|
||||
id="text22"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan22"
|
||||
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="100.23113"
|
||||
y="24.896034">Trace</tspan></text>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect32"
|
||||
width="15.875"
|
||||
height="7.9375005"
|
||||
x="92.281235"
|
||||
y="19.4142" />
|
||||
</g>
|
||||
<g
|
||||
id="g57"
|
||||
transform="translate(-0.84260657,-0.98969722)"
|
||||
style="stroke-width:0.15875;stroke-dasharray:none">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="106.39689"
|
||||
y="46.186943"
|
||||
id="text24"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan24"
|
||||
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="106.39689"
|
||||
y="46.186943">Stream</tspan></text>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect33"
|
||||
width="21.166666"
|
||||
height="7.9375019"
|
||||
x="96.092606"
|
||||
y="40.6772" />
|
||||
</g>
|
||||
<g
|
||||
id="g56"
|
||||
transform="translate(0.32292488,-0.89336269)"
|
||||
style="stroke-width:0.15875;stroke-dasharray:none">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="78.773026"
|
||||
y="46.090603"
|
||||
id="text23"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan23"
|
||||
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="78.773026"
|
||||
y="46.090603">Stream</tspan></text>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect34"
|
||||
width="21.166666"
|
||||
height="7.9375"
|
||||
x="68.468742"
|
||||
y="40.580864" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 100.80665,26.611522 84.365216,39.687501"
|
||||
id="path35"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect32"
|
||||
inkscape:connection-end="#rect34" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 105.80376,26.611522 0.0227,13.075981"
|
||||
id="path36"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect32"
|
||||
inkscape:connection-end="#rect33" />
|
||||
<g
|
||||
id="g54"
|
||||
style="stroke-width:0.15875;stroke-dasharray:none"
|
||||
transform="translate(-0.99999828,-3.5391978)">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="58.792854"
|
||||
y="72.586143"
|
||||
id="text25"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan25"
|
||||
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="58.792854"
|
||||
y="72.586143">Metadata</tspan></text>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect36"
|
||||
width="26.458336"
|
||||
height="7.9375"
|
||||
x="45.979164"
|
||||
y="67.0392" />
|
||||
</g>
|
||||
<g
|
||||
id="g55"
|
||||
style="stroke-width:0.15875;stroke-dasharray:none"
|
||||
transform="translate(-0.99999828,-3.5391978)">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="97.157433"
|
||||
y="72.175835"
|
||||
id="text26"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan26"
|
||||
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="97.157433"
|
||||
y="72.175835">Binary stream</tspan></text>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect37"
|
||||
width="34.395832"
|
||||
height="7.9375"
|
||||
x="80.374992"
|
||||
y="67.0392" />
|
||||
</g>
|
||||
<rect
|
||||
style="stroke-width:0.15875;stroke-dasharray:none;fill:none;stroke:none;stroke-linecap:square"
|
||||
id="rect60"
|
||||
width="116.41666"
|
||||
height="105.83334"
|
||||
x="40.687496"
|
||||
y="19.414198"
|
||||
inkscape:label="background"
|
||||
transform="translate(-0.99999735,-3.5391979)" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 75.847223,47.625001 61.736111,63.500002"
|
||||
id="path37"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect34"
|
||||
inkscape:connection-end="#rect36" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 82.241318,47.625001 93.706592,63.500002"
|
||||
id="path38"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect34"
|
||||
inkscape:connection-end="#rect37" />
|
||||
<g
|
||||
id="g53"
|
||||
style="stroke-width:0.15875;stroke-dasharray:none"
|
||||
transform="translate(-8.2507438,-3.0742007)">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="62.074863"
|
||||
y="95.933655"
|
||||
id="text27"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan27"
|
||||
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="62.074863"
|
||||
y="95.933655">Header</tspan></text>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect38"
|
||||
width="23.812506"
|
||||
height="7.9375014"
|
||||
x="50.584076"
|
||||
y="90.386703" />
|
||||
</g>
|
||||
<g
|
||||
id="g52"
|
||||
transform="translate(-8.2507438,-3.3066989)"
|
||||
style="stroke-width:0.15875;stroke-dasharray:none">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="91.411552"
|
||||
y="96.101036"
|
||||
id="text28"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan28"
|
||||
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="91.411552"
|
||||
y="96.101036">Event</tspan></text>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect39"
|
||||
width="23.812506"
|
||||
height="7.9375014"
|
||||
x="79.920769"
|
||||
y="90.619202" />
|
||||
</g>
|
||||
<g
|
||||
id="g51"
|
||||
style="stroke-width:0.15875;stroke-dasharray:none"
|
||||
transform="translate(-8.2507438,-3.0742007)">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="120.28321"
|
||||
y="95.868538"
|
||||
id="text29"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan29"
|
||||
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="120.28321"
|
||||
y="95.868538">Event</tspan></text>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect40"
|
||||
width="23.812506"
|
||||
height="7.9375014"
|
||||
x="108.79243"
|
||||
y="90.386703" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 89.517356,71.437502 61.29514,87.312503"
|
||||
id="path40"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect37"
|
||||
inkscape:connection-end="#rect38" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 94.406805,71.437502 85.742383,87.312503"
|
||||
id="path41"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect37"
|
||||
inkscape:connection-end="#rect39" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 99.218748,71.437502 109.8021,87.312503"
|
||||
id="path42"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect37"
|
||||
inkscape:connection-end="#rect40" />
|
||||
<g
|
||||
id="g46"
|
||||
transform="translate(-68.659367,2.7781237)"
|
||||
style="stroke-width:0.15875;stroke-dasharray:none">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="123.93869"
|
||||
y="113.98891"
|
||||
id="text30"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan30"
|
||||
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="123.93869"
|
||||
y="113.98891">MCV</tspan></text>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect42"
|
||||
width="15.875001"
|
||||
height="7.9375038"
|
||||
x="116.41666"
|
||||
y="108.47917" />
|
||||
</g>
|
||||
<g
|
||||
id="g45"
|
||||
transform="translate(-68.659367,5.4239515)"
|
||||
style="stroke-width:0.15875;stroke-dasharray:none">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="147.92894"
|
||||
y="111.38029"
|
||||
id="text31"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan31"
|
||||
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="147.92894"
|
||||
y="111.38029">Clock</tspan></text>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect43"
|
||||
width="15.875001"
|
||||
height="7.9375038"
|
||||
x="140.22916"
|
||||
y="105.83334" />
|
||||
</g>
|
||||
<g
|
||||
id="g44"
|
||||
transform="translate(-66.112857,13.610614)"
|
||||
style="stroke-width:0.15875;stroke-dasharray:none">
|
||||
<g
|
||||
id="g60"
|
||||
style="stroke-width:0.15875;stroke-dasharray:none">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="172.85362"
|
||||
y="102.65102"
|
||||
id="text32"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan32"
|
||||
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="172.85362"
|
||||
y="102.65102">Payload</tspan></text>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect44"
|
||||
width="23.812506"
|
||||
height="7.9375014"
|
||||
x="161.36285"
|
||||
y="97.514389" />
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 83.366344,95.250004 80.27399,111.2573"
|
||||
id="path47"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-end="#g45" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 80.082847,95.250004 60.540101,111.2573"
|
||||
id="path48"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-end="#g46" />
|
||||
<g
|
||||
id="g58"
|
||||
transform="translate(-1.9073076,-1.4153422)"
|
||||
style="stroke-width:0.15875;stroke-dasharray:none">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="132.47266"
|
||||
y="46.496338"
|
||||
id="text49"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan49"
|
||||
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="132.47266"
|
||||
y="46.496338">...</tspan></text>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect49"
|
||||
width="18.619415"
|
||||
height="7.9374995"
|
||||
x="123.61564"
|
||||
y="41.102844" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 110.56031,26.611522 15.69429,13.07598"
|
||||
id="path49"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-end="#rect49"
|
||||
inkscape:connection-start="#rect32" />
|
||||
<g
|
||||
id="g50"
|
||||
transform="translate(-8.2507438,-2.9293636)"
|
||||
style="stroke-width:0.15875;stroke-dasharray:none">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="149.35014"
|
||||
y="95.635361"
|
||||
id="text50"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan50"
|
||||
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
|
||||
x="149.35014"
|
||||
y="95.635361">...</tspan></text>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
|
||||
id="rect40-5"
|
||||
width="23.812506"
|
||||
height="7.9375014"
|
||||
x="137.89658"
|
||||
y="90.241867" />
|
||||
</g>
|
||||
<path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 104.06944,71.437502 29.98612,15.875001"
|
||||
id="path50"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#rect37"
|
||||
inkscape:connection-end="#g50" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 87.506274,95.250004 103.22625,111.125"
|
||||
id="path60"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:connection-start="#g52"
|
||||
inkscape:connection-end="#g44" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 19 KiB |
@ -1,186 +1,760 @@
|
||||
# Emulator events
|
||||
|
||||
This file contains an exhaustive list of events supported by the emulator.
|
||||
This is a exhaustive list of the events recognized by the emulator.
|
||||
Built on Nov 13 2024.
|
||||
|
||||
- Punctual events don't produce a state transition.
|
||||
- All events refer to the current thread.
|
||||
- Descriptions must be kept short.
|
||||
## Model nanos6
|
||||
|
||||
```txt
|
||||
**********************************************************
|
||||
Please keep this list synchronized with the emulator code!
|
||||
**********************************************************
|
||||
List of events for the model *nanos6* with identifier **`6`** at version `1.1.0`:
|
||||
<dl>
|
||||
<dt><a id="6Yc" href="#6Yc"><pre>6Yc+(u32 typeid, str label)</pre></a></dt>
|
||||
<dd>creates task type %{typeid} with label "%{label}"</dd>
|
||||
<dt><a id="6Tc" href="#6Tc"><pre>6Tc(u32 taskid, u32 typeid)</pre></a></dt>
|
||||
<dd>creates task %{taskid} with type %{typeid}</dd>
|
||||
<dt><a id="6Tx" href="#6Tx"><pre>6Tx(u32 taskid)</pre></a></dt>
|
||||
<dd>executes the task %{taskid}</dd>
|
||||
<dt><a id="6Te" href="#6Te"><pre>6Te(u32 taskid)</pre></a></dt>
|
||||
<dd>ends the task %{taskid}</dd>
|
||||
<dt><a id="6Tp" href="#6Tp"><pre>6Tp(u32 taskid)</pre></a></dt>
|
||||
<dd>pauses the task %{taskid}</dd>
|
||||
<dt><a id="6Tr" href="#6Tr"><pre>6Tr(u32 taskid)</pre></a></dt>
|
||||
<dd>resumes the task %{taskid}</dd>
|
||||
<dt><a id="6W[" href="#6W["><pre>6W[</pre></a></dt>
|
||||
<dd>enters worker main loop, looking for tasks</dd>
|
||||
<dt><a id="6W]" href="#6W]"><pre>6W]</pre></a></dt>
|
||||
<dd>leaves worker main loop, looking for tasks</dd>
|
||||
<dt><a id="6Wt" href="#6Wt"><pre>6Wt</pre></a></dt>
|
||||
<dd>begins handling a task via handleTask()</dd>
|
||||
<dt><a id="6WT" href="#6WT"><pre>6WT</pre></a></dt>
|
||||
<dd>ceases handling a task via handleTask()</dd>
|
||||
<dt><a id="6Ww" href="#6Ww"><pre>6Ww</pre></a></dt>
|
||||
<dd>begins switching to another worker via switchTo()</dd>
|
||||
<dt><a id="6WW" href="#6WW"><pre>6WW</pre></a></dt>
|
||||
<dd>ceases switching to another worker via switchTo()</dd>
|
||||
<dt><a id="6Wm" href="#6Wm"><pre>6Wm</pre></a></dt>
|
||||
<dd>begins migrating the current worker to another CPU</dd>
|
||||
<dt><a id="6WM" href="#6WM"><pre>6WM</pre></a></dt>
|
||||
<dd>ceases migrating the current worker to another CPU</dd>
|
||||
<dt><a id="6Ws" href="#6Ws"><pre>6Ws</pre></a></dt>
|
||||
<dd>begins suspending the worker via suspend()</dd>
|
||||
<dt><a id="6WS" href="#6WS"><pre>6WS</pre></a></dt>
|
||||
<dd>ceases suspending the worker via suspend()</dd>
|
||||
<dt><a id="6Wr" href="#6Wr"><pre>6Wr</pre></a></dt>
|
||||
<dd>begins resuming another worker via resume()</dd>
|
||||
<dt><a id="6WR" href="#6WR"><pre>6WR</pre></a></dt>
|
||||
<dd>ceases resuming another worker via resume()</dd>
|
||||
<dt><a id="6Wg" href="#6Wg"><pre>6Wg</pre></a></dt>
|
||||
<dd>enters sponge mode (absorbing system noise)</dd>
|
||||
<dt><a id="6WG" href="#6WG"><pre>6WG</pre></a></dt>
|
||||
<dd>leaves sponge mode (absorbing system noise)</dd>
|
||||
<dt><a id="6W*" href="#6W*"><pre>6W*</pre></a></dt>
|
||||
<dd>signals another worker to wake up</dd>
|
||||
<dt><a id="6Pp" href="#6Pp"><pre>6Pp</pre></a></dt>
|
||||
<dd>sets progress state to Progressing</dd>
|
||||
<dt><a id="6Pr" href="#6Pr"><pre>6Pr</pre></a></dt>
|
||||
<dd>sets progress state to Resting</dd>
|
||||
<dt><a id="6Pa" href="#6Pa"><pre>6Pa</pre></a></dt>
|
||||
<dd>sets progress state to Absorbing</dd>
|
||||
<dt><a id="6C[" href="#6C["><pre>6C[</pre></a></dt>
|
||||
<dd>begins creating a new task</dd>
|
||||
<dt><a id="6C]" href="#6C]"><pre>6C]</pre></a></dt>
|
||||
<dd>ceases creating a new task</dd>
|
||||
<dt><a id="6U[" href="#6U["><pre>6U[</pre></a></dt>
|
||||
<dd>begins submitting a task via submitTask()</dd>
|
||||
<dt><a id="6U]" href="#6U]"><pre>6U]</pre></a></dt>
|
||||
<dd>ceases submitting a task via submitTask()</dd>
|
||||
<dt><a id="6F[" href="#6F["><pre>6F[</pre></a></dt>
|
||||
<dd>begins spawning a function via spawnFunction()</dd>
|
||||
<dt><a id="6F]" href="#6F]"><pre>6F]</pre></a></dt>
|
||||
<dd>ceases spawning a function via spawnFunction()</dd>
|
||||
<dt><a id="6t[" href="#6t["><pre>6t[</pre></a></dt>
|
||||
<dd>enters the task body</dd>
|
||||
<dt><a id="6t]" href="#6t]"><pre>6t]</pre></a></dt>
|
||||
<dd>leaves the task body</dd>
|
||||
<dt><a id="6O[" href="#6O["><pre>6O[</pre></a></dt>
|
||||
<dd>begins running the task body as taskfor collaborator</dd>
|
||||
<dt><a id="6O]" href="#6O]"><pre>6O]</pre></a></dt>
|
||||
<dd>ceases running the task body as taskfor collaborator</dd>
|
||||
<dt><a id="6Ma" href="#6Ma"><pre>6Ma</pre></a></dt>
|
||||
<dd>starts allocating memory</dd>
|
||||
<dt><a id="6MA" href="#6MA"><pre>6MA</pre></a></dt>
|
||||
<dd>stops allocating memory</dd>
|
||||
<dt><a id="6Mf" href="#6Mf"><pre>6Mf</pre></a></dt>
|
||||
<dd>starts freeing memory</dd>
|
||||
<dt><a id="6MF" href="#6MF"><pre>6MF</pre></a></dt>
|
||||
<dd>stops freeing memory</dd>
|
||||
<dt><a id="6Dr" href="#6Dr"><pre>6Dr</pre></a></dt>
|
||||
<dd>begins registration of task dependencies</dd>
|
||||
<dt><a id="6DR" href="#6DR"><pre>6DR</pre></a></dt>
|
||||
<dd>ceases registration of task dependencies</dd>
|
||||
<dt><a id="6Du" href="#6Du"><pre>6Du</pre></a></dt>
|
||||
<dd>begins unregistration of task dependencies</dd>
|
||||
<dt><a id="6DU" href="#6DU"><pre>6DU</pre></a></dt>
|
||||
<dd>ceases unregistration of task dependencies</dd>
|
||||
<dt><a id="6S[" href="#6S["><pre>6S[</pre></a></dt>
|
||||
<dd>begins scheduler serving mode</dd>
|
||||
<dt><a id="6S]" href="#6S]"><pre>6S]</pre></a></dt>
|
||||
<dd>ceases scheduler serving mode</dd>
|
||||
<dt><a id="6Sa" href="#6Sa"><pre>6Sa</pre></a></dt>
|
||||
<dd>begins submitting a ready task via addReadyTask()</dd>
|
||||
<dt><a id="6SA" href="#6SA"><pre>6SA</pre></a></dt>
|
||||
<dd>ceases submitting a ready task via addReadyTask()</dd>
|
||||
<dt><a id="6Sp" href="#6Sp"><pre>6Sp</pre></a></dt>
|
||||
<dd>begins processing ready tasks via processReadyTasks()</dd>
|
||||
<dt><a id="6SP" href="#6SP"><pre>6SP</pre></a></dt>
|
||||
<dd>ceases processing ready tasks via processReadyTasks()</dd>
|
||||
<dt><a id="6S@" href="#6S@"><pre>6S@</pre></a></dt>
|
||||
<dd>self assigns itself a task</dd>
|
||||
<dt><a id="6Sr" href="#6Sr"><pre>6Sr</pre></a></dt>
|
||||
<dd>receives a task from another thread</dd>
|
||||
<dt><a id="6Ss" href="#6Ss"><pre>6Ss</pre></a></dt>
|
||||
<dd>sends a task to another thread</dd>
|
||||
<dt><a id="6Bb" href="#6Bb"><pre>6Bb</pre></a></dt>
|
||||
<dd>begins blocking the current task</dd>
|
||||
<dt><a id="6BB" href="#6BB"><pre>6BB</pre></a></dt>
|
||||
<dd>ceases blocking the current task</dd>
|
||||
<dt><a id="6Bu" href="#6Bu"><pre>6Bu</pre></a></dt>
|
||||
<dd>begins unblocking a task</dd>
|
||||
<dt><a id="6BU" href="#6BU"><pre>6BU</pre></a></dt>
|
||||
<dd>ceases unblocking a task</dd>
|
||||
<dt><a id="6Bw" href="#6Bw"><pre>6Bw</pre></a></dt>
|
||||
<dd>enters a task wait</dd>
|
||||
<dt><a id="6BW" href="#6BW"><pre>6BW</pre></a></dt>
|
||||
<dd>leaves a task wait</dd>
|
||||
<dt><a id="6Bf" href="#6Bf"><pre>6Bf</pre></a></dt>
|
||||
<dd>enters a wait for</dd>
|
||||
<dt><a id="6BF" href="#6BF"><pre>6BF</pre></a></dt>
|
||||
<dd>leaves a wait for</dd>
|
||||
<dt><a id="6He" href="#6He"><pre>6He</pre></a></dt>
|
||||
<dd>begins execution as external thread</dd>
|
||||
<dt><a id="6HE" href="#6HE"><pre>6HE</pre></a></dt>
|
||||
<dd>ceases execution as external thread</dd>
|
||||
<dt><a id="6Hw" href="#6Hw"><pre>6Hw</pre></a></dt>
|
||||
<dd>begins execution as worker</dd>
|
||||
<dt><a id="6HW" href="#6HW"><pre>6HW</pre></a></dt>
|
||||
<dd>ceases execution as worker</dd>
|
||||
<dt><a id="6Hl" href="#6Hl"><pre>6Hl</pre></a></dt>
|
||||
<dd>begins execution as leader</dd>
|
||||
<dt><a id="6HL" href="#6HL"><pre>6HL</pre></a></dt>
|
||||
<dd>ceases execution as leader</dd>
|
||||
<dt><a id="6Hm" href="#6Hm"><pre>6Hm</pre></a></dt>
|
||||
<dd>begins execution as main thread</dd>
|
||||
<dt><a id="6HM" href="#6HM"><pre>6HM</pre></a></dt>
|
||||
<dd>ceases execution as main thread</dd>
|
||||
</dl>
|
||||
|
||||
MCV = Model Category Value
|
||||
## Model nodes
|
||||
|
||||
------------------------------------------------------------
|
||||
MCV Description
|
||||
--------------------- Ovni (model=O) -----------------------
|
||||
List of events for the model *nodes* with identifier **`D`** at version `1.0.0`:
|
||||
<dl>
|
||||
<dt><a id="DR[" href="#DR["><pre>DR[</pre></a></dt>
|
||||
<dd>begins registering task accesses</dd>
|
||||
<dt><a id="DR]" href="#DR]"><pre>DR]</pre></a></dt>
|
||||
<dd>ceases registering task accesses</dd>
|
||||
<dt><a id="DU[" href="#DU["><pre>DU[</pre></a></dt>
|
||||
<dd>begins unregistering task accesses</dd>
|
||||
<dt><a id="DU]" href="#DU]"><pre>DU]</pre></a></dt>
|
||||
<dd>ceases unregistering task accesses</dd>
|
||||
<dt><a id="DW[" href="#DW["><pre>DW[</pre></a></dt>
|
||||
<dd>enters a blocking condition (waiting for an If0 task)</dd>
|
||||
<dt><a id="DW]" href="#DW]"><pre>DW]</pre></a></dt>
|
||||
<dd>leaves a blocking condition (waiting for an If0 task)</dd>
|
||||
<dt><a id="DI[" href="#DI["><pre>DI[</pre></a></dt>
|
||||
<dd>begins the inline execution of an If0 task</dd>
|
||||
<dt><a id="DI]" href="#DI]"><pre>DI]</pre></a></dt>
|
||||
<dd>ceases the inline execution of an If0 task</dd>
|
||||
<dt><a id="DT[" href="#DT["><pre>DT[</pre></a></dt>
|
||||
<dd>enters a taskwait</dd>
|
||||
<dt><a id="DT]" href="#DT]"><pre>DT]</pre></a></dt>
|
||||
<dd>leaves a taskwait</dd>
|
||||
<dt><a id="DC[" href="#DC["><pre>DC[</pre></a></dt>
|
||||
<dd>begins creating a task</dd>
|
||||
<dt><a id="DC]" href="#DC]"><pre>DC]</pre></a></dt>
|
||||
<dd>ceases creating a task</dd>
|
||||
<dt><a id="DS[" href="#DS["><pre>DS[</pre></a></dt>
|
||||
<dd>begins submitting a task</dd>
|
||||
<dt><a id="DS]" href="#DS]"><pre>DS]</pre></a></dt>
|
||||
<dd>ceases submitting a task</dd>
|
||||
<dt><a id="DP[" href="#DP["><pre>DP[</pre></a></dt>
|
||||
<dd>begins spawning a function</dd>
|
||||
<dt><a id="DP]" href="#DP]"><pre>DP]</pre></a></dt>
|
||||
<dd>ceases spawning a function</dd>
|
||||
</dl>
|
||||
|
||||
OHC Creates a new thread (punctual event)
|
||||
OHx Begins the execution
|
||||
OHp Pauses the execution
|
||||
OHc Enters the cooling state (about to be paused)
|
||||
OHw Enters the warming state (about to be running)
|
||||
OHe Ends the execution
|
||||
## Model kernel
|
||||
|
||||
OAs Switches it's own affinity to the given CPU
|
||||
OAr Remotely switches the affinity of the given thread
|
||||
List of events for the model *kernel* with identifier **`K`** at version `1.0.0`:
|
||||
<dl>
|
||||
<dt><a id="KCO" href="#KCO"><pre>KCO</pre></a></dt>
|
||||
<dd>out of CPU</dd>
|
||||
<dt><a id="KCI" href="#KCI"><pre>KCI</pre></a></dt>
|
||||
<dd>back to CPU</dd>
|
||||
</dl>
|
||||
|
||||
OB. Emits a burst event to measure latency
|
||||
## Model mpi
|
||||
|
||||
OU[ Enters a region which contain past events (HACK)
|
||||
OU] Exits the region of past events (HACK)
|
||||
List of events for the model *mpi* with identifier **`M`** at version `1.0.0`:
|
||||
<dl>
|
||||
<dt><a id="MUf" href="#MUf"><pre>MUf</pre></a></dt>
|
||||
<dd>enters MPI_Finalize()</dd>
|
||||
<dt><a id="MUF" href="#MUF"><pre>MUF</pre></a></dt>
|
||||
<dd>leaves MPI_Finalize()</dd>
|
||||
<dt><a id="MUi" href="#MUi"><pre>MUi</pre></a></dt>
|
||||
<dd>enters MPI_Init()</dd>
|
||||
<dt><a id="MUI" href="#MUI"><pre>MUI</pre></a></dt>
|
||||
<dd>leaves MPI_Init()</dd>
|
||||
<dt><a id="MUt" href="#MUt"><pre>MUt</pre></a></dt>
|
||||
<dd>enters MPI_Init_thread()</dd>
|
||||
<dt><a id="MUT" href="#MUT"><pre>MUT</pre></a></dt>
|
||||
<dd>leaves MPI_Init_thread()</dd>
|
||||
<dt><a id="MW[" href="#MW["><pre>MW[</pre></a></dt>
|
||||
<dd>enters MPI_Wait()</dd>
|
||||
<dt><a id="MW]" href="#MW]"><pre>MW]</pre></a></dt>
|
||||
<dd>leaves MPI_Wait()</dd>
|
||||
<dt><a id="MWa" href="#MWa"><pre>MWa</pre></a></dt>
|
||||
<dd>enters MPI_Waitall()</dd>
|
||||
<dt><a id="MWA" href="#MWA"><pre>MWA</pre></a></dt>
|
||||
<dd>leaves MPI_Waitall()</dd>
|
||||
<dt><a id="MWs" href="#MWs"><pre>MWs</pre></a></dt>
|
||||
<dd>enters MPI_Waitsome()</dd>
|
||||
<dt><a id="MWS" href="#MWS"><pre>MWS</pre></a></dt>
|
||||
<dd>leaves MPI_Waitsome()</dd>
|
||||
<dt><a id="MWy" href="#MWy"><pre>MWy</pre></a></dt>
|
||||
<dd>enters MPI_Waitany()</dd>
|
||||
<dt><a id="MWY" href="#MWY"><pre>MWY</pre></a></dt>
|
||||
<dd>leaves MPI_Waitany()</dd>
|
||||
<dt><a id="MT[" href="#MT["><pre>MT[</pre></a></dt>
|
||||
<dd>enters MPI_Test()</dd>
|
||||
<dt><a id="MT]" href="#MT]"><pre>MT]</pre></a></dt>
|
||||
<dd>leaves MPI_Test()</dd>
|
||||
<dt><a id="MTa" href="#MTa"><pre>MTa</pre></a></dt>
|
||||
<dd>enters MPI_Testall()</dd>
|
||||
<dt><a id="MTA" href="#MTA"><pre>MTA</pre></a></dt>
|
||||
<dd>leaves MPI_Testall()</dd>
|
||||
<dt><a id="MTy" href="#MTy"><pre>MTy</pre></a></dt>
|
||||
<dd>enters MPI_Testany()</dd>
|
||||
<dt><a id="MTY" href="#MTY"><pre>MTY</pre></a></dt>
|
||||
<dd>leaves MPI_Testany()</dd>
|
||||
<dt><a id="MTs" href="#MTs"><pre>MTs</pre></a></dt>
|
||||
<dd>enters MPI_Testsome()</dd>
|
||||
<dt><a id="MTS" href="#MTS"><pre>MTS</pre></a></dt>
|
||||
<dd>leaves MPI_Testsome()</dd>
|
||||
<dt><a id="MS[" href="#MS["><pre>MS[</pre></a></dt>
|
||||
<dd>enters MPI_Send()</dd>
|
||||
<dt><a id="MS]" href="#MS]"><pre>MS]</pre></a></dt>
|
||||
<dd>leaves MPI_Send()</dd>
|
||||
<dt><a id="MSb" href="#MSb"><pre>MSb</pre></a></dt>
|
||||
<dd>enters MPI_Bsend()</dd>
|
||||
<dt><a id="MSB" href="#MSB"><pre>MSB</pre></a></dt>
|
||||
<dd>leaves MPI_Bsend()</dd>
|
||||
<dt><a id="MSr" href="#MSr"><pre>MSr</pre></a></dt>
|
||||
<dd>enters MPI_Rsend()</dd>
|
||||
<dt><a id="MSR" href="#MSR"><pre>MSR</pre></a></dt>
|
||||
<dd>leaves MPI_Rsend()</dd>
|
||||
<dt><a id="MSs" href="#MSs"><pre>MSs</pre></a></dt>
|
||||
<dd>enters MPI_Ssend()</dd>
|
||||
<dt><a id="MSS" href="#MSS"><pre>MSS</pre></a></dt>
|
||||
<dd>leaves MPI_Ssend()</dd>
|
||||
<dt><a id="MR[" href="#MR["><pre>MR[</pre></a></dt>
|
||||
<dd>enters MPI_Recv()</dd>
|
||||
<dt><a id="MR]" href="#MR]"><pre>MR]</pre></a></dt>
|
||||
<dd>leaves MPI_Recv()</dd>
|
||||
<dt><a id="MRs" href="#MRs"><pre>MRs</pre></a></dt>
|
||||
<dd>enters MPI_Sendrecv()</dd>
|
||||
<dt><a id="MRS" href="#MRS"><pre>MRS</pre></a></dt>
|
||||
<dd>leaves MPI_Sendrecv()</dd>
|
||||
<dt><a id="MRo" href="#MRo"><pre>MRo</pre></a></dt>
|
||||
<dd>enters MPI_Sendrecv_replace()</dd>
|
||||
<dt><a id="MRO" href="#MRO"><pre>MRO</pre></a></dt>
|
||||
<dd>leaves MPI_Sendrecv_replace()</dd>
|
||||
<dt><a id="MAg" href="#MAg"><pre>MAg</pre></a></dt>
|
||||
<dd>enters MPI_Allgather()</dd>
|
||||
<dt><a id="MAG" href="#MAG"><pre>MAG</pre></a></dt>
|
||||
<dd>leaves MPI_Allgather()</dd>
|
||||
<dt><a id="MAr" href="#MAr"><pre>MAr</pre></a></dt>
|
||||
<dd>enters MPI_Allreduce()</dd>
|
||||
<dt><a id="MAR" href="#MAR"><pre>MAR</pre></a></dt>
|
||||
<dd>leaves MPI_Allreduce()</dd>
|
||||
<dt><a id="MAa" href="#MAa"><pre>MAa</pre></a></dt>
|
||||
<dd>enters MPI_Alltoall()</dd>
|
||||
<dt><a id="MAA" href="#MAA"><pre>MAA</pre></a></dt>
|
||||
<dd>leaves MPI_Alltoall()</dd>
|
||||
<dt><a id="MCb" href="#MCb"><pre>MCb</pre></a></dt>
|
||||
<dd>enters MPI_Barrier()</dd>
|
||||
<dt><a id="MCB" href="#MCB"><pre>MCB</pre></a></dt>
|
||||
<dd>leaves MPI_Barrier()</dd>
|
||||
<dt><a id="MCe" href="#MCe"><pre>MCe</pre></a></dt>
|
||||
<dd>enters MPI_Exscan()</dd>
|
||||
<dt><a id="MCE" href="#MCE"><pre>MCE</pre></a></dt>
|
||||
<dd>leaves MPI_Exscan()</dd>
|
||||
<dt><a id="MCs" href="#MCs"><pre>MCs</pre></a></dt>
|
||||
<dd>enters MPI_Scan()</dd>
|
||||
<dt><a id="MCS" href="#MCS"><pre>MCS</pre></a></dt>
|
||||
<dd>leaves MPI_Scan()</dd>
|
||||
<dt><a id="MDb" href="#MDb"><pre>MDb</pre></a></dt>
|
||||
<dd>enters MPI_Bcast()</dd>
|
||||
<dt><a id="MDB" href="#MDB"><pre>MDB</pre></a></dt>
|
||||
<dd>leaves MPI_Bcast()</dd>
|
||||
<dt><a id="MDg" href="#MDg"><pre>MDg</pre></a></dt>
|
||||
<dd>enters MPI_Gather()</dd>
|
||||
<dt><a id="MDG" href="#MDG"><pre>MDG</pre></a></dt>
|
||||
<dd>leaves MPI_Gather()</dd>
|
||||
<dt><a id="MDs" href="#MDs"><pre>MDs</pre></a></dt>
|
||||
<dd>enters MPI_Scatter()</dd>
|
||||
<dt><a id="MDS" href="#MDS"><pre>MDS</pre></a></dt>
|
||||
<dd>leaves MPI_Scatter()</dd>
|
||||
<dt><a id="ME[" href="#ME["><pre>ME[</pre></a></dt>
|
||||
<dd>enters MPI_Reduce()</dd>
|
||||
<dt><a id="ME]" href="#ME]"><pre>ME]</pre></a></dt>
|
||||
<dd>leaves MPI_Reduce()</dd>
|
||||
<dt><a id="MEs" href="#MEs"><pre>MEs</pre></a></dt>
|
||||
<dd>enters MPI_Reduce_scatter()</dd>
|
||||
<dt><a id="MES" href="#MES"><pre>MES</pre></a></dt>
|
||||
<dd>leaves MPI_Reduce_scatter()</dd>
|
||||
<dt><a id="MEb" href="#MEb"><pre>MEb</pre></a></dt>
|
||||
<dd>enters MPI_Reduce_scatter_block()</dd>
|
||||
<dt><a id="MEB" href="#MEB"><pre>MEB</pre></a></dt>
|
||||
<dd>leaves MPI_Reduce_scatter_block()</dd>
|
||||
<dt><a id="Ms[" href="#Ms["><pre>Ms[</pre></a></dt>
|
||||
<dd>enters MPI_Isend()</dd>
|
||||
<dt><a id="Ms]" href="#Ms]"><pre>Ms]</pre></a></dt>
|
||||
<dd>leaves MPI_Isend()</dd>
|
||||
<dt><a id="Msb" href="#Msb"><pre>Msb</pre></a></dt>
|
||||
<dd>enters MPI_Ibsend()</dd>
|
||||
<dt><a id="MsB" href="#MsB"><pre>MsB</pre></a></dt>
|
||||
<dd>leaves MPI_Ibsend()</dd>
|
||||
<dt><a id="Msr" href="#Msr"><pre>Msr</pre></a></dt>
|
||||
<dd>enters MPI_Irsend()</dd>
|
||||
<dt><a id="MsR" href="#MsR"><pre>MsR</pre></a></dt>
|
||||
<dd>leaves MPI_Irsend()</dd>
|
||||
<dt><a id="Mss" href="#Mss"><pre>Mss</pre></a></dt>
|
||||
<dd>enters MPI_Issend()</dd>
|
||||
<dt><a id="MsS" href="#MsS"><pre>MsS</pre></a></dt>
|
||||
<dd>leaves MPI_Issend()</dd>
|
||||
<dt><a id="Mr[" href="#Mr["><pre>Mr[</pre></a></dt>
|
||||
<dd>enters MPI_Irecv()</dd>
|
||||
<dt><a id="Mr]" href="#Mr]"><pre>Mr]</pre></a></dt>
|
||||
<dd>leaves MPI_Irecv()</dd>
|
||||
<dt><a id="Mrs" href="#Mrs"><pre>Mrs</pre></a></dt>
|
||||
<dd>enters MPI_Isendrecv()</dd>
|
||||
<dt><a id="MrS" href="#MrS"><pre>MrS</pre></a></dt>
|
||||
<dd>leaves MPI_Isendrecv()</dd>
|
||||
<dt><a id="Mro" href="#Mro"><pre>Mro</pre></a></dt>
|
||||
<dd>enters MPI_Isendrecv_replace()</dd>
|
||||
<dt><a id="MrO" href="#MrO"><pre>MrO</pre></a></dt>
|
||||
<dd>leaves MPI_Isendrecv_replace()</dd>
|
||||
<dt><a id="Mag" href="#Mag"><pre>Mag</pre></a></dt>
|
||||
<dd>enters MPI_Iallgather()</dd>
|
||||
<dt><a id="MaG" href="#MaG"><pre>MaG</pre></a></dt>
|
||||
<dd>leaves MPI_Iallgather()</dd>
|
||||
<dt><a id="Mar" href="#Mar"><pre>Mar</pre></a></dt>
|
||||
<dd>enters MPI_Iallreduce()</dd>
|
||||
<dt><a id="MaR" href="#MaR"><pre>MaR</pre></a></dt>
|
||||
<dd>leaves MPI_Iallreduce()</dd>
|
||||
<dt><a id="Maa" href="#Maa"><pre>Maa</pre></a></dt>
|
||||
<dd>enters MPI_Ialltoall()</dd>
|
||||
<dt><a id="MaA" href="#MaA"><pre>MaA</pre></a></dt>
|
||||
<dd>leaves MPI_Ialltoall()</dd>
|
||||
<dt><a id="Mcb" href="#Mcb"><pre>Mcb</pre></a></dt>
|
||||
<dd>enters MPI_Ibarrier()</dd>
|
||||
<dt><a id="McB" href="#McB"><pre>McB</pre></a></dt>
|
||||
<dd>leaves MPI_Ibarrier()</dd>
|
||||
<dt><a id="Mce" href="#Mce"><pre>Mce</pre></a></dt>
|
||||
<dd>enters MPI_Iexscan()</dd>
|
||||
<dt><a id="McE" href="#McE"><pre>McE</pre></a></dt>
|
||||
<dd>leaves MPI_Iexscan()</dd>
|
||||
<dt><a id="Mcs" href="#Mcs"><pre>Mcs</pre></a></dt>
|
||||
<dd>enters MPI_Iscan()</dd>
|
||||
<dt><a id="McS" href="#McS"><pre>McS</pre></a></dt>
|
||||
<dd>leaves MPI_Iscan()</dd>
|
||||
<dt><a id="Mdb" href="#Mdb"><pre>Mdb</pre></a></dt>
|
||||
<dd>enters MPI_Ibcast()</dd>
|
||||
<dt><a id="MdB" href="#MdB"><pre>MdB</pre></a></dt>
|
||||
<dd>leaves MPI_Ibcast()</dd>
|
||||
<dt><a id="Mdg" href="#Mdg"><pre>Mdg</pre></a></dt>
|
||||
<dd>enters MPI_Igather()</dd>
|
||||
<dt><a id="MdG" href="#MdG"><pre>MdG</pre></a></dt>
|
||||
<dd>leaves MPI_Igather()</dd>
|
||||
<dt><a id="Mds" href="#Mds"><pre>Mds</pre></a></dt>
|
||||
<dd>enters MPI_Iscatter()</dd>
|
||||
<dt><a id="MdS" href="#MdS"><pre>MdS</pre></a></dt>
|
||||
<dd>leaves MPI_Iscatter()</dd>
|
||||
<dt><a id="Me[" href="#Me["><pre>Me[</pre></a></dt>
|
||||
<dd>enters MPI_Ireduce()</dd>
|
||||
<dt><a id="Me]" href="#Me]"><pre>Me]</pre></a></dt>
|
||||
<dd>leaves MPI_Ireduce()</dd>
|
||||
<dt><a id="Mes" href="#Mes"><pre>Mes</pre></a></dt>
|
||||
<dd>enters MPI_Ireduce_scatter()</dd>
|
||||
<dt><a id="MeS" href="#MeS"><pre>MeS</pre></a></dt>
|
||||
<dd>leaves MPI_Ireduce_scatter()</dd>
|
||||
<dt><a id="Meb" href="#Meb"><pre>Meb</pre></a></dt>
|
||||
<dd>enters MPI_Ireduce_scatter_block()</dd>
|
||||
<dt><a id="MeB" href="#MeB"><pre>MeB</pre></a></dt>
|
||||
<dd>leaves MPI_Ireduce_scatter_block()</dd>
|
||||
</dl>
|
||||
|
||||
-------------------- nOS-V (model=V) ----------------------
|
||||
## Model ovni
|
||||
|
||||
VTc Creates a new task (punctual event)
|
||||
VTx Task execute
|
||||
VTe Task end
|
||||
VTp Task pause
|
||||
VTr Task resume
|
||||
List of events for the model *ovni* with identifier **`O`** at version `1.1.0`:
|
||||
<dl>
|
||||
<dt><a id="OAr" href="#OAr"><pre>OAr(i32 cpu, i32 tid)</pre></a></dt>
|
||||
<dd>changes the affinity of thread %{tid} to CPU %{cpu}</dd>
|
||||
<dt><a id="OAs" href="#OAs"><pre>OAs(i32 cpu)</pre></a></dt>
|
||||
<dd>switches it's own affinity to the CPU %{cpu}</dd>
|
||||
<dt><a id="OB." href="#OB."><pre>OB.</pre></a></dt>
|
||||
<dd>emits a burst event to measure latency</dd>
|
||||
<dt><a id="OHC" href="#OHC"><pre>OHC(i32 cpu, u64 tag)</pre></a></dt>
|
||||
<dd>creates a new thread on CPU %{cpu} with tag %#llx{tag}</dd>
|
||||
<dt><a id="OHc" href="#OHc"><pre>OHc</pre></a></dt>
|
||||
<dd>enters the Cooling state (about to be paused)</dd>
|
||||
<dt><a id="OHe" href="#OHe"><pre>OHe</pre></a></dt>
|
||||
<dd>ends the execution</dd>
|
||||
<dt><a id="OHp" href="#OHp"><pre>OHp</pre></a></dt>
|
||||
<dd>pauses the execution</dd>
|
||||
<dt><a id="OHr" href="#OHr"><pre>OHr</pre></a></dt>
|
||||
<dd>resumes the execution</dd>
|
||||
<dt><a id="OHw" href="#OHw"><pre>OHw</pre></a></dt>
|
||||
<dd>enters the Warming state (about to be running)</dd>
|
||||
<dt><a id="OHx" href="#OHx"><pre>OHx(i32 cpu, i32 tid, u64 tag)</pre></a></dt>
|
||||
<dd>begins the execution on CPU %{cpu} created from %{tid} with tag %#llx{tag}</dd>
|
||||
<dt><a id="OCn" href="#OCn"><pre>OCn(i32 cpu)</pre></a></dt>
|
||||
<dd>informs there are %{cpu} CPUs</dd>
|
||||
<dt><a id="OF[" href="#OF["><pre>OF[</pre></a></dt>
|
||||
<dd>begins flushing events to disk</dd>
|
||||
<dt><a id="OF]" href="#OF]"><pre>OF]</pre></a></dt>
|
||||
<dd>ceases flushing events to disk</dd>
|
||||
<dt><a id="OU[" href="#OU["><pre>OU[</pre></a></dt>
|
||||
<dd>enters unordered event region</dd>
|
||||
<dt><a id="OU]" href="#OU]"><pre>OU]</pre></a></dt>
|
||||
<dd>leaves unordered event region</dd>
|
||||
<dt><a id="OM[" href="#OM["><pre>OM[(i64 value, i32 type)</pre></a></dt>
|
||||
<dd>push mark with value %{value} from type %{type}</dd>
|
||||
<dt><a id="OM]" href="#OM]"><pre>OM](i64 value, i32 type)</pre></a></dt>
|
||||
<dd>pop mark with value %{value} from type %{type}</dd>
|
||||
<dt><a id="OM=" href="#OM="><pre>OM=(i64 value, i32 type)</pre></a></dt>
|
||||
<dd>set mark with value %{value} from type %{type}</dd>
|
||||
</dl>
|
||||
|
||||
VYc Task type create (punctual event)
|
||||
## Model openmp
|
||||
|
||||
VSr Receives a task from another thread (punctual event)
|
||||
VSs Sends a task to another thread (punctual event)
|
||||
VS@ Self-assigns itself a task (punctual event)
|
||||
VSh Enters the hungry state, waiting for a task
|
||||
VSf Is no longer hungry
|
||||
VS[ Enters the scheduler server mode
|
||||
VS] Ends the scheduler server mode
|
||||
List of events for the model *openmp* with identifier **`P`** at version `1.2.0`:
|
||||
<dl>
|
||||
<dt><a id="PBb" href="#PBb"><pre>PBb</pre></a></dt>
|
||||
<dd>begins plain barrier</dd>
|
||||
<dt><a id="PBB" href="#PBB"><pre>PBB</pre></a></dt>
|
||||
<dd>ceases plain barrier</dd>
|
||||
<dt><a id="PBj" href="#PBj"><pre>PBj</pre></a></dt>
|
||||
<dd>begins join barrier</dd>
|
||||
<dt><a id="PBJ" href="#PBJ"><pre>PBJ</pre></a></dt>
|
||||
<dd>ceases join barrier</dd>
|
||||
<dt><a id="PBf" href="#PBf"><pre>PBf</pre></a></dt>
|
||||
<dd>begins fork barrier</dd>
|
||||
<dt><a id="PBF" href="#PBF"><pre>PBF</pre></a></dt>
|
||||
<dd>ceases fork barrier</dd>
|
||||
<dt><a id="PBt" href="#PBt"><pre>PBt</pre></a></dt>
|
||||
<dd>begins tasking barrier</dd>
|
||||
<dt><a id="PBT" href="#PBT"><pre>PBT</pre></a></dt>
|
||||
<dd>ceases tasking barrier</dd>
|
||||
<dt><a id="PBs" href="#PBs"><pre>PBs</pre></a></dt>
|
||||
<dd>begins spin wait</dd>
|
||||
<dt><a id="PBS" href="#PBS"><pre>PBS</pre></a></dt>
|
||||
<dd>ceases spin wait</dd>
|
||||
<dt><a id="PIa" href="#PIa"><pre>PIa</pre></a></dt>
|
||||
<dd>begins critical acquiring</dd>
|
||||
<dt><a id="PIA" href="#PIA"><pre>PIA</pre></a></dt>
|
||||
<dd>ceases critical acquiring</dd>
|
||||
<dt><a id="PIr" href="#PIr"><pre>PIr</pre></a></dt>
|
||||
<dd>begins critical releasing</dd>
|
||||
<dt><a id="PIR" href="#PIR"><pre>PIR</pre></a></dt>
|
||||
<dd>ceases critical releasing</dd>
|
||||
<dt><a id="PI[" href="#PI["><pre>PI[</pre></a></dt>
|
||||
<dd>begins critical section</dd>
|
||||
<dt><a id="PI]" href="#PI]"><pre>PI]</pre></a></dt>
|
||||
<dd>ceases critical section</dd>
|
||||
<dt><a id="PWd" href="#PWd"><pre>PWd</pre></a></dt>
|
||||
<dd>begins distribute</dd>
|
||||
<dt><a id="PWD" href="#PWD"><pre>PWD</pre></a></dt>
|
||||
<dd>ceases distribute</dd>
|
||||
<dt><a id="PWy" href="#PWy"><pre>PWy</pre></a></dt>
|
||||
<dd>begins dynamic for init</dd>
|
||||
<dt><a id="PWY" href="#PWY"><pre>PWY</pre></a></dt>
|
||||
<dd>ceases dynamic for init</dd>
|
||||
<dt><a id="PWc" href="#PWc"><pre>PWc</pre></a></dt>
|
||||
<dd>begins dynamic for chunk</dd>
|
||||
<dt><a id="PWC" href="#PWC"><pre>PWC</pre></a></dt>
|
||||
<dd>ceases dynamic for chunk</dd>
|
||||
<dt><a id="PWs" href="#PWs"><pre>PWs</pre></a></dt>
|
||||
<dd>begins static for</dd>
|
||||
<dt><a id="PWS" href="#PWS"><pre>PWS</pre></a></dt>
|
||||
<dd>ceases static for</dd>
|
||||
<dt><a id="PWe" href="#PWe"><pre>PWe</pre></a></dt>
|
||||
<dd>begins section</dd>
|
||||
<dt><a id="PWE" href="#PWE"><pre>PWE</pre></a></dt>
|
||||
<dd>ceases section</dd>
|
||||
<dt><a id="PWi" href="#PWi"><pre>PWi</pre></a></dt>
|
||||
<dd>begins single</dd>
|
||||
<dt><a id="PWI" href="#PWI"><pre>PWI</pre></a></dt>
|
||||
<dd>ceases single</dd>
|
||||
<dt><a id="PTa" href="#PTa"><pre>PTa</pre></a></dt>
|
||||
<dd>begins task allocation</dd>
|
||||
<dt><a id="PTA" href="#PTA"><pre>PTA</pre></a></dt>
|
||||
<dd>ceases task allocation</dd>
|
||||
<dt><a id="PTc" href="#PTc"><pre>PTc</pre></a></dt>
|
||||
<dd>begins checking task dependencies</dd>
|
||||
<dt><a id="PTC" href="#PTC"><pre>PTC</pre></a></dt>
|
||||
<dd>ceases checking task dependencies</dd>
|
||||
<dt><a id="PTd" href="#PTd"><pre>PTd</pre></a></dt>
|
||||
<dd>begins duplicating a task</dd>
|
||||
<dt><a id="PTD" href="#PTD"><pre>PTD</pre></a></dt>
|
||||
<dd>ceases duplicating a task</dd>
|
||||
<dt><a id="PTr" href="#PTr"><pre>PTr</pre></a></dt>
|
||||
<dd>begins releasing task dependencies</dd>
|
||||
<dt><a id="PTR" href="#PTR"><pre>PTR</pre></a></dt>
|
||||
<dd>ceases releasing task dependencies</dd>
|
||||
<dt><a id="PT[" href="#PT["><pre>PT[</pre></a></dt>
|
||||
<dd>begins running a task</dd>
|
||||
<dt><a id="PT]" href="#PT]"><pre>PT]</pre></a></dt>
|
||||
<dd>ceases running a task</dd>
|
||||
<dt><a id="PTi" href="#PTi"><pre>PTi</pre></a></dt>
|
||||
<dd>begins running an if0 task</dd>
|
||||
<dt><a id="PTI" href="#PTI"><pre>PTI</pre></a></dt>
|
||||
<dd>ceases running an if0 task</dd>
|
||||
<dt><a id="PTs" href="#PTs"><pre>PTs</pre></a></dt>
|
||||
<dd>begins scheduling a task</dd>
|
||||
<dt><a id="PTS" href="#PTS"><pre>PTS</pre></a></dt>
|
||||
<dd>ceases scheduling a task</dd>
|
||||
<dt><a id="PTg" href="#PTg"><pre>PTg</pre></a></dt>
|
||||
<dd>begins a taskgroup</dd>
|
||||
<dt><a id="PTG" href="#PTG"><pre>PTG</pre></a></dt>
|
||||
<dd>ceases a taskgroup</dd>
|
||||
<dt><a id="PTt" href="#PTt"><pre>PTt</pre></a></dt>
|
||||
<dd>begins a taskwait</dd>
|
||||
<dt><a id="PTT" href="#PTT"><pre>PTT</pre></a></dt>
|
||||
<dd>ceases a taskwait</dd>
|
||||
<dt><a id="PTw" href="#PTw"><pre>PTw</pre></a></dt>
|
||||
<dd>begins waiting for taskwait dependencies</dd>
|
||||
<dt><a id="PTW" href="#PTW"><pre>PTW</pre></a></dt>
|
||||
<dd>ceases waiting for taskwait dependencies</dd>
|
||||
<dt><a id="PTy" href="#PTy"><pre>PTy</pre></a></dt>
|
||||
<dd>begins a taskyield</dd>
|
||||
<dt><a id="PTY" href="#PTY"><pre>PTY</pre></a></dt>
|
||||
<dd>ceases a taskyield</dd>
|
||||
<dt><a id="PA[" href="#PA["><pre>PA[</pre></a></dt>
|
||||
<dd>enters the attached state</dd>
|
||||
<dt><a id="PA]" href="#PA]"><pre>PA]</pre></a></dt>
|
||||
<dd>leaves the attached state</dd>
|
||||
<dt><a id="PMi" href="#PMi"><pre>PMi</pre></a></dt>
|
||||
<dd>begins microtask internal</dd>
|
||||
<dt><a id="PMI" href="#PMI"><pre>PMI</pre></a></dt>
|
||||
<dd>ceases microtask internal</dd>
|
||||
<dt><a id="PMu" href="#PMu"><pre>PMu</pre></a></dt>
|
||||
<dd>begins microtask user code</dd>
|
||||
<dt><a id="PMU" href="#PMU"><pre>PMU</pre></a></dt>
|
||||
<dd>ceases microtask user code</dd>
|
||||
<dt><a id="PH[" href="#PH["><pre>PH[</pre></a></dt>
|
||||
<dd>begins worker loop</dd>
|
||||
<dt><a id="PH]" href="#PH]"><pre>PH]</pre></a></dt>
|
||||
<dd>ceases worker loop</dd>
|
||||
<dt><a id="PCf" href="#PCf"><pre>PCf</pre></a></dt>
|
||||
<dd>begins fork call</dd>
|
||||
<dt><a id="PCF" href="#PCF"><pre>PCF</pre></a></dt>
|
||||
<dd>ceases fork call</dd>
|
||||
<dt><a id="PCi" href="#PCi"><pre>PCi</pre></a></dt>
|
||||
<dd>begins initialization</dd>
|
||||
<dt><a id="PCI" href="#PCI"><pre>PCI</pre></a></dt>
|
||||
<dd>ceases initialization</dd>
|
||||
<dt><a id="POc" href="#POc"><pre>POc+(u32 typeid, str label)</pre></a></dt>
|
||||
<dd>creates a type %{typeid} with label "%{label}"</dd>
|
||||
<dt><a id="PPc" href="#PPc"><pre>PPc(u32 taskid, u32 typeid)</pre></a></dt>
|
||||
<dd>creates the task %{taskid} with type %{typeid}</dd>
|
||||
<dt><a id="PPx" href="#PPx"><pre>PPx(u32 taskid)</pre></a></dt>
|
||||
<dd>executes the task %{taskid}</dd>
|
||||
<dt><a id="PPe" href="#PPe"><pre>PPe(u32 taskid)</pre></a></dt>
|
||||
<dd>ends the task %{taskid}</dd>
|
||||
<dt><a id="PQx" href="#PQx"><pre>PQx(u32 typeid)</pre></a></dt>
|
||||
<dd>begins worksharing with type %{typeid}</dd>
|
||||
<dt><a id="PQe" href="#PQe"><pre>PQe(u32 typeid)</pre></a></dt>
|
||||
<dd>ends worksharing with type %{typeid}</dd>
|
||||
</dl>
|
||||
|
||||
VU[ Starts to submit a task
|
||||
VU] Ends the submission of a task
|
||||
## Model tampi
|
||||
|
||||
VMa Starts allocating memory
|
||||
VMA Ends allocating memory
|
||||
VMf Starts freeing memory
|
||||
VMF Ends freeing memory
|
||||
List of events for the model *tampi* with identifier **`T`** at version `1.0.0`:
|
||||
<dl>
|
||||
<dt><a id="TCi" href="#TCi"><pre>TCi</pre></a></dt>
|
||||
<dd>starts issuing a non-blocking communication operation</dd>
|
||||
<dt><a id="TCI" href="#TCI"><pre>TCI</pre></a></dt>
|
||||
<dd>stops issuing a non-blocking communication operation</dd>
|
||||
<dt><a id="TGc" href="#TGc"><pre>TGc</pre></a></dt>
|
||||
<dd>starts checking pending requests from the global array</dd>
|
||||
<dt><a id="TGC" href="#TGC"><pre>TGC</pre></a></dt>
|
||||
<dd>stops checking pending requests from the global array</dd>
|
||||
<dt><a id="TLi" href="#TLi"><pre>TLi</pre></a></dt>
|
||||
<dd>enters the library code at an API function</dd>
|
||||
<dt><a id="TLI" href="#TLI"><pre>TLI</pre></a></dt>
|
||||
<dd>leaves the library code at an API function</dd>
|
||||
<dt><a id="TLp" href="#TLp"><pre>TLp</pre></a></dt>
|
||||
<dd>enters the library code at a polling function</dd>
|
||||
<dt><a id="TLP" href="#TLP"><pre>TLP</pre></a></dt>
|
||||
<dd>leaves the library code at a polling function</dd>
|
||||
<dt><a id="TQa" href="#TQa"><pre>TQa</pre></a></dt>
|
||||
<dd>starts adding a ticket/requests to a queue</dd>
|
||||
<dt><a id="TQA" href="#TQA"><pre>TQA</pre></a></dt>
|
||||
<dd>stops adding a ticket/requests to a queue</dd>
|
||||
<dt><a id="TQt" href="#TQt"><pre>TQt</pre></a></dt>
|
||||
<dd>starts transferring tickets/requests from queues to global array</dd>
|
||||
<dt><a id="TQT" href="#TQT"><pre>TQT</pre></a></dt>
|
||||
<dd>stops transferring tickets/requests from queues to global array</dd>
|
||||
<dt><a id="TRc" href="#TRc"><pre>TRc</pre></a></dt>
|
||||
<dd>starts processsing a completed request</dd>
|
||||
<dt><a id="TRC" href="#TRC"><pre>TRC</pre></a></dt>
|
||||
<dd>stops processsing a completed request</dd>
|
||||
<dt><a id="TRt" href="#TRt"><pre>TRt</pre></a></dt>
|
||||
<dd>starts testing a single request with MPI_Test</dd>
|
||||
<dt><a id="TRT" href="#TRT"><pre>TRT</pre></a></dt>
|
||||
<dd>stops testing a single request with MPI_Test</dd>
|
||||
<dt><a id="TRa" href="#TRa"><pre>TRa</pre></a></dt>
|
||||
<dd>starts testing several requests with MPI_Testall</dd>
|
||||
<dt><a id="TRA" href="#TRA"><pre>TRA</pre></a></dt>
|
||||
<dd>stops testing several requests with MPI_Testall</dd>
|
||||
<dt><a id="TRs" href="#TRs"><pre>TRs</pre></a></dt>
|
||||
<dd>starts testing several requests with MPI_Testsome</dd>
|
||||
<dt><a id="TRS" href="#TRS"><pre>TRS</pre></a></dt>
|
||||
<dd>stops testing several requests with MPI_Testsome</dd>
|
||||
<dt><a id="TTc" href="#TTc"><pre>TTc</pre></a></dt>
|
||||
<dd>starts creating a ticket linked to a set of requests and a task</dd>
|
||||
<dt><a id="TTC" href="#TTC"><pre>TTC</pre></a></dt>
|
||||
<dd>stops creating a ticket linked to a set of requests and a task</dd>
|
||||
<dt><a id="TTw" href="#TTw"><pre>TTw</pre></a></dt>
|
||||
<dd>starts waiting for a ticket completion</dd>
|
||||
<dt><a id="TTW" href="#TTW"><pre>TTW</pre></a></dt>
|
||||
<dd>stops waiting for a ticket completion</dd>
|
||||
</dl>
|
||||
|
||||
VAs Enters nosv_submit()
|
||||
VAS Exits nosv_submit()
|
||||
VAp Enters nosv_pause()
|
||||
VAP Exits nosv_pause()
|
||||
VAy Enters nosv_yield()
|
||||
VAY Exits nosv_yield()
|
||||
VAw Enters nosv_waitfor()
|
||||
VAW Exits nosv_waitfor()
|
||||
VAc Enters nosv_schedpoint()
|
||||
VAC Exits nosv_schedpoint()
|
||||
## Model nosv
|
||||
|
||||
VHa Enters nosv_attach()
|
||||
VHA Exits nosv_detach()
|
||||
VHw Begins the execution as a worker
|
||||
VHW Ends the execution as a worker
|
||||
VHd Begins the execution as the delegate
|
||||
VHD Ends the execution as the delegate
|
||||
|
||||
-------------------- NODES (model=D) ----------------------
|
||||
|
||||
DR[ Begins the registration of a task's accesses
|
||||
DR] Ends the registration of a task's accesses
|
||||
|
||||
DU[ Begins the unregistration of a task's accesses
|
||||
DU] Ends the unregistration of a task's accesses
|
||||
|
||||
DW[ Enters a blocking condition (waiting for an If0 task)
|
||||
DW] Exits a blocking condition (waiting for an If0 task)
|
||||
|
||||
DI[ Begins the inline execution of an If0 task
|
||||
DI] Ends the inline execution of an If0 task
|
||||
|
||||
DT[ Enters a taskwait
|
||||
DT] Exits a taskwait
|
||||
|
||||
DC[ Begins the creation of a task
|
||||
DC] Ends the creation of a task
|
||||
|
||||
DS[ Begins the submit of a task
|
||||
DS] Ends the submit of a task
|
||||
|
||||
DP[ Begins the spawn of a function
|
||||
DP] Ends the spawn of a function
|
||||
|
||||
-------------------- Kernel (model=K) ----------------------
|
||||
|
||||
KCO Is out of the CPU due to a context switch
|
||||
KCI Is back in the CPU due to a context switch
|
||||
|
||||
-------------------- Nanos6 (model=6) ----------------------
|
||||
|
||||
6Tc Creates a new task
|
||||
6Tx Task execute
|
||||
6Te Task end
|
||||
6Tp Task pause
|
||||
6Tr Task resume
|
||||
|
||||
6Yc Task type create (punctual event)
|
||||
|
||||
6C[ Begins creating a new task
|
||||
6C] Ends creating a new task
|
||||
|
||||
6S[ Enters the scheduler serving mode
|
||||
6S] Ends the scheduler serving mode
|
||||
6Sa Begins to submit a ready task via addReadyTask()
|
||||
6SA Ends submitting a ready task via addReadyTask()
|
||||
6Sp Begins to process ready tasks via processReadyTasks()
|
||||
6SP Ends processing ready taska via processReadyTasks()
|
||||
6Sr Receives a task from another thread (punctual event)
|
||||
6Ss Sends a task to another thread (punctual event)
|
||||
6S@ Self-assigns itself a task (punctual event)
|
||||
|
||||
6W[ Begins the worker body loop, looking for tasks
|
||||
6W] Ends the worker body loop
|
||||
6Wt Begins handling a task via handleTask()
|
||||
6WT Ends handling a task via handleTask()
|
||||
6Ww Begins switching to another worker via switchTo()
|
||||
6WW Ends switching to another worker via switchTo()
|
||||
6Wm Begins migrating the CPU via migrate()
|
||||
6WM Ends migrating the CPU via migrate()
|
||||
6Ws Begins suspending the worker via suspend()
|
||||
6WS Ends suspending the worker via suspend()
|
||||
6Wr Begins resuming another worker via resume()
|
||||
6WR Ends resuming another worker via resume()
|
||||
6W* Signals another thread to wake up (punctual event)
|
||||
|
||||
6U[ Starts to submit a task via submitTask()
|
||||
6U] Ends the submission of a task via submitTask()
|
||||
|
||||
6F[ Begins to spawn a function via spawnFunction()
|
||||
6F] Ends spawning a function
|
||||
|
||||
6t[ Begins running the task body
|
||||
6t] Ends running the task body
|
||||
|
||||
6O[ Begins running the task body as taskfor collaborator
|
||||
6O] Ends running the task body as taskfor collaborator
|
||||
|
||||
6Dr Begins the registration of a task's accesses
|
||||
6DR Ends the registration of a task's accesses
|
||||
6Du Begins the unregistration of a task's accesses
|
||||
6DU Ends the unregistration of a task's accesses
|
||||
|
||||
6Bb Begins to block the current task via blockCurrentTask()
|
||||
6BB Ends blocking the current task via blockCurrentTask()
|
||||
6Bu Begins to unblock a task
|
||||
6BU Ends unblocking a task
|
||||
6Bw Enters taskWait()
|
||||
6BW Exits taskWait()
|
||||
6Bf Enters taskFor()
|
||||
6BF Exits taskFor()
|
||||
|
||||
6He Sets itself as external thread
|
||||
6HE Unsets itself as external thread
|
||||
6Hw Sets itself as worker thread
|
||||
6HW Unsets itself as worker thread
|
||||
6Hl Sets itself as leader thread
|
||||
6HL Unsets itself as leader thread
|
||||
6Hm Sets itself as main thread
|
||||
6HM Unsets itself as main thread
|
||||
|
||||
6Ma Begins allocating memory
|
||||
6MA Ends allocating memory
|
||||
6Mf Begins freeing memory
|
||||
6MF Ends freeing memory
|
||||
```
|
||||
List of events for the model *nosv* with identifier **`V`** at version `2.4.0`:
|
||||
<dl>
|
||||
<dt><a id="VTc" href="#VTc"><pre>VTc(u32 taskid, u32 typeid)</pre></a></dt>
|
||||
<dd>creates task %{taskid} with type %{typeid}</dd>
|
||||
<dt><a id="VTC" href="#VTC"><pre>VTC(u32 taskid, u32 typeid)</pre></a></dt>
|
||||
<dd>creates parallel task %{taskid} with type %{typeid}</dd>
|
||||
<dt><a id="VTx" href="#VTx"><pre>VTx(u32 taskid, u32 bodyid)</pre></a></dt>
|
||||
<dd>executes the task %{taskid} with bodyid %{bodyid}</dd>
|
||||
<dt><a id="VTe" href="#VTe"><pre>VTe(u32 taskid, u32 bodyid)</pre></a></dt>
|
||||
<dd>ends the task %{taskid} with bodyid %{bodyid}</dd>
|
||||
<dt><a id="VTp" href="#VTp"><pre>VTp(u32 taskid, u32 bodyid)</pre></a></dt>
|
||||
<dd>pauses the task %{taskid} with bodyid %{bodyid}</dd>
|
||||
<dt><a id="VTr" href="#VTr"><pre>VTr(u32 taskid, u32 bodyid)</pre></a></dt>
|
||||
<dd>resumes the task %{taskid} with bodyid %{bodyid}</dd>
|
||||
<dt><a id="VYc" href="#VYc"><pre>VYc+(u32 typeid, str label)</pre></a></dt>
|
||||
<dd>creates task type %{typeid} with label "%{label}"</dd>
|
||||
<dt><a id="VSr" href="#VSr"><pre>VSr</pre></a></dt>
|
||||
<dd>receives a task from another thread</dd>
|
||||
<dt><a id="VSs" href="#VSs"><pre>VSs</pre></a></dt>
|
||||
<dd>sends a task to another thread</dd>
|
||||
<dt><a id="VS@" href="#VS@"><pre>VS@</pre></a></dt>
|
||||
<dd>self assigns itself a task</dd>
|
||||
<dt><a id="VSh" href="#VSh"><pre>VSh</pre></a></dt>
|
||||
<dd>enters the hungry state, waiting for work</dd>
|
||||
<dt><a id="VSf" href="#VSf"><pre>VSf</pre></a></dt>
|
||||
<dd>is no longer hungry</dd>
|
||||
<dt><a id="VS[" href="#VS["><pre>VS[</pre></a></dt>
|
||||
<dd>enters scheduler server mode</dd>
|
||||
<dt><a id="VS]" href="#VS]"><pre>VS]</pre></a></dt>
|
||||
<dd>leaves scheduler server mode</dd>
|
||||
<dt><a id="VU[" href="#VU["><pre>VU[</pre></a></dt>
|
||||
<dd>starts submitting a task</dd>
|
||||
<dt><a id="VU]" href="#VU]"><pre>VU]</pre></a></dt>
|
||||
<dd>stops submitting a task</dd>
|
||||
<dt><a id="VMa" href="#VMa"><pre>VMa</pre></a></dt>
|
||||
<dd>starts allocating memory</dd>
|
||||
<dt><a id="VMA" href="#VMA"><pre>VMA</pre></a></dt>
|
||||
<dd>stops allocating memory</dd>
|
||||
<dt><a id="VMf" href="#VMf"><pre>VMf</pre></a></dt>
|
||||
<dd>starts freeing memory</dd>
|
||||
<dt><a id="VMF" href="#VMF"><pre>VMF</pre></a></dt>
|
||||
<dd>stops freeing memory</dd>
|
||||
<dt><a id="VAr" href="#VAr"><pre>VAr</pre></a></dt>
|
||||
<dd>enters nosv_create()</dd>
|
||||
<dt><a id="VAR" href="#VAR"><pre>VAR</pre></a></dt>
|
||||
<dd>leaves nosv_create()</dd>
|
||||
<dt><a id="VAd" href="#VAd"><pre>VAd</pre></a></dt>
|
||||
<dd>enters nosv_destroy()</dd>
|
||||
<dt><a id="VAD" href="#VAD"><pre>VAD</pre></a></dt>
|
||||
<dd>leaves nosv_destroy()</dd>
|
||||
<dt><a id="VAs" href="#VAs"><pre>VAs</pre></a></dt>
|
||||
<dd>enters nosv_submit()</dd>
|
||||
<dt><a id="VAS" href="#VAS"><pre>VAS</pre></a></dt>
|
||||
<dd>leaves nosv_submit()</dd>
|
||||
<dt><a id="VAp" href="#VAp"><pre>VAp</pre></a></dt>
|
||||
<dd>enters nosv_pause()</dd>
|
||||
<dt><a id="VAP" href="#VAP"><pre>VAP</pre></a></dt>
|
||||
<dd>leaves nosv_pause()</dd>
|
||||
<dt><a id="VAy" href="#VAy"><pre>VAy</pre></a></dt>
|
||||
<dd>enters nosv_yield()</dd>
|
||||
<dt><a id="VAY" href="#VAY"><pre>VAY</pre></a></dt>
|
||||
<dd>leaves nosv_yield()</dd>
|
||||
<dt><a id="VAw" href="#VAw"><pre>VAw</pre></a></dt>
|
||||
<dd>enters nosv_waitfor()</dd>
|
||||
<dt><a id="VAW" href="#VAW"><pre>VAW</pre></a></dt>
|
||||
<dd>leaves nosv_waitfor()</dd>
|
||||
<dt><a id="VAc" href="#VAc"><pre>VAc</pre></a></dt>
|
||||
<dd>enters nosv_schedpoint()</dd>
|
||||
<dt><a id="VAC" href="#VAC"><pre>VAC</pre></a></dt>
|
||||
<dd>leaves nosv_schedpoint()</dd>
|
||||
<dt><a id="VAa" href="#VAa"><pre>VAa</pre></a></dt>
|
||||
<dd>enters nosv_attach()</dd>
|
||||
<dt><a id="VAA" href="#VAA"><pre>VAA</pre></a></dt>
|
||||
<dd>leaves nosv_attach()</dd>
|
||||
<dt><a id="VAe" href="#VAe"><pre>VAe</pre></a></dt>
|
||||
<dd>enters nosv_detach()</dd>
|
||||
<dt><a id="VAE" href="#VAE"><pre>VAE</pre></a></dt>
|
||||
<dd>leaves nosv_detach()</dd>
|
||||
<dt><a id="VAl" href="#VAl"><pre>VAl</pre></a></dt>
|
||||
<dd>enters nosv_mutex_lock()</dd>
|
||||
<dt><a id="VAL" href="#VAL"><pre>VAL</pre></a></dt>
|
||||
<dd>leaves nosv_mutex_lock()</dd>
|
||||
<dt><a id="VAt" href="#VAt"><pre>VAt</pre></a></dt>
|
||||
<dd>enters nosv_mutex_trylock()</dd>
|
||||
<dt><a id="VAT" href="#VAT"><pre>VAT</pre></a></dt>
|
||||
<dd>leaves nosv_mutex_trylock()</dd>
|
||||
<dt><a id="VAu" href="#VAu"><pre>VAu</pre></a></dt>
|
||||
<dd>enters nosv_mutex_unlock()</dd>
|
||||
<dt><a id="VAU" href="#VAU"><pre>VAU</pre></a></dt>
|
||||
<dd>leaves nosv_mutex_unlock()</dd>
|
||||
<dt><a id="VAb" href="#VAb"><pre>VAb</pre></a></dt>
|
||||
<dd>enters nosv_barrier_wait()</dd>
|
||||
<dt><a id="VAB" href="#VAB"><pre>VAB</pre></a></dt>
|
||||
<dd>leaves nosv_barrier_wait()</dd>
|
||||
<dt><a id="VAo" href="#VAo"><pre>VAo</pre></a></dt>
|
||||
<dd>enters nosv_cond_wait()</dd>
|
||||
<dt><a id="VAO" href="#VAO"><pre>VAO</pre></a></dt>
|
||||
<dd>leaves nosv_cond_wait()</dd>
|
||||
<dt><a id="VAg" href="#VAg"><pre>VAg</pre></a></dt>
|
||||
<dd>enters nosv_cond_signal()</dd>
|
||||
<dt><a id="VAG" href="#VAG"><pre>VAG</pre></a></dt>
|
||||
<dd>leaves nosv_cond_signal()</dd>
|
||||
<dt><a id="VAk" href="#VAk"><pre>VAk</pre></a></dt>
|
||||
<dd>enters nosv_cond_broadcast()</dd>
|
||||
<dt><a id="VAK" href="#VAK"><pre>VAK</pre></a></dt>
|
||||
<dd>leaves nosv_cond_broadcast()</dd>
|
||||
<dt><a id="VHa" href="#VHa"><pre>VHa</pre></a></dt>
|
||||
<dd>enters nosv_attach()</dd>
|
||||
<dt><a id="VHA" href="#VHA"><pre>VHA</pre></a></dt>
|
||||
<dd>leaves nosv_dettach()</dd>
|
||||
<dt><a id="VHw" href="#VHw"><pre>VHw</pre></a></dt>
|
||||
<dd>begins execution as worker</dd>
|
||||
<dt><a id="VHW" href="#VHW"><pre>VHW</pre></a></dt>
|
||||
<dd>ceases execution as worker</dd>
|
||||
<dt><a id="VHd" href="#VHd"><pre>VHd</pre></a></dt>
|
||||
<dd>begins execution as delegate</dd>
|
||||
<dt><a id="VHD" href="#VHD"><pre>VHD</pre></a></dt>
|
||||
<dd>ceases execution as delegate</dd>
|
||||
<dt><a id="VPp" href="#VPp"><pre>VPp</pre></a></dt>
|
||||
<dd>sets progress state to Progressing</dd>
|
||||
<dt><a id="VPr" href="#VPr"><pre>VPr</pre></a></dt>
|
||||
<dd>sets progress state to Resting</dd>
|
||||
<dt><a id="VPa" href="#VPa"><pre>VPa</pre></a></dt>
|
||||
<dd>sets progress state to Absorbing</dd>
|
||||
</dl>
|
||||
|
9
doc/user/emulation/fig/body-model.dot
Normal file
@ -0,0 +1,9 @@
|
||||
digraph {
|
||||
graph [size="6!", ranksep="0.7", nodesep="1"];
|
||||
|
||||
Created -> Running;
|
||||
Running -> Paused [label=BODY_FLAG_PAUSE];
|
||||
Paused -> Running;
|
||||
Running -> Dead;
|
||||
Dead -> Running [label="BODY_FLAG_RESURRECT\niteration++"];
|
||||
}
|
69
doc/user/emulation/fig/body-model.svg
Normal file
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 8.1.0 (0)
|
||||
-->
|
||||
<!-- Pages: 1 -->
|
||||
<svg width="432pt" height="202pt"
|
||||
viewBox="0.00 0.00 432.00 202.47" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(0.805048 0.805048) rotate(0) translate(4 247.5)">
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-247.5 532.61,-247.5 532.61,4 -4,4"/>
|
||||
<!-- Created -->
|
||||
<g id="node1" class="node">
|
||||
<title>Created</title>
|
||||
<ellipse fill="none" stroke="black" cx="246.61" cy="-225.5" rx="51.21" ry="18"/>
|
||||
<text text-anchor="middle" x="246.61" y="-220.82" font-family="Times,serif" font-size="14.00">Created</text>
|
||||
</g>
|
||||
<!-- Running -->
|
||||
<g id="node2" class="node">
|
||||
<title>Running</title>
|
||||
<ellipse fill="none" stroke="black" cx="246.61" cy="-138.5" rx="53.31" ry="18"/>
|
||||
<text text-anchor="middle" x="246.61" y="-133.82" font-family="Times,serif" font-size="14.00">Running</text>
|
||||
</g>
|
||||
<!-- Created->Running -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>Created->Running</title>
|
||||
<path fill="none" stroke="black" d="M246.61,-207.3C246.61,-195.97 246.61,-180.86 246.61,-167.79"/>
|
||||
<polygon fill="black" stroke="black" points="250.11,-167.97 246.61,-157.97 243.11,-167.97 250.11,-167.97"/>
|
||||
</g>
|
||||
<!-- Paused -->
|
||||
<g id="node3" class="node">
|
||||
<title>Paused</title>
|
||||
<ellipse fill="none" stroke="black" cx="132.61" cy="-18" rx="47" ry="18"/>
|
||||
<text text-anchor="middle" x="132.61" y="-13.32" font-family="Times,serif" font-size="14.00">Paused</text>
|
||||
</g>
|
||||
<!-- Running->Paused -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>Running->Paused</title>
|
||||
<path fill="none" stroke="black" d="M193.44,-135.87C130.26,-132.68 30.43,-123.26 7.11,-95.5 -2.75,-83.76 -1.84,-73.44 7.11,-61 22.79,-39.22 50.29,-28.57 75.56,-23.43"/>
|
||||
<polygon fill="black" stroke="black" points="75.98,-26.73 85.22,-21.55 74.76,-19.84 75.98,-26.73"/>
|
||||
<text text-anchor="middle" x="80.36" y="-73.58" font-family="Times,serif" font-size="14.00">BODY_FLAG_PAUSE</text>
|
||||
</g>
|
||||
<!-- Dead -->
|
||||
<g id="node4" class="node">
|
||||
<title>Dead</title>
|
||||
<ellipse fill="none" stroke="black" cx="343.61" cy="-18" rx="37" ry="18"/>
|
||||
<text text-anchor="middle" x="343.61" y="-13.32" font-family="Times,serif" font-size="14.00">Dead</text>
|
||||
</g>
|
||||
<!-- Running->Dead -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>Running->Dead</title>
|
||||
<path fill="none" stroke="black" d="M260.31,-120.77C276.79,-100.63 304.62,-66.64 323.53,-43.53"/>
|
||||
<polygon fill="black" stroke="black" points="326.68,-46.22 330.3,-36.26 321.26,-41.78 326.68,-46.22"/>
|
||||
</g>
|
||||
<!-- Paused->Running -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>Paused->Running</title>
|
||||
<path fill="none" stroke="black" d="M148.33,-35.34C167.75,-55.52 200.96,-90.04 223.34,-113.31"/>
|
||||
<polygon fill="black" stroke="black" points="220.31,-115.24 229.76,-120.02 225.35,-110.39 220.31,-115.24"/>
|
||||
</g>
|
||||
<!-- Dead->Running -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>Dead->Running</title>
|
||||
<path fill="none" stroke="black" d="M343.24,-36.22C342.05,-52.96 337.96,-78.31 324.61,-95.5 316.51,-105.94 305.06,-114.1 293.42,-120.34"/>
|
||||
<polygon fill="black" stroke="black" points="292.09,-117.59 284.66,-125.14 295.18,-123.87 292.09,-117.59"/>
|
||||
<text text-anchor="middle" x="434.11" y="-82.2" font-family="Times,serif" font-size="14.00">BODY_FLAG_RESURRECT</text>
|
||||
<text text-anchor="middle" x="434.11" y="-64.95" font-family="Times,serif" font-size="14.00">iteration++</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
BIN
doc/user/emulation/fig/breakdown-nosv.code_legend.png
Normal file
After Width: | Height: | Size: 8.5 KiB |
BIN
doc/user/emulation/fig/breakdown-nosv.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
doc/user/emulation/fig/breakdown.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
doc/user/emulation/fig/mpi-function.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
doc/user/emulation/fig/openmp-subsystem.png
Normal file
After Width: | Height: | Size: 9.4 KiB |
176
doc/user/emulation/fig/parallel-tasks.svg
Normal file
@ -0,0 +1,176 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="117.73958mm"
|
||||
height="26.458332mm"
|
||||
viewBox="0 0 117.73958 26.458332"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
|
||||
sodipodi:docname="parallel-tasks.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="true"
|
||||
inkscape:zoom="1.4289282"
|
||||
inkscape:cx="335.21629"
|
||||
inkscape:cy="58.085495"
|
||||
inkscape:window-width="1914"
|
||||
inkscape:window-height="1025"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1">
|
||||
<inkscape:grid
|
||||
id="grid1"
|
||||
units="px"
|
||||
originx="-9.9999997"
|
||||
originy="-9.9999997"
|
||||
spacingx="0.26458333"
|
||||
spacingy="0.26458334"
|
||||
empcolor="#3f3fff"
|
||||
empopacity="0.25098039"
|
||||
color="#3f3fff"
|
||||
opacity="0.1254902"
|
||||
empspacing="5"
|
||||
dotted="false"
|
||||
gridanglex="30"
|
||||
gridanglez="30"
|
||||
visible="true" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1" />
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-2.6458333,-2.6458333)">
|
||||
<rect
|
||||
style="fill:none;stroke:none;stroke-width:0.3;stroke-linecap:round"
|
||||
id="rect9"
|
||||
width="117.73958"
|
||||
height="26.458332"
|
||||
x="2.6458333"
|
||||
y="2.6458333" />
|
||||
<rect
|
||||
style="fill:#f2f2f2;stroke:#000000;stroke-width:0.3;stroke-linecap:round"
|
||||
id="rect1"
|
||||
width="44.979168"
|
||||
height="23.8125"
|
||||
x="3.96875"
|
||||
y="3.9687502" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="6.6805291"
|
||||
y="9.5720644"
|
||||
id="text1"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Droid Sans';-inkscape-font-specification:'Droid Sans';stroke-width:0.264583"
|
||||
x="6.6805291"
|
||||
y="9.5720644">Normal task</tspan></text>
|
||||
<rect
|
||||
style="fill:#d5ffd5;stroke:#000000;stroke-width:0.3;stroke-linecap:round"
|
||||
id="rect3"
|
||||
width="39.6875"
|
||||
height="10.583333"
|
||||
x="6.614583"
|
||||
y="14.552083" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="18.784389"
|
||||
y="21.011637"
|
||||
id="text3"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3"
|
||||
style="stroke-width:0.264583"
|
||||
x="18.784389"
|
||||
y="21.011637">Body 1</tspan></text>
|
||||
<rect
|
||||
style="fill:#f2f2f2;stroke:#000000;stroke-width:0.3;stroke-linecap:round"
|
||||
id="rect4"
|
||||
width="67.46875"
|
||||
height="23.8125"
|
||||
x="51.59375"
|
||||
y="3.9687502" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="54.704952"
|
||||
y="9.4792204"
|
||||
id="text4"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Droid Sans';-inkscape-font-specification:'Droid Sans';stroke-width:0.264583"
|
||||
x="54.704952"
|
||||
y="9.4792204">Parallel task</tspan></text>
|
||||
<rect
|
||||
style="fill:#d5ffd5;stroke:#000000;stroke-width:0.3;stroke-linecap:round"
|
||||
id="rect6"
|
||||
width="21.166662"
|
||||
height="10.583335"
|
||||
x="54.239586"
|
||||
y="14.552083" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="57.148972"
|
||||
y="21.011637"
|
||||
id="text6"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan6"
|
||||
style="stroke-width:0.264583"
|
||||
x="57.148972"
|
||||
y="21.011637">Body 1</tspan></text>
|
||||
<rect
|
||||
style="fill:#d5ffd5;stroke:#000000;stroke-width:0.3;stroke-linecap:round"
|
||||
id="rect7"
|
||||
width="21.166662"
|
||||
height="10.583335"
|
||||
x="78.052078"
|
||||
y="14.552084" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="80.997643"
|
||||
y="21.011639"
|
||||
id="text7"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan7"
|
||||
style="stroke-width:0.264583"
|
||||
x="80.997643"
|
||||
y="21.011639">Body 2</tspan></text>
|
||||
<rect
|
||||
style="fill:#d5ffd5;stroke:#000000;stroke-width:0.3;stroke-linecap:round"
|
||||
id="rect8"
|
||||
width="14.552085"
|
||||
height="10.583334"
|
||||
x="101.86458"
|
||||
y="14.552084" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
|
||||
x="105.3207"
|
||||
y="20.895952"
|
||||
id="text8"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan8"
|
||||
style="stroke-width:0.264583"
|
||||
x="105.3207"
|
||||
y="20.895952">...</tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.9 KiB |
BIN
doc/user/emulation/fig/tampi-subsystem.png
Normal file
After Width: | Height: | Size: 12 KiB |
@ -47,7 +47,7 @@ the following elements:
|
||||
|
||||
- A single byte model identification (for example `O`).
|
||||
- A set of runtime events with that model identification (see the [list
|
||||
of events](events)).
|
||||
of events](events.md)).
|
||||
- Rules that determine which sequences of events are valid.
|
||||
- The emulation hooks that process each event and modify the state of
|
||||
the emulator.
|
||||
|
242
doc/user/emulation/mpi.md
Normal file
@ -0,0 +1,242 @@
|
||||
# MPI model
|
||||
|
||||
The [Message Passing Interface (MPI)][mpi] is a standard library interface
|
||||
specification for message-passing communication libraries targeting parallel
|
||||
computing architectures. The interface defines functions for point-to-point
|
||||
communication primitives, collectives, remote memory access (RMA), I/O and
|
||||
process management.
|
||||
|
||||
The [Sonar][sonar] library instruments the most essential MPI functions that any
|
||||
user application or any external library may execute. Sonar tracks the calls to
|
||||
these MPI functions made at each point. Both users and developers can use this
|
||||
information to analyze the time spent inside MPI functions. The next section
|
||||
explains a view that is provided to achieve this goal.
|
||||
|
||||
The Sonar library is compatible with the MPI standards 3.0, 3.1 and 4.0. See the
|
||||
[MPI documentation][mpi docs] for more information about the MPI standards and
|
||||
their functions.
|
||||
|
||||
[mpi]: https://www.mpi-forum.org
|
||||
[mpi docs]: https://www.mpi-forum.org/docs
|
||||
[sonar]: https://github.com/bsc-pm/sonar
|
||||
[sonar docs]: https://github.com/bsc-pm/sonar#readme
|
||||
|
||||
Sonar requires an installation of the ovni library and an MPI library. Use the
|
||||
option `--with-ovni=prefix` when building Sonar to specify the ovni prefix. The
|
||||
building procedure will compile and install the `libsonar-mpi.so`. See the
|
||||
[Sonar documentation][sonar docs] for more details about the building steps.
|
||||
|
||||
An application can instrument the MPI function calls by linking with the Sonar
|
||||
library `libsonar-mpi.so`. At run-time, the Sonar library does not enable the
|
||||
instrumentation by default. Sonar instruments the MPI functions when the
|
||||
environment variable `SONAR_MPI_INSTRUMENT` is defined to `ovni`. Its default
|
||||
value is `none`.
|
||||
|
||||
As an example, a user can generate a trace with MPI function events of an MPI
|
||||
program `app.c` in this way:
|
||||
|
||||
```
|
||||
$ mpicc -c app.c -o app.o
|
||||
$ mpicc app.o -o app -L${SONAR_PREFIX}/lib -lsonar-mpi
|
||||
$ export SONAR_MPI_INSTRUMENT=ovni
|
||||
$ mpirun -n 2 ./app
|
||||
```
|
||||
|
||||
This will generate an ovni trace in the `ovni` directory, which can be emulated
|
||||
using the `ovniemu` tool.
|
||||
|
||||
!!! Note
|
||||
|
||||
Notice that the order of libraries at the linking stage is important. The
|
||||
Sonar library should always have precedence on the MPI library. That's the
|
||||
usual behavior when using `mpicc` tools. The `mpicc` tool should link the
|
||||
application with the MPI libraries as the last libraries in the list of
|
||||
application's dependencies. If this order is not respected, the Sonar
|
||||
library would not be able to intercept the MPI function calls and instrument
|
||||
them.
|
||||
|
||||
!!! Note
|
||||
|
||||
Notice the Task-Aware MPI (TAMPI), as well as other external libraries,
|
||||
intercepts the MPI functions and may call MPI functions instead. Thus, the
|
||||
order in which such libraries and Sonar are linked to the application will
|
||||
also alter the resulting ovni trace. Give precedence to the Sonar library to
|
||||
instrument the MPI function calls made by the application. You can achieve
|
||||
by linking your application with the linking options `-lsonar-mpi -ltampi`.
|
||||
Otherwise, give precendence to the TAMPI library to track the real MPI
|
||||
functions that are being executed (i.e., the ones that the MPI library
|
||||
actually runs). In this case, use the linking options `-ltampi -lsonar-mpi`.
|
||||
|
||||
## Function view
|
||||
|
||||
The function view attempts to provide a general overview of which are the MPI
|
||||
functions being executed at any point in time. The function view shows the MPI
|
||||
functions called by each thread (and for each CPU, the MPI functions executed
|
||||
by the running thread in that CPU).
|
||||
|
||||
The function states shown in this view are listed below. Each function state
|
||||
(in bold) includes a list of all the MPI functions that are instrumented as
|
||||
that particular state. Notice that only the most important functions are
|
||||
instrumented. Also, notice that not all functions have their own state. For
|
||||
instance, the large count MPI (with `_c` suffix) introduced in MPI 4.0, the
|
||||
extended functions (with `v` or `w` suffix), and Fortran functions (with lower
|
||||
case name and `_` suffix) are instrumented as their simple C function without
|
||||
suffix.
|
||||
|
||||
- *Setup functions*: The running thread is executing MPI setup functions to
|
||||
initialize and finalize the MPI environment. The following function states
|
||||
are shown:
|
||||
|
||||
- **MPI_Init**: `MPI_Init`, `mpi_init_`
|
||||
|
||||
- **MPI_Init_thread**: `MPI_Init_thread`, `mpi_init_thread_`
|
||||
|
||||
- **MPI_Finalize**: `MPI_Finalize`, `mpi_finalize_`
|
||||
|
||||
- *Request functions*: The running thread is executing MPI functions that wait
|
||||
or test MPI requests after being generated by non-blocking MPI operations. The
|
||||
following functions are instrumented:
|
||||
|
||||
- **MPI_Wait**: `MPI_Wait`, `mpi_wait_`
|
||||
|
||||
- **MPI_Waitall**: `MPI_Waitall`, `mpi_waitall_`
|
||||
|
||||
- **MPI_Waitany**: `MPI_Waitany`, `mpi_waitany_`
|
||||
|
||||
- **MPI_Waitsome**: `MPI_Waitsome`, `mpi_waitsome_`
|
||||
|
||||
- **MPI_Test**: `MPI_Test`, `mpi_test_`
|
||||
|
||||
- **MPI_Testall**: `MPI_Testall`, `mpi_testall_`
|
||||
|
||||
- **MPI_Testany**: `MPI_Testany`, `mpi_testany_`
|
||||
|
||||
- **MPI_Testsome**: `MPI_Testsome`, `mpi_testsome_`
|
||||
|
||||
- *Point-to-point functions*: The running thread is communicating through MPI
|
||||
by executing point-to-point primitives. The instrumented functions are:
|
||||
|
||||
- **MPI_Recv**: `MPI_Recv`, `MPI_Recv_c`, `mpi_recv_`
|
||||
|
||||
- **MPI_Send**: `MPI_Send`, `MPI_Send_c`, `mpi_send_`
|
||||
|
||||
- **MPI_Bsend**: `MPI_Bsend`, `MPI_Bsend_c`, `mpi_bsend_`
|
||||
|
||||
- **MPI_Rsend**: `MPI_Rsend`, `MPI_Rsend_c`, `mpi_rsend_`
|
||||
|
||||
- **MPI_Ssend**: `MPI_Ssend`, `MPI_Ssend_c`, `mpi_ssend_`
|
||||
|
||||
- **MPI_Sendrecv**: `MPI_Sendrecv`, `MPI_Sendrecv_c`, `mpi_sendrecv_`
|
||||
|
||||
- **MPI_Sendrecv_replace**: `MPI_Sendrecv_replace`, `MPI_Sendrecv_replace_c`,
|
||||
`mpi_sendrecv_replace_`
|
||||
|
||||
- **MPI_Irecv**: `MPI_Irecv`, `MPI_Irecv_c`, `mpi_irecv_`
|
||||
|
||||
- **MPI_Isend**: `MPI_Isend`, `MPI_Isend_c`, `mpi_isend_`
|
||||
|
||||
- **MPI_Ibsend**: `MPI_Ibsend`, `MPI_Ibsend_c`, `mpi_ibsend_`
|
||||
|
||||
- **MPI_Irsend**: `MPI_Irsend`, `MPI_Irsend_c`, `mpi_irsend_`
|
||||
|
||||
- **MPI_Issend**: `MPI_Issend`, `MPI_Issend_c`, `mpi_issend_`
|
||||
|
||||
- **MPI_Isendrecv**: `MPI_Isendrecv`, `MPI_Isendrecv_c`, `mpi_isendrecv_`
|
||||
|
||||
- **MPI_Isendrecv_replace**: `MPI_Isendrecv_replace`,
|
||||
`MPI_Isendrecv_replace_c`, `mpi_isendrecv_replace_`
|
||||
|
||||
- *Collective functions*: The running thread is communicating through MPI by
|
||||
executing collective functions. The instrumented functions are:
|
||||
|
||||
- **MPI_Gather**: `MPI_Gather`, `MPI_Gatherv`, `MPI_Gather_c`,
|
||||
`MPI_Gatherv_c`, `mpi_gather_`, `mpi_gatherv_`
|
||||
|
||||
- **MPI_Allgather**: `MPI_Allgather`, `MPI_Allgatherv`, `MPI_Allgather_c`,
|
||||
`MPI_Allgatherv_c`, `mpi_allgather_`, `mpi_allgatherv_`
|
||||
|
||||
- **MPI_Scatter**: `MPI_Scatter`, `MPI_Scatterv`, `MPI_Scatter_c`,
|
||||
`MPI_Scatterv_c`, `mpi_scatter_`, `mpi_scatterv_`
|
||||
|
||||
- **MPI_Reduce**: `MPI_Reduce`, `MPI_Reduce_c`, `mpi_reduce_`
|
||||
|
||||
- **MPI_Reduce_scatter**: `MPI_Reduce_scatter`, `MPI_Reduce_scatter_c`,
|
||||
`mpi_reduce_scatter_`
|
||||
|
||||
- **MPI_Reduce_scatter_block**: `MPI_Reduce_scatter_block`,
|
||||
`MPI_Reduce_scatter_block_c`, `mpi_reduce_scatter_block_`
|
||||
|
||||
- **MPI_Allreduce**: `MPI_Allreduce`, `MPI_Allreduce_c`, `mpi_allreduce_`
|
||||
|
||||
- **MPI_Barrier**: `MPI_Barrier`, `MPI_Barrier_c`, `mpi_barrier_`
|
||||
|
||||
- **MPI_Bcast**: `MPI_Bcast`, `MPI_Bcast_c`, `mpi_bcast`
|
||||
|
||||
- **MPI_Alltoall**: `MPI_Alltoall`, `MPI_Alltoallv`, `MPI_Alltoallw`,
|
||||
`MPI_Alltoall_c`, `MPI_Alltoallv_c`, `MPI_Alltoallw_c`, `mpi_alltoall_`,
|
||||
`mpi_alltoallv_`, `mpi_alltoallw_`
|
||||
|
||||
- **MPI_Scan**: `MPI_Scan`, `MPI_Scan_c`, `mpi_scan_`
|
||||
|
||||
- **MPI_Exscan**: `MPI_Exscan`, `MPI_Exscan_c`, `mpi_exscan_`
|
||||
|
||||
- **MPI_Igather**: `MPI_Igather`, `MPI_Igatherv`, `MPI_Igather_c`,
|
||||
`MPI_Igatherv_c`, `mpi_igather_`, `mpi_igatherv_`
|
||||
|
||||
- **MPI_Iallgather**: `MPI_Iallgather`, `MPI_Iallgatherv`,
|
||||
`MPI_Iallgather_c`, `MPI_Iallgatherv_c`, `mpi_iallgather_`,
|
||||
`mpi_iallgatherv_`
|
||||
|
||||
- **MPI_Iscatter**: `MPI_Iscatter`, `MPI_Iscatterv`, `MPI_Iscatter_c`,
|
||||
`MPI_Iscatterv_c`, `mpi_iscatter_`, `mpi_iscatterv_`
|
||||
|
||||
- **MPI_Ireduce**: `MPI_Ireduce`, `MPI_Ireduce_c`, `mpi_ireduce_`
|
||||
|
||||
- **MPI_Iallreduce**: `MPI_Iallreduce`, `MPI_Iallreduce_c`, `mpi_iallreduce_`
|
||||
|
||||
- **MPI_Ireduce_scatter**: `MPI_Ireduce_scatter`, `MPI_Ireduce_scatter_c`,
|
||||
`mpi_ireduce_scatter_`
|
||||
|
||||
- **MPI_Ireduce_scatter_block**: `MPI_Ireduce_scatter_block`,
|
||||
`MPI_Ireduce_scatter_block_c`, `mpi_ireduce_scatter_block_`
|
||||
|
||||
- **MPI_Ibarrier**: `MPI_Ibarrier`, `MPI_Ibarrier_c`, `mpi_ibarrier_`
|
||||
|
||||
- **MPI_Ibcast**: `MPI_Ibcast`, `MPI_Ibcast_c`, `mpi_ibcast_`
|
||||
|
||||
- **MPI_Ialltoall**: `MPI_Ialltoall`, `MPI_Ialltoallv`, `MPI_Ialltoallw`,
|
||||
`MPI_Ialltoall_c`, `MPI_Ialltoallv_c`, `MPI_Ialltoallw_c`,
|
||||
`mpi_ialltoall_`, `mpi_ialltoallv_`, `mpi_ialltoallw_`
|
||||
|
||||
- **MPI_Iscan**: `MPI_Iscan`, `MPI_Iscan_c`, `mpi_iscan_`
|
||||
|
||||
- **MPI_Iexscan**: `MPI_Iexscan`, `MPI_Iexscan_c`, `mpi_iexscan_`
|
||||
|
||||
!!! Note
|
||||
|
||||
The Sonar library does not support large count MPI functions for the Fortran
|
||||
language yet, and thus, these functions are not instrumented.
|
||||
|
||||
The figure below shows an example of the MPI function view. The program executes
|
||||
a distributed stencil algorithm with MPI and OmpSs-2. There are several MPI
|
||||
processes, each running OmpSs-2 tasks on an exclusive set of CPUs. Most of these
|
||||
are computation tasks, while the others are concurrent tasks performing
|
||||
communications using the blocking mode of the TAMPI library. These use `MPI_Send`
|
||||
and `MPI_Recv` functions to send and receive blocks of data. The program was
|
||||
linked with Sonar and preceding the TAMPI library. Thus, the trace shows the
|
||||
blocking MPI function calls made by the application.
|
||||
|
||||

|
||||
|
||||
The light green areas correspond to the `MPI_Init_thread` calls, the grey ones
|
||||
are `MPI_Send` calls and the dark green areas are `MPI_Recv` calls. There are
|
||||
other secondary calls like `MPI_Bcast` (orange), `MPI_Barrier` (blue) and
|
||||
`MPI_Finalize` (red) calls.
|
||||
|
||||
As mentioned above, the trace shows the blocking MPI functions called by the
|
||||
application because Sonar was placed before TAMPI in the linking order. However,
|
||||
these blocking calls may not be actually executed by the MPI library; TAMPI will
|
||||
transparently replace them with non-blocking calls (e.g., `MPI_Isend` and
|
||||
`MPI_Irecv`) and a polling mechanism for the generated MPI requests. If you want
|
||||
to explore the actual MPI functions being executed, you should link the Sonar
|
||||
library after TAMPI.
|
@ -76,6 +76,17 @@ This view shows the type of each thread:
|
||||
- External: used for external threads that attach to Nanos6 (currently
|
||||
there are not in use).
|
||||
|
||||
## Idle view
|
||||
|
||||
The idle view shows when CPUs become *Idle*. This state is displayed when no
|
||||
thread is *Running* in the CPU or when a worker is marked as Stalled (not making
|
||||
progress) such as when busy waiting but still *Running* in the CPU. The CPUs can
|
||||
also be marked as *Absorbing noise*, when they are running a worker in the sponge
|
||||
mode, which leaves the CPU free to absorb noise from system processes and
|
||||
interruptions to avoid disruption in the other CPUs.
|
||||
|
||||
In particular, a worker requesting a new task will become Stalled after entering
|
||||
the delegation lock and performing a complete iteration without receiving work.
|
||||
|
||||
## Subsystem view
|
||||
|
||||
@ -193,6 +204,30 @@ The complete list of subsystems and sections is shown below.
|
||||
subsystem in Nanos6. Tasks will continue to be in the running state until
|
||||
paused or finished.
|
||||
|
||||
## Breakdown view (experimental)
|
||||
|
||||
The breakdown view shows the **number** of CPUs in a given state, stacking
|
||||
similar states together. Its a mix of the task type, subsystem and idle views.
|
||||
|
||||
!!! Important
|
||||
|
||||
This view is only generated with the `-b` option of ovniemu. This
|
||||
feature is experimental, new changes may break compatibility.
|
||||
|
||||
Here is an example of the Heat mini-app.
|
||||
|
||||

|
||||
|
||||
The *Idle* state shows when a CPU has no threads running or when the worker is
|
||||
Stalled (is not making progress). Below the Idle state the tasks are shown by
|
||||
their label, in this case only *block computation* is running. Above the Idle
|
||||
state, the runtime subsystems are shown.
|
||||
|
||||
This view gives a quick overview of the usage of the CPUs over time and which
|
||||
tasks are taking more time. It also shows which sections are unable to use all
|
||||
the CPUs, showing potential problems with the parallelization. In this example
|
||||
not all the CPUs can be filled with *block computation* tasks.
|
||||
|
||||
## Limitations
|
||||
|
||||
The task for clause is partially supported, as currently the emulator uses a
|
||||
|
@ -1,9 +1,42 @@
|
||||
# nOS-V model
|
||||
|
||||
The [nOS-V library][nosv] implements a user space runtime that can schedule
|
||||
tasks to run in multiple CPUs. The nOS-V library is instrumented to
|
||||
track the internal state of the runtime as well as emit information
|
||||
about the tasks that are running.
|
||||
|
||||
[nosv]: https://github.com/bsc-pm/nos-v
|
||||
|
||||
## Task model
|
||||
|
||||
The nOS-V runtime is composed of tasks that can be scheduled to run in
|
||||
threads. Tasks can be paused and resumed, leaving the CPUs free to
|
||||
execute other tasks. The nOS-V model tracks the state of each task as
|
||||
well as the state of the runtime internal state.
|
||||
execute other tasks.
|
||||
|
||||
In nOS-V, parallel tasks can also be scheduled multiple times and the
|
||||
same task may run concurrently in several CPUs. To model this scenario,
|
||||
we introduce the concept of *body*, which maps to each execution of the
|
||||
same task, with a unique body id.
|
||||
|
||||

|
||||
|
||||
A normal task only has one body, while a parallel task (created with
|
||||
`TASK_FLAG_PARALLEL`) can have more than one body. Each body holds the
|
||||
execution state, and can transition to different execution states
|
||||
following this state diagram:
|
||||
|
||||

|
||||
|
||||
Bodies begin in the Created state and transition to Running when they
|
||||
begin the execution. Bodies that can be paused (created with the flag
|
||||
`BODY_FLAG_PAUSE` can transition to the Paused state.
|
||||
|
||||
Additionally, bodies can run multiple times if they are created with the
|
||||
`BODY_FLAG_RESURRECT`, and transition from Dead to Running. This
|
||||
transition is required to model the tasks that implement the taskiter in
|
||||
NODES, which will be submitted multiple times for execution reusing the
|
||||
same task id and body id. Every time a body runs again, the iteration
|
||||
number is increased.
|
||||
|
||||
## Task type colors
|
||||
|
||||
@ -22,3 +55,52 @@ provides two desirable properties:
|
||||
For more details, see [this MR][1].
|
||||
|
||||
[1]: https://pm.bsc.es/gitlab/rarias/ovni/-/merge_requests/27
|
||||
|
||||
## Subsystem view
|
||||
|
||||
The subsystem view provides a simplified view on what is the nOS-V
|
||||
runtime doing over time. The view follows the same rules described in
|
||||
the [subsystem view of Nanos6](nanos6.md/#subsystem_view).
|
||||
|
||||
|
||||
## Idle view
|
||||
|
||||
The idle view shows the progress state of the running threads:
|
||||
*Progressing* and *Resting*. The *Progressing* state is shown when they
|
||||
are making useful progress and the *Resting* state when they are waiting
|
||||
for work. When workers start running, by definition, they begin in the
|
||||
Progressing state and there are some situations that make them
|
||||
transition to Resting:
|
||||
|
||||
- When workers are waiting in the delegation lock after some spins or
|
||||
when instructed to go to sleep.
|
||||
- When the server is trying to serve tasks, but there are no more tasks
|
||||
available.
|
||||
|
||||
They will go back to Progressing as soon as they receive work. The
|
||||
specific points at which they do so can be read in [nOS-V source
|
||||
code](https://gitlab.bsc.es/nos-v/nos-v) by looking at the
|
||||
`instr_worker_resting()` and `instr_worker_progressing()` trace points.
|
||||
|
||||
This view is intended to detect parts of the execution time on which the
|
||||
workers don't have work, typically because the application doesn't have
|
||||
enough parallelism or the scheduler is unable to serve work fast enough.
|
||||
|
||||
## Breakdown view
|
||||
|
||||
The breakdown view displays a summary of what is happening in all CPUs
|
||||
by mixing in a single timeline the subsystem, idle and task type views.
|
||||
Specifically, it shows how many CPUs are resting as defined by the idle
|
||||
view, how many are inside a given task by showing the task type label,
|
||||
and how many are in a particular subsystem of the runtime.
|
||||
|
||||
!!! Important
|
||||
|
||||
You must specify *ovni.level = 3* or higher in *nosv.toml* and pass
|
||||
the *-b* option to ovniemu to generate the breakdown view.
|
||||
|
||||
Notice that the vertical axis shows the **number**
|
||||
of CPUs in that state, not the physical CPUs like other views.
|
||||
Here is an example of the Heat mini-app:
|
||||
|
||||

|
||||
|
264
doc/user/emulation/openmp.md
Normal file
@ -0,0 +1,264 @@
|
||||
# OpenMP model
|
||||
|
||||
The [OpenMP programming model](https://www.openmp.org) is a widely used API and
|
||||
set of directives for parallel programming, allowing developers to write
|
||||
multi-threaded and multi-process applications more easily. In this document we
|
||||
refer to the
|
||||
[version 5.2 of the OpenMP specification](https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-2.pdf).
|
||||
|
||||
The [LLVM OpenMP Runtime](https://openmp.llvm.org/design/Runtimes.html) provides
|
||||
an implementation of the OpenMP specification as a component of the LLVM
|
||||
compiler infrastructure. We have modified the LLVM OpenMP runtime (libomp) to run on top
|
||||
of the [nOS-V](https://gitlab.bsc.es/nos-v/nos-v) runtime as part of the
|
||||
[OmpSs-2 LLVM compiler](https://pm.bsc.es/llvm-ompss), named **libompv**.
|
||||
|
||||
We have added instrumentation events to libompv designed to be enabled along
|
||||
the [nOS-V instrumentation](nosv.md). This document describes all the
|
||||
instrumentation features included in our modified libompv runtime to identify
|
||||
what is happening. This data is useful for both users and developers of the
|
||||
OpenMP runtime to analyze issues and undesired behaviors.
|
||||
|
||||
!!! Note
|
||||
|
||||
Instrumenting libomp is planned but is not yet posible.
|
||||
For now you must use libompv.
|
||||
|
||||
## Enable the instrumentation
|
||||
|
||||
To generate runtime traces, you will have to:
|
||||
|
||||
1. **Build nOS-V with ovni support:** Refer to the
|
||||
[nOS-V
|
||||
documentation](https://github.com/bsc-pm/nos-v/blob/master/docs/user/tracing.md).
|
||||
Typically you should use the `--with-ovni` option at configure time to specify
|
||||
where ovni is installed.
|
||||
2. **Build libompv with ovni and nOS-V support:** Use the `PKG_CONFIG_PATH`
|
||||
environment variable to specify the nOS-V and ovni installation
|
||||
when configuring CMake.
|
||||
3. **Enable the instrumentation in nOS-V at runtime:** Refer to the
|
||||
[nOS-V documentation](https://github.com/bsc-pm/nos-v/blob/master/docs/user/tracing.md)
|
||||
to find out how to enable the tracing at runtime. Typically you can just set
|
||||
`NOSV_CONFIG_OVERRIDE="instrumentation.version=ovni"`.
|
||||
4. **Enable the instrumentation of libompv at runtime:** Set the environment
|
||||
variable `OMP_OVNI=1`.
|
||||
|
||||
Next sections describe each of the views included for analysis.
|
||||
|
||||
## Subsystem view
|
||||
|
||||

|
||||
|
||||
The view is complemented with the information of [nOS-V views](nosv.md),
|
||||
as libompv uses nOS-V tasks to run the workers.
|
||||
Subsystem illustrates the activities of each thread with different states:
|
||||
|
||||
- **Work-distribution subsystem**: Related to work-distribution constructs,
|
||||
[in Chapter 11][workdis].
|
||||
|
||||
- **Distribute**: Running a *Distribute* region.
|
||||
|
||||
- **Dynamic for chunk**: Running a chunk of a dynamic *for*, which often
|
||||
involve running more than one iteration of the loop. See the
|
||||
[limitations](#dynamic_for) below.
|
||||
|
||||
- **Dynamic for initialization**: Preparing a dynamic *for*.
|
||||
|
||||
- **Static for chunk**: Executing the assigned iterations of an static
|
||||
*for*.
|
||||
|
||||
- **Single**: Running a *Single* region. All threads of the parallel region
|
||||
participate.
|
||||
|
||||
- **Section**: Running a *Section* region. All threads of the parallel region
|
||||
participate.
|
||||
|
||||
- **Task subsystem**: Related to tasking constructs, [in Chapter 12][tasking].
|
||||
|
||||
- **Allocation**: Allocating the task descriptor.
|
||||
|
||||
- **Check deps**: Checking if the task has pending dependencies to be
|
||||
fulfilled. When all dependencies are fulfilled the task will be scheduled.
|
||||
|
||||
- **Duplicating**: Duplicating the task descriptor in a taskloop.
|
||||
|
||||
- **Releasing deps**: Releasing dependencies at the end of a task. This
|
||||
state is always present even if the task has no dependencies.
|
||||
|
||||
- **Running task**: Executing a task.
|
||||
|
||||
- **Running task if0**: Executing a task if0.
|
||||
|
||||
- **Scheduling**: Adding the task to the scheduler for execution.
|
||||
|
||||
- **Taskgroup**: Waiting in a *taskgroup* construct.
|
||||
|
||||
- **Taskwait**: Waiting in a *taskwait* construct.
|
||||
|
||||
- **Taskwait deps**: Trying to execute tasks until dependencies have been
|
||||
fulfilled. This appears typically in a task if0 with dependencies or a
|
||||
taskwait with deps.
|
||||
|
||||
- **Taskyield**: Performing a *taskyield* construct.
|
||||
|
||||
- **Critical subsystem**: Related to the *critical* Constuct, in [Section 15.2][critical].
|
||||
|
||||
- **Acquiring**: Waiting to acquire a *Critical* section.
|
||||
|
||||
- **Section**: Running the *Critical* section.
|
||||
|
||||
- **Releasing**: Waiting to release a *Critical* section.
|
||||
|
||||
- **Barrier subsystem**: Related to barriers, in [Section 15.3][barrier].
|
||||
**All barriers can try to execute tasks**.
|
||||
|
||||
- **Barrier: Fork**: Workers wait for a release signal from the master thread to
|
||||
continue. The master can continue as soon as it signals the workers. It is
|
||||
done at the beginning of a fork-join region.
|
||||
|
||||
- **Barrier: Join**: The master thread waits until all workers finish their work.
|
||||
Workers can continue as soon as they signal the master. It is done at the
|
||||
end of a fork-join region.
|
||||
|
||||
- **Barrier: Plain**: Performing a plain barrier, which waits for a release
|
||||
signal from the master thread to continue. It is done at the beginning of
|
||||
a fork-join region, in the `__kmp_join_barrier()` function.
|
||||
|
||||
- **Barrier: Task**: Blocked in an additional tasking barrier *until all previous
|
||||
tasks have been executed*. Only happens when executed with `KMP_TASKING=1`.
|
||||
|
||||
- **Runtime subsystem**: Internal operations of the runtime.
|
||||
|
||||
- **Attached**: Present after the call to `nosv_attach()` and before
|
||||
`nosv_detach()`. This state is a hack.
|
||||
|
||||
- **Fork call**: Preparing a parallel section using the fork-join model.
|
||||
Only called from the master thread.
|
||||
|
||||
- **Init**: Initializing the libompv runtime.
|
||||
|
||||
- **Internal microtask**: Running a internal libompv function as a microtask.
|
||||
|
||||
- **User microtask**: Running user code as a microtask in a worker thread.
|
||||
|
||||
- **Worker main Loop**: Running the main loop, where the workers run the
|
||||
fork barrier, run a microtask and perform a join barrier until there is no
|
||||
more work.
|
||||
|
||||
!!! Note
|
||||
|
||||
The generated HTML version of the OpenMP 5.2 specification has some parts
|
||||
missing, so we link directly to the PDF file which may not work in some
|
||||
browsers.
|
||||
|
||||
[workdis]: https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-2.pdf#chapter.11
|
||||
[tasking]: https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-2.pdf#chapter.12
|
||||
[critical]: https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-2.pdf#section.15.2
|
||||
[barrier]: https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-2.pdf#section.15.3
|
||||
|
||||
## Label view
|
||||
|
||||
The label view displays the text in the `label()` clause of OpenMP
|
||||
tasks and work distribution constructs (static and dynamic for, single
|
||||
and section). When the label is not provided, the source file and source
|
||||
line location is used instead.
|
||||
|
||||
When nesting multiple tasks or work distribution constructs, only the
|
||||
innermost label is shown.
|
||||
|
||||
Note that in this view, the numeric event value is a hash function of
|
||||
the type label, so two distinct tasks (declared in different parts of
|
||||
the code) with the same label will share the event value and have the
|
||||
same color.
|
||||
|
||||
## Task ID view
|
||||
|
||||
The task ID view represents the numeric ID of the OpenMP task that is
|
||||
currently running on each thread. The ID is a monotonically increasing
|
||||
identifier assigned on task creation. Lower IDs correspond to tasks
|
||||
created at an earlier point than higher IDs.
|
||||
|
||||
## Limitations
|
||||
|
||||
As the compiler generates the code that perform the calls to the libompv
|
||||
runtime, there are some parts of the execution that are complicated to
|
||||
instrument by just placing a pair of events to delimite a function.
|
||||
|
||||
For those cases we use an approximation which is documented in the following
|
||||
subsections.
|
||||
|
||||
### Dynamic for
|
||||
|
||||
The generated code of a *dynamic for* has the following structure:
|
||||
|
||||
```c
|
||||
__kmpc_dispatch_init_4(...);
|
||||
while (__kmpc_dispatch_next_4(...)) {
|
||||
for (i = ...; i <= ...; i++) {
|
||||
// User code ...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The function `__kmpc_dispatch_next_4()` returns `true` if there are more
|
||||
chunks (group of iterations) to be executed by the thread, otherwise it returns
|
||||
`false`.
|
||||
|
||||
Ideally we want to instrument each chunk with a pair of begin and end events.
|
||||
|
||||
The problem with the instrumentation is that there is no easy way of determining
|
||||
if the call to `__kmpc_dispatch_next_4()` is processing the first chunk, just
|
||||
after `__kmpc_dispatch_init_4()`, or is coming from other chunks due to the
|
||||
while loop.
|
||||
|
||||
Therefore, from the `__kmpc_dispatch_next_4()` alone, we cannot determine if we
|
||||
need to only emit a single "begin a new chunk" event or we need to emit the pair
|
||||
of events "finish the last chunk" and "begin a new one".
|
||||
|
||||
So, as a workaround, we emit an event from the end of `__kmpc_dispatch_init_4()`
|
||||
starting a new chunk (which is fake), and then from `__kmpc_dispatch_next_4()` we
|
||||
always emit the "finish the last chunk" and "begin a new one" events (unless
|
||||
there are no more chunks, in which case we don't emit the "begin a new one"
|
||||
event).
|
||||
|
||||
This will cause an spurious *Work-distribution: Dynamic for chunk* state at the
|
||||
beginning of each dynamic for, which should be very short and is not really a
|
||||
chunk.
|
||||
|
||||
### Static for
|
||||
|
||||
The generated code of an *static for* has the following structure:
|
||||
|
||||
```c
|
||||
__kmpc_for_static_init_4(...);
|
||||
for (i = ...; i <= ...; i++) {
|
||||
// User code ...
|
||||
}
|
||||
__kmpc_for_static_fini(...);
|
||||
```
|
||||
|
||||
As this code is generated by the compiler we cannot easily add the begin/end
|
||||
pair of events to mark the *Work-distribution: Static for chunk* state.
|
||||
|
||||
We assume that by placing the "begin processing a chunk" event at the end of
|
||||
`__kmpc_for_static_init_4()` and the "end processing the chunk" event at
|
||||
the beginning of `__kmpc_for_static_fini()` is equivalent to adding the
|
||||
events surrounding the for loop.
|
||||
|
||||
### Task if0
|
||||
|
||||
The generated code of an *if0 task* has the following structure:
|
||||
|
||||
```c
|
||||
... = __kmpc_omp_task_alloc(...);
|
||||
__kmpc_omp_taskwait_deps_51(...); // If task has dependencies
|
||||
__kmpc_omp_task_begin_if0(...);
|
||||
// Call to the user code
|
||||
omp_task_entry_(...);
|
||||
__kmpc_omp_task_complete_if0(...);
|
||||
```
|
||||
|
||||
Instead of injecting the begin and end events in the user code, we
|
||||
approximate it by placing the "begin if0 task" event at the end of the
|
||||
`__kmpc_omp_task_begin_if0` function and the "end if0 task" event at the
|
||||
beginning of `__kmpc_omp_task_complete_if0`. This state will be shown as
|
||||
*Task: Running task if0*.
|
@ -60,4 +60,4 @@ will set all the channels to an error state.
|
||||
The emulator automatically switches the channels from one thread to
|
||||
another when a thread is switched from the CPU. So the different models
|
||||
don't need to worry about thread transitions. See the
|
||||
[channels](../channels) section for more information.
|
||||
[channels](../../dev/channels.md) section for more information.
|
||||
|
144
doc/user/emulation/tampi.md
Normal file
@ -0,0 +1,144 @@
|
||||
# TAMPI model
|
||||
|
||||
The Task-Aware MPI (TAMPI) library extends the functionality of standard MPI
|
||||
libraries by providing new mechanisms for improving the interoperability between
|
||||
parallel task-based programming models, such as OpenMP and OmpSs-2, and MPI
|
||||
communications. This library allows the safe and efficient execution of MPI
|
||||
operations from concurrent tasks and guarantees the transparent management and
|
||||
progress of these communications.
|
||||
|
||||
[tampi repo]: https://github.com/bsc-pm/tampi
|
||||
[tampi docs]: https://github.com/bsc-pm/tampi#readme
|
||||
[tampi blk]: https://github.com/bsc-pm/tampi#blocking-mode-ompss-2
|
||||
[tampi nonblk]: https://github.com/bsc-pm/tampi#non-blocking-mode-openmp--ompss-2
|
||||
|
||||
The TAMPI library has instrumented the execution of its task-aware functions
|
||||
with ovni. To obtain an instrumented library, TAMPI must be built passing the
|
||||
`--with-ovni` configure option and specifying the ovni installation prefix. At
|
||||
run-time, the user can enable the instrumentation by defining the environment
|
||||
variable `TAMPI_INSTRUMENT=ovni`.
|
||||
|
||||
For more information regarding TAMPI or how to enable its instrumentation see
|
||||
the TAMPI [repository][tampi repo] and [documentation][tampi docs].
|
||||
|
||||
TAMPI is instrumented to track the execution path inside the run-time library
|
||||
to identify what is happening at each moment. This information can be used by
|
||||
both users and developers to analyze problems or to better understand the
|
||||
execution behavior of TAMPI communications and its background services. There is
|
||||
one view generated to achieve this goal.
|
||||
|
||||
## Subsystem view
|
||||
|
||||
The subsystem view attempts to provide a general overview of what TAMPI is doing
|
||||
at any point in time. The view shows the state inside the TAMPI library for each
|
||||
thread (and for each CPU, the state of the running thread in that CPU). This
|
||||
subsystem state view sticks to the definition of subsystem states from the
|
||||
[Nanos6](nanos6.md#subsystem_view).
|
||||
|
||||
The states shown in this view are:
|
||||
|
||||
- **Library code subsystem**: Indicating whether the running thread is executing
|
||||
effective TAMPI library code. These subsystem states wrap the rest of
|
||||
subsystems that are described below. No other TAMPI state can appear outside
|
||||
of a TAMPI library code subsystem state.
|
||||
|
||||
- **Interface function**: Running any TAMPI API function or an intercepted
|
||||
MPI function which requires task-awareness. When the user application
|
||||
disables a TAMPI mode, whether the [blocking][tampi blk] or
|
||||
[non-blocking][tampi nonblk] mode, any call to an interface function
|
||||
corresponding to the disabled mode will not appear in the view. Operations
|
||||
that are directly forwarded to MPI (because TAMPI is not asked to apply
|
||||
task-awareness) will not appear.
|
||||
|
||||
- **Polling function**: The TAMPI library can launch internal tasks to
|
||||
execute polling functions in the background. Currently, TAMPI launches a
|
||||
polling task that periodically checks and processes the pending MPI
|
||||
requests generated by task-aware operations. This polling state may not
|
||||
appear if none of the TAMPI modes are enabled by the user application.
|
||||
|
||||
- **Communication subsystem**: The running thread is communicating through MPI
|
||||
or issuing an asynchronous communication operation.
|
||||
|
||||
- **Issuing a non-blocking operation**: Issuing a non-blocking MPI operation
|
||||
that can generate an MPI request.
|
||||
|
||||
- **Ticket subsystem**: Creation and managing of tickets. A ticket is an
|
||||
internal object that describes the relation between a set of pending MPI
|
||||
requests and the user communication task that is *waiting* (synchronous or
|
||||
asynchronously) on them. A ticket is used for both [blocking][tampi blk] and
|
||||
[non-blocking][tampi nonblk] operations.
|
||||
|
||||
- **Creating a ticket**: Creating a ticket that is linked to a set of MPI
|
||||
requests and a user task. The user task is the task that is *waiting* for
|
||||
these requests to complete. Notice that *waiting* does not mean that the
|
||||
task will synchronously wait for them. The ticket is initialized with a
|
||||
counter of how many requests are still pending. The ticket is completed,
|
||||
and thus, the task is notified, when this counter becomes zero.
|
||||
|
||||
- **Waiting for the ticket completion**: The user task, during a blocking
|
||||
TAMPI operation, is waiting a ticket and its requests to complete. The
|
||||
task may be blocked and yield the CPU meanwhile. Notice that user tasks
|
||||
calling non-blocking TAMPI operations will not enter in this state.
|
||||
|
||||
- **Staging queue subsystem**: Queueing and dequeueing requests from the staging
|
||||
queues before being transferred to the global array of requests and tickets.
|
||||
These queues are used to optimize and control insertion of these objects into
|
||||
the global array.
|
||||
|
||||
- **Adding to a queue**: A user communication task running a task-aware
|
||||
TAMPI operation is pushing the corresponding MPI requests and the related
|
||||
ticket into a staging queue.
|
||||
|
||||
- **Transfering from queues to the global array**: The polling task is
|
||||
transferring the staged requests and tickets from the queues to the global
|
||||
array.
|
||||
|
||||
- **Global array subsystem**: Managing the per-process global array of tickets
|
||||
and MPI requests related to TAMPI operations.
|
||||
|
||||
- **Checking pending requests**: Testing all pending MPI requests from the
|
||||
global array, processing the completed requests, and reorganizing the
|
||||
array to keep it compacted.
|
||||
|
||||
- **Request subsystem**: Management and testing of pending MPI requests, and
|
||||
processing the completed ones. This state considers only the management of MPI
|
||||
requests concerning task-aware operations, which are exclusively tested by the
|
||||
TAMPI library. Any testing function call made by the user application or other
|
||||
libraries is not considered.
|
||||
|
||||
- **Testing a request with MPI_Test**: Testing a single MPI request by
|
||||
calling MPI_Test inside the TAMPI library.
|
||||
|
||||
- **Testing requests with MPI_Testall**: Testing multiple MPI requests by
|
||||
calling MPI_Testall inside the TAMPI library.
|
||||
|
||||
- **Testing requests with MPI_Testsome**: Testing multiple MPI requests by
|
||||
calling MPI_Testsome inside the TAMPI library.
|
||||
|
||||
- **Processing a completed request**: Processing a completed MPI request by
|
||||
decreasing the number of pending requests of the linked ticket. If the
|
||||
ticket does not have any other request to wait, the ticket is completed
|
||||
and the *waiting* task is notified. In such a case, a call to the tasking
|
||||
runtime system will occur. If the operation was [blocking][tampi blk], the
|
||||
*waiting* task will be unblocked and will eventually resume the execution.
|
||||
If the operation was [non-blocking][tampi nonblk], the library will
|
||||
decrease the external events of the *waiting* task.
|
||||
|
||||
The figure below shows an example of the subsystem view. The program executes a
|
||||
distributed stencil algorithm with MPI and OmpSs-2. There are several MPI
|
||||
processes and each process has OmpSs-2 tasks running exlusively on multiple CPU
|
||||
resources.
|
||||
|
||||

|
||||
|
||||
The view show there are several user tasks running task-aware communication
|
||||
operations. The light blue areas show when a user task is testing a request that
|
||||
was generated by a non-blocking MPI communication function. There is also one
|
||||
polling task per process. The yellow areas show when the polling tasks are
|
||||
calling MPI_Testsome. Just after the testsome call, the violet areas show the
|
||||
moment when the polling task is processing the completed requests.
|
||||
|
||||
This view shows that most of the time inside the TAMPI library is spent testing
|
||||
requests. This could give us a clue that the underlying MPI library may have
|
||||
concurrency issues (e.g., thread contention) when multiple threads try to test
|
||||
requests in parallel.
|
61
doc/user/emulation/versions.md
Normal file
@ -0,0 +1,61 @@
|
||||
# Model versions
|
||||
|
||||
Track changes in emulator model versions.
|
||||
|
||||
!!! Note
|
||||
These versions cover the [events defined](events.md) in the emulator models.
|
||||
They are **not related to the versions of the libraries**.
|
||||
|
||||
## Nanos6
|
||||
|
||||
- nanos6 1.1.0:
|
||||
- Deprecate running nested tasks (`6Tx`) without pausing the parent task
|
||||
first (`6Tp`). For compatibility, the old behavior is still supported.
|
||||
- nanos6 1.0.0: Initial version
|
||||
|
||||
## Nodes
|
||||
|
||||
- nodes 1.0.0: Initial version
|
||||
|
||||
## Kernel
|
||||
|
||||
- kernel 1.0.0: Initial version
|
||||
|
||||
## MPI
|
||||
|
||||
- mpi 1.0.0: Initial version
|
||||
|
||||
## Ovni
|
||||
|
||||
- ovni 1.1.0
|
||||
- Add support for mark events `OM[`, `OM]` and `OM=`
|
||||
- ovni 1.0.0: Initial version
|
||||
|
||||
## OpenMP
|
||||
|
||||
- openmp 1.2.0:
|
||||
- Add support for labels and task ID views
|
||||
- openmp 1.1.0: Initial version
|
||||
|
||||
## TAMPI
|
||||
|
||||
- tampi 1.0.0: Initial version
|
||||
|
||||
## nOS-V
|
||||
|
||||
- nosv 2.4.0
|
||||
- Add support for `nosv_cond_wait`, `nosv_cond_signal` and `nosv_cond_broadcast` events VA{oOgGkK}.
|
||||
- nosv 2.3.0
|
||||
- Add `nosv.can_breakdown` attribute to metadata for breakdown checks.
|
||||
- nosv 2.2.0
|
||||
- Add support for progress events `VP{pra}`.
|
||||
- nosv 2.1.0
|
||||
- Add support for `nosv_mutex_lock`, `nosv_mutex_trylock` and `nosv_mutex_unlock` events `VA{lLtTuU}`.
|
||||
- Add support for `nosv_barrier_wait` event `VA{bB}`.
|
||||
- nosv 2.0.0
|
||||
- Add support for parallel tasks, adding a new `bodyid` argument in `VT*` events.
|
||||
- Remove support for old attach events `VH{aA}`.
|
||||
- nosv 1.1.0
|
||||
- Ignore old attach events `VH{aA}`.
|
||||
- Add new API attach `VA{aA}` and detach `VA{eE}` events.
|
||||
- nosv 1.0.0: Initial version.
|
@ -24,9 +24,11 @@ If you are using SLURM, you may want to use something like:
|
||||
you must invoke srun twice.
|
||||
|
||||
By default, it will generate the `ovni/clock-offsets.txt` file, with the
|
||||
relative offsets to the rank 0 of MPI. The emulator will automatically pick the
|
||||
offsets when processing the trace. Use the ovnisync `-o` option to select a
|
||||
different output path (see the `-c` option in ovniemu to load the file).
|
||||
relative offsets to the rank 0 of MPI. If the `OVNI_TRACEDIR` environment
|
||||
variable is defined, the default file is `$OVNI_TRACEDIR/clock-offsets.txt`.
|
||||
The emulator will automatically pick the offsets when processing the trace.
|
||||
Use the ovnisync `-o` option to select a different output path (see the `-c`
|
||||
option in ovniemu to load the file).
|
||||
|
||||
Here is an example table with three nodes, all units are in nanoseconds. The
|
||||
standard deviation is less than 1 us:
|
||||
|
56
doc/user/runtime/env.md
Normal file
@ -0,0 +1,56 @@
|
||||
# Environment variables
|
||||
|
||||
Some environment variables can be used to adjust settings during the execution
|
||||
of libovni, they all begin with the `OVNI_` prefix. Be sure that all threads of
|
||||
the same node use the same environment variables.
|
||||
|
||||
## OVNI_TMPDIR
|
||||
|
||||
During the execution of your program, a per-thread buffer is kept where the new
|
||||
events are being recorded. When this buffer is full, it is written to disk and
|
||||
emptied, an operation known as flush. This may take a while depending on the
|
||||
underlying filesystem.
|
||||
|
||||
Keep in mind that the thread will be blocked until the flush ends, so if your
|
||||
filesystem is slow it would interrupt the execution of your program for a long
|
||||
time. It is advisable to use the fastest filesystem available (see the tmpfs(5)
|
||||
and df(1) manual pages).
|
||||
|
||||
You can select a temporary trace directory where the buffers will be flushed
|
||||
during the execution by setting the environment variable `OVNI_TMPDIR`. The last
|
||||
directory will be created if doesn't exist. In that case, as soon as a process
|
||||
calls `ovni_proc_fini()`, the traces of all its threads will be moved to the
|
||||
final directory at `$PWD/ovni`. Example:
|
||||
|
||||
OVNI_TMPDIR=$(mktemp -u /dev/shm/ovni.XXXXXX) srun ./your-app
|
||||
|
||||
To test the different filesystem speeds, you can use hyperfine and dd. Take a
|
||||
closer look at the max time:
|
||||
|
||||
```
|
||||
$ hyperfine 'dd if=/dev/zero of=/gpfs/projects/bsc15/bsc15557/kk bs=2M count=10'
|
||||
Benchmark 1: dd if=/dev/zero of=/gpfs/projects/bsc15/bsc15557/kk bs=2M count=10
|
||||
Time (mean ± σ): 71.7 ms ± 130.4 ms [User: 0.8 ms, System: 10.2 ms]
|
||||
Range (min … max): 14.7 ms … 1113.2 ms 162 runs
|
||||
|
||||
Warning: Statistical outliers were detected. Consider re-running this
|
||||
benchmark on a quiet PC without any interferences from other programs. It
|
||||
might help to use the '--warmup' or '--prepare' options.
|
||||
|
||||
$ hyperfine 'dd if=/dev/zero of=/tmp/kk bs=2M count=10'
|
||||
Benchmark 1: dd if=/dev/zero of=/tmp/kk bs=2M count=10
|
||||
Time (mean ± σ): 56.2 ms ± 5.7 ms [User: 0.6 ms, System: 14.8 ms]
|
||||
Range (min … max): 45.8 ms … 77.8 ms 63 runs
|
||||
|
||||
$ hyperfine 'dd if=/dev/zero of=/dev/shm/kk bs=2M count=10'
|
||||
Benchmark 1: dd if=/dev/zero of=/dev/shm/kk bs=2M count=10
|
||||
Time (mean ± σ): 11.4 ms ± 0.4 ms [User: 0.5 ms, System: 11.1 ms]
|
||||
Range (min … max): 9.7 ms … 12.5 ms 269 runs
|
||||
```
|
||||
|
||||
## OVNI_TRACEDIR
|
||||
|
||||
By default, the runtime trace will be placed in the `ovni` directory, inside the
|
||||
working directory. You can specify a different location to place the trace by
|
||||
setting the `OVNI_TRACEDIR` environment variable. It accepts a relative or
|
||||
absolute path, which will be created if it doesn't exist.
|
BIN
doc/user/runtime/fig/mark.png
Normal file
After Width: | Height: | Size: 6.6 KiB |
123
doc/user/runtime/index.md
Normal file
@ -0,0 +1,123 @@
|
||||
# Introduction
|
||||
|
||||
To use *libovni* to instrument a program follow the next instructions
|
||||
carefully or you may end up with an incomplete trace that is rejected at
|
||||
emulation.
|
||||
|
||||
You can also generate a valid trace from your own software or hardware
|
||||
directly following the [trace specification](trace_spec.md).
|
||||
|
||||
## Initialization
|
||||
|
||||
To initialize libovni follow these steps in all threads:
|
||||
|
||||
1. **Check the version**. Call `ovni_version_check()` once before calling any
|
||||
ovni function. It can be called multiple times from any thread, but only one
|
||||
is required.
|
||||
|
||||
2. **Init the process**. Call `ovni_proc_init()` to initialize the process. It
|
||||
can only be called **once per process** and it must be called before the
|
||||
thread is initialized.
|
||||
|
||||
3. **Init the thread**. Call `ovni_thread_init()` to initialize the thread.
|
||||
Multiple attempts to initialize the same thread are ignored with a warning.
|
||||
Must be called by all threads.
|
||||
|
||||
The `ovni_proc_init()` arguments are as follows:
|
||||
|
||||
```c
|
||||
void ovni_proc_init(int app, const char *loom, int pid);
|
||||
```
|
||||
|
||||
The `app` defines the "appid" of the program, which must be a number >0. This is
|
||||
useful to run multiple processes some of which run the same "app", so you can
|
||||
tell which one is which. The `loom` argument defines the
|
||||
[loom](../concepts/part-model.md#loom) name and maps the process to that
|
||||
loom. It must be composed of the host name, a dot and a suffix. The PID is the
|
||||
one obtained by `getpid(2)`.
|
||||
|
||||
The `ovni_thread_init()` function only accepts one argument, the TID as returned
|
||||
by `gettid(2)`.
|
||||
|
||||
## Setup metadata
|
||||
|
||||
Once the process and thread are initialized, you can begin adding metadata to
|
||||
the thread stream.
|
||||
|
||||
1. **Require models**. Call `ovni_thread_require()` with the required model
|
||||
version before emitting events for a given model. Only required once from a
|
||||
thread in a given trace. The `ovni` model is implicitly required when calling
|
||||
`ovni_thread_init()`, so there is no need to add it again.
|
||||
|
||||
2. **Emit loom CPUs**. Call `ovni_add_cpu()` to register each CPU in the loom. It can
|
||||
be done from a single thread or multiple threads, in the latter the list of
|
||||
CPUs is merged.
|
||||
|
||||
3. **Set the rank**. If you use MPI, call `ovni_proc_set_rank()` to register the
|
||||
rank and number of ranks of the current execution. Only once per process.
|
||||
|
||||
When emitting the CPUs with:
|
||||
|
||||
```c
|
||||
void ovni_add_cpu(int index, int phyid);
|
||||
```
|
||||
|
||||
The `index` will be used to identify the CPU in the loom and goes from 0 to N -
|
||||
1, where N is the number of CPUs in the loom. It must match the index that is
|
||||
used in affinity events when a thread switches to another CPU. The `phyid` is
|
||||
only displayed in Paraver and is usually the same as the index, but it can be
|
||||
different if there are multiple looms per node.
|
||||
|
||||
## Start the execution
|
||||
|
||||
The current thread must switch to the "Running" state before any event can be
|
||||
processed by the emulator. Do so by emitting a [`OHx`
|
||||
event](../emulation/events.md#OHx) in the stream with the appropriate payload:
|
||||
|
||||
```c
|
||||
static void thread_execute(int32_t cpu, int32_t ctid, uint64_t tag)
|
||||
{
|
||||
struct ovni_ev ev = {0};
|
||||
ovni_ev_set_clock(&ev, ovni_clock_now());
|
||||
ovni_ev_set_mcv(&ev, "OHx");
|
||||
ovni_payload_add(&ev, (uint8_t *) &cpu, sizeof(cpu));
|
||||
ovni_payload_add(&ev, (uint8_t *) &ctid, sizeof(ctid));
|
||||
ovni_payload_add(&ev, (uint8_t *) &tag, sizeof(tag));
|
||||
ovni_ev_emit(&ev);
|
||||
}
|
||||
```
|
||||
|
||||
The `cpu` is the logical index (not the physical ID) of the loom CPU at which
|
||||
this thread will begin the execution. Use -1 if it is not known. The `ctid` and
|
||||
`tag` allow you to track the exact point at which a given thread was created and
|
||||
by which thread but they are not relevant for the first thread, so they can be
|
||||
set to -1.
|
||||
|
||||
## Emit events
|
||||
|
||||
After this point you can emit any other event from this thread. Use the
|
||||
`ovni_ev_*` set of functions to create and emit events. Notice that all events
|
||||
refer to the current thread that emits them.
|
||||
|
||||
If you need to store metadata information, use the `ovni_attr_*` set of
|
||||
functions. The metadata is stored in disk by `ovni_attr_flush()` and when the
|
||||
thread is freed by `ovni_thread_free()`.
|
||||
|
||||
Attempting to emit events or writing metadata without having a thread
|
||||
initialized will cause your program to abort.
|
||||
|
||||
## Finishing the execution
|
||||
|
||||
To finalize the execution **every thread** must perform the following steps,
|
||||
otherwise the trace **will be rejected**.
|
||||
|
||||
1. **End the current thread**. Emit a [`OHe` event](../emulation/events.md#OHe) to inform the current thread ends.
|
||||
2. **Flush the buffer**. Call `ovni_flush()` to be sure all events are written
|
||||
to disk.
|
||||
3. **Free the thread**. Call `ovni_thread_free()` to complete the stream and
|
||||
free the memory used by the buffer.
|
||||
4. **Finish the process**. If this is the last thread, call `ovni_proc_fini()`
|
||||
to set the process state to finished.
|
||||
|
||||
If a thread fails to perform these steps, the complete trace will be rejected by
|
||||
the emulator as it cannot guarantee it to be consistent.
|
218
doc/user/runtime/mark.md
Normal file
@ -0,0 +1,218 @@
|
||||
# Mark events
|
||||
|
||||
The mark API allows you to add arbitrary events in a trace to mark regions of
|
||||
interest while debugging or developing a new program or library. The events are
|
||||
processed by the emulator to generate a timeline.
|
||||
|
||||
## Usage in runtime
|
||||
|
||||
Follow these steps to correctly use the API. Most problems will be detected in
|
||||
emulation and cause a panic if you are not careful.
|
||||
|
||||
### Create a mark type
|
||||
|
||||
You can create up to 100 types of marks, each will be shown in its own Paraver
|
||||
timeline. To create a new type, use the following call:
|
||||
|
||||
```c
|
||||
void ovni_mark_type(int32_t type, long flags, const char *title);
|
||||
```
|
||||
|
||||
The numeric value `type` must be a number between 0 and 99 (both included). The
|
||||
`title` will be used to give a name to the Paraver timeline.
|
||||
|
||||
The default with flags set to zero, is to create a channel that can hold a
|
||||
single value only (see [channels](../../dev/channels.md)). To use a stack of
|
||||
values add the `OVNI_MARK_STACK` value to the flags.
|
||||
|
||||
Only one thread among all nodes needs to define a type to be available globally,
|
||||
but the same type can be defined from multiple threads, as long as the same
|
||||
flags and title argument are used. The idea is to avoid having to check if the
|
||||
type was already defined or not.
|
||||
|
||||
### Define labels (optional)
|
||||
|
||||
The values that are written to the channel can have labels to display in the
|
||||
Paraver timeline. The labels are optional, if not given the numeric value will
|
||||
be shown in Paraver.
|
||||
|
||||
Use the following call to register a label for a value in a given type.
|
||||
|
||||
```c
|
||||
void ovni_mark_label(int32_t type, int64_t value, const char *label);
|
||||
```
|
||||
|
||||
A value can only have at most a single label associated. Multiple threads can
|
||||
call the `ovni_mark_label()` with the same type and value as long as they use
|
||||
the same label. New labels for the same type can be associated from different
|
||||
threads, as long as the values are different.
|
||||
|
||||
All value and label pairs are combined from all threads and will be available in
|
||||
the Paraver view for each type.
|
||||
|
||||
### Emit events
|
||||
|
||||
All mark channels begin with the default value *null*, which is not shown in
|
||||
Paraver and will be displayed as the usual empty space. The value of the channel
|
||||
can be changed over time with the following functions.
|
||||
|
||||
!!! warning
|
||||
|
||||
The value 0 is forbidden, as it is used by Paraver to represent the
|
||||
"empty" state.
|
||||
|
||||
If you have used a single channel (without `OVNI_MARK_STACK`), then you must use
|
||||
the following call to emit events at runtime:
|
||||
|
||||
```c
|
||||
void ovni_mark_set(int32_t type, int64_t value);
|
||||
```
|
||||
|
||||
It will update the value of the channel to the given `value`.
|
||||
|
||||
If you have used a stack channel (with `OVNI_MARK_STACK`), then you must use the
|
||||
push/pop set of calls:
|
||||
|
||||
```c
|
||||
void ovni_mark_push(int32_t type, int64_t value);
|
||||
void ovni_mark_pop(int32_t type, int64_t value);
|
||||
```
|
||||
|
||||
The value in the pop call must match the previous pushed value.
|
||||
|
||||
<details>
|
||||
<summary>Example OmpSs-2 program</summary>
|
||||
<br>
|
||||
<div style="padding-left: 1em; border-left: 3px solid #ddd">
|
||||
<p>
|
||||
Here is a dummy program showing how to use the mark API with an OmpSs-2 program.
|
||||
Notice that there is no initialization of the current thread or process, as it
|
||||
already occurs inside the OmpSs-2 runtime before reaching the main.
|
||||
|
||||
```c
|
||||
/* Build with:
|
||||
* $ clang -fompss-2 -lovni dummy.c -o dummy
|
||||
* Enable instrumentation in nanos6:
|
||||
* $ echo 'version.instrument = "ovni"' > nanos6.toml
|
||||
* Run:
|
||||
* $ ./dummy
|
||||
* Emulate:
|
||||
* $ ovniemu ovni
|
||||
* View timeline:
|
||||
* $ wxparaver ovni/cpu.prv ovni/cfg/cpu/ovni/mark.cfg
|
||||
*/
|
||||
#include <ovni.h>
|
||||
#include <unistd.h>
|
||||
|
||||
enum { INDEX = 0, RUN = 1 };
|
||||
|
||||
static void process(int run, int i)
|
||||
{
|
||||
ovni_mark_push(RUN, run + 1);
|
||||
ovni_mark_push(INDEX, i + 1);
|
||||
usleep(10000); // Dummy operation for 10 ms
|
||||
ovni_mark_pop(INDEX, i + 1);
|
||||
ovni_mark_pop(RUN, run + 1);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
ovni_mark_type(INDEX, OVNI_MARK_STACK, "Index");
|
||||
ovni_mark_type(RUN, OVNI_MARK_STACK, "Run");
|
||||
|
||||
for (int run = 0; run < 10; run++) {
|
||||
for (int i = 0; i < 50; i++) {
|
||||
#pragma oss task
|
||||
process(run, i);
|
||||
}
|
||||
}
|
||||
|
||||
#pragma oss taskwait
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Images don't seem to work via markdown -->
|
||||
<p>Here is the resulting timeline loaded in Paraver with the gradient color
|
||||
configuration, showing the first mark type (the index):
|
||||
<img style="margin-top: 1em" alt="" src="../fig/mark.png"></p>
|
||||
|
||||
</div>
|
||||
</details>
|
||||
<p></p>
|
||||
|
||||
## Usage in Paraver
|
||||
|
||||
Each thread holds a channel for each mark type that you have defined. The
|
||||
information of the mark channels is propagated to the Paraver timeline in
|
||||
Thread and CPU views.
|
||||
|
||||
When a thread is not *running*, the value of the mark channels is not shown in
|
||||
Paraver. In the case of the CPU timeline, only the values of the running thread are
|
||||
shown. If there are no running threads, nothing is shown.
|
||||
|
||||
Follow the next steps to create a configuration to suit your needs. You only
|
||||
need to do it once, then you can save the configuration file and reuse it for
|
||||
future traces.
|
||||
|
||||
### Filtering the type
|
||||
|
||||
To see a mark type, you will have to create a Paraver configuration that matches
|
||||
the type that you have created. The mark `type` value gets converted into a PRV
|
||||
type by adding 100 (as values from 0 to 99 are reserved).
|
||||
|
||||
You can use the `cpu/ovni/mark.cfg` and `thread/ovni/mark.cfg` configurations as
|
||||
a starting point to create your own.
|
||||
|
||||
Go to "Window Properties" (the second button under "Files & Window Properties")
|
||||
and then go to Filter > Events > Event type. Set Function to `=` and click the
|
||||
Types value to display the `[...]` button, which will allow you to choose which
|
||||
type to display.
|
||||
|
||||
In the "Events Selection" window, ensure that only one type is selected, and the
|
||||
"Values" panel shows Function "All", to see all values for the selected type.
|
||||
|
||||
### Setting the title
|
||||
|
||||
In the "Window Properties" adjust the Name so it reflects what you are seeing.
|
||||
This will be shown in the saved images, so it is good to use a proper
|
||||
description.
|
||||
|
||||
### Configure the display method
|
||||
|
||||
By default, the timeline will display the values as "Code color". To switch to a
|
||||
gradient or other methods, left-click in the timeline and go to "Paint As" and
|
||||
select "Gradient" (or others).
|
||||
|
||||
You may also want to adjust the "Drawmode" which determines what happens when
|
||||
there are multiple values under a given pixel. This is specially important when
|
||||
you are viewing the trace with a large time range, before zooming into a given
|
||||
region.
|
||||
|
||||
By default, the "Random not zero" mode is selected, which will select a
|
||||
random value from the ones under each pixel, disregarding the occurrences of each
|
||||
value. This mode will give importance to rare values, so it is usually a safe
|
||||
starting point. The "Last" mode will show the last value in that pixel, which is
|
||||
more or less fair, but will often hide rare values.
|
||||
|
||||
To change in both horizontal (Time) and in vertical (Objects) directions, go to:
|
||||
left click on timeline > Drawmode > Both > Last.
|
||||
|
||||
### Ensure the range is good
|
||||
|
||||
Paraver will only display values in the timeline that are in the Semantic
|
||||
range. If you see a red triangle in the lower left corner then there are values
|
||||
outside the range that are not being displayed. You can click on this button to
|
||||
expand the range to cover all values in the current view.
|
||||
|
||||
The opposite may also happen, where the range is too big for the current values.
|
||||
You can also click on the same spot (even if the triangle is not shown) to
|
||||
shrink the range to cover the values in the view, or go to the Window Properties
|
||||
and modify the "Semantic Minimum" and "Semantic Maximum" values manually.
|
||||
|
||||
### Save the configuration
|
||||
|
||||
Once you finish configuring the timeline, save the configuration by
|
||||
left-clicking the view and then "Save > Configuration...". You can use this
|
||||
configuration in future traces to avoid doing these steps again.
|