From 7c6beb091aa6ead5446759d01e2b3b7e26428e01 Mon Sep 17 00:00:00 2001 From: Rodrigo Arias Date: Thu, 25 Aug 2022 18:56:55 +0200 Subject: [PATCH] Add nanos6 rt tests and organize into folders --- test/CMakeLists.txt | 26 +- test/manual/CMakeLists.txt | 19 ++ test/{ => manual}/instr.h | 6 +- test/manual/nanos6/CMakeLists.txt | 24 ++ test/{ => manual/nanos6}/instr_nanos6.h | 8 +- test/{ => manual/nanos6}/nanos6-blocking.c | 2 +- .../nanos6}/nanos6-nested-tasks-bad.c | 2 +- .../{ => manual/nanos6}/nanos6-nested-tasks.c | 2 +- test/{ => manual/nanos6}/nanos6-ss-mismatch.c | 4 +- test/{ => manual/nanos6}/nanos6-subsystems.c | 0 test/{ => manual/nanos6}/nanos6-task-types.c | 0 test/manual/nosv/CMakeLists.txt | 21 ++ test/{ => manual/nosv}/instr_nosv.h | 8 +- .../{ => manual/nosv}/nosv-nested-tasks-bad.c | 0 test/{ => manual/nosv}/nosv-nested-tasks.c | 0 test/{ => manual/nosv}/nosv-pause.c | 0 test/{ => manual/nosv}/nosv-task-types.c | 0 test/manual/ovni/CMakeLists.txt | 24 ++ test/{ => manual/ovni}/flush-overhead.c | 0 test/{ => manual/ovni}/flush.c | 0 test/manual/ovni/instr_ovni.h | 23 ++ test/{ => manual/ovni}/mp-rank.c | 9 - test/{ => manual/ovni}/mp-simple.c | 9 - test/rt/CMakeLists.txt | 4 +- test/rt/nanos6/CMakeLists.txt | 10 + test/rt/nanos6/nanos6.toml | 231 ++++++++++++++++++ test/rt/nanos6/nested-task.c | 11 + test/rt/nanos6/simple-task.c | 7 + test/rt/{ => nosv}/nosv.toml | 0 29 files changed, 390 insertions(+), 60 deletions(-) create mode 100644 test/manual/CMakeLists.txt rename test/{ => manual}/instr.h (97%) create mode 100644 test/manual/nanos6/CMakeLists.txt rename test/{ => manual/nanos6}/instr_nanos6.h (96%) rename test/{ => manual/nanos6}/nanos6-blocking.c (97%) rename test/{ => manual/nanos6}/nanos6-nested-tasks-bad.c (97%) rename test/{ => manual/nanos6}/nanos6-nested-tasks.c (97%) rename test/{ => manual/nanos6}/nanos6-ss-mismatch.c (88%) rename test/{ => manual/nanos6}/nanos6-subsystems.c (100%) rename test/{ => manual/nanos6}/nanos6-task-types.c (100%) create mode 100644 test/manual/nosv/CMakeLists.txt rename test/{ => manual/nosv}/instr_nosv.h (92%) rename test/{ => manual/nosv}/nosv-nested-tasks-bad.c (100%) rename test/{ => manual/nosv}/nosv-nested-tasks.c (100%) rename test/{ => manual/nosv}/nosv-pause.c (100%) rename test/{ => manual/nosv}/nosv-task-types.c (100%) create mode 100644 test/manual/ovni/CMakeLists.txt rename test/{ => manual/ovni}/flush-overhead.c (100%) rename test/{ => manual/ovni}/flush.c (100%) create mode 100644 test/manual/ovni/instr_ovni.h rename test/{ => manual/ovni}/mp-rank.c (96%) rename test/{ => manual/ovni}/mp-simple.c (94%) create mode 100644 test/rt/nanos6/CMakeLists.txt create mode 100644 test/rt/nanos6/nanos6.toml create mode 100644 test/rt/nanos6/nested-task.c create mode 100644 test/rt/nanos6/simple-task.c rename test/rt/{ => nosv}/nosv.toml (100%) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e24cd0b..457b227 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -19,30 +19,8 @@ set(OVNI_TEST_BUILD_DIR "${CMAKE_BINARY_DIR}/test") include(macros.cmake) -# Only run performance sensitive tests on Release builds -if(CMAKE_BUILD_TYPE STREQUAL "Release") - ovni_test(NAME flush-overhead) -endif() +add_subdirectory(manual) -ovni_test(NAME flush) -ovni_test(NAME mp-simple MP) -ovni_test(NAME mp-rank MP) - -ovni_test(NAME nosv-nested-tasks) -ovni_test(NAME nosv-nested-tasks-bad SHOULD_FAIL - REGEX "fatal: cannot execute task 1: state is not created") -ovni_test(NAME nosv-task-types MP) -ovni_test(NAME nosv-pause MP) - -ovni_test(NAME nanos6-nested-tasks) -ovni_test(NAME nanos6-nested-tasks-bad SHOULD_FAIL - REGEX "fatal: cannot execute task 1: state is not created") -ovni_test(NAME nanos6-task-types MP) -ovni_test(NAME nanos6-blocking MP) -ovni_test(NAME nanos6-subsystems MP) -ovni_test(NAME nanos6-ss-mismatch MP SHOULD_FAIL - REGEX "fatal: thread 0 has left 1 state(s) in the subsystem channel, top state=2") - -if(BUILD_RT_TESTING) +if(ENABLE_TEST_RT) add_subdirectory(rt) endif() diff --git a/test/manual/CMakeLists.txt b/test/manual/CMakeLists.txt new file mode 100644 index 0000000..e6930bb --- /dev/null +++ b/test/manual/CMakeLists.txt @@ -0,0 +1,19 @@ +# +# Copyright (c) 2022 Barcelona Supercomputing Center (BSC) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +add_subdirectory(ovni) +add_subdirectory(nosv) +add_subdirectory(nanos6) diff --git a/test/instr.h b/test/manual/instr.h similarity index 97% rename from test/instr.h rename to test/manual/instr.h index c0b34f6..6bf1d2a 100644 --- a/test/instr.h +++ b/test/manual/instr.h @@ -15,8 +15,8 @@ * along with this program. If not, see . */ -#ifndef OVNI_TEST_INSTR_H -#define OVNI_TEST_INSTR_H +#ifndef INSTR_H +#define INSTR_H #define _GNU_SOURCE /* For gethostname() */ @@ -123,4 +123,4 @@ instr_end(void) ovni_proc_fini(); } -#endif /* OVNI_TEST_INSTR_H */ +#endif /* INSTR_H */ diff --git a/test/manual/nanos6/CMakeLists.txt b/test/manual/nanos6/CMakeLists.txt new file mode 100644 index 0000000..9870642 --- /dev/null +++ b/test/manual/nanos6/CMakeLists.txt @@ -0,0 +1,24 @@ +# +# Copyright (c) 2022 Barcelona Supercomputing Center (BSC) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +ovni_test(NAME nanos6-nested-tasks) +ovni_test(NAME nanos6-nested-tasks-bad SHOULD_FAIL + REGEX "fatal: cannot execute task 1: state is not created") +ovni_test(NAME nanos6-task-types MP) +ovni_test(NAME nanos6-blocking MP) +ovni_test(NAME nanos6-subsystems MP) +ovni_test(NAME nanos6-ss-mismatch SHOULD_FAIL + REGEX "thread [0-9]\\+ ended with 1 extra stacked nanos6 subsystems, top=ST_NANOS6_SCHED_HUNGRY") diff --git a/test/instr_nanos6.h b/test/manual/nanos6/instr_nanos6.h similarity index 96% rename from test/instr_nanos6.h rename to test/manual/nanos6/instr_nanos6.h index 231509e..28f5863 100644 --- a/test/instr_nanos6.h +++ b/test/manual/nanos6/instr_nanos6.h @@ -15,10 +15,10 @@ * along with this program. If not, see . */ -#ifndef OVNI_TEST_INSTR_NANOS6_H -#define OVNI_TEST_INSTR_NANOS6_H +#ifndef INSTR_NANOS6_H +#define INSTR_NANOS6_H -#include "test/instr.h" +#include "../instr.h" #include "compat.h" static inline void @@ -114,4 +114,4 @@ INSTR_0ARG(instr_nanos6_exit_create_task, "6TC") INSTR_0ARG(instr_nanos6_spawn_function_enter, "6Hs") INSTR_0ARG(instr_nanos6_spawn_function_exit, "6HS") -#endif /* OVNI_TEST_INSTR_NANOS6_H */ +#endif /* INSTR_NANOS6_H */ diff --git a/test/nanos6-blocking.c b/test/manual/nanos6/nanos6-blocking.c similarity index 97% rename from test/nanos6-blocking.c rename to test/manual/nanos6/nanos6-blocking.c index 5ca229b..d5dd5ba 100644 --- a/test/nanos6-blocking.c +++ b/test/manual/nanos6/nanos6-blocking.c @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -#include "test/instr_nanos6.h" +#include "instr_nanos6.h" int main(void) diff --git a/test/nanos6-nested-tasks-bad.c b/test/manual/nanos6/nanos6-nested-tasks-bad.c similarity index 97% rename from test/nanos6-nested-tasks-bad.c rename to test/manual/nanos6/nanos6-nested-tasks-bad.c index 6d814c6..b5d8cc4 100644 --- a/test/nanos6-nested-tasks-bad.c +++ b/test/manual/nanos6/nanos6-nested-tasks-bad.c @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -#include "test/instr_nanos6.h" +#include "instr_nanos6.h" int main(void) diff --git a/test/nanos6-nested-tasks.c b/test/manual/nanos6/nanos6-nested-tasks.c similarity index 97% rename from test/nanos6-nested-tasks.c rename to test/manual/nanos6/nanos6-nested-tasks.c index 9b5d13a..7b49a3b 100644 --- a/test/nanos6-nested-tasks.c +++ b/test/manual/nanos6/nanos6-nested-tasks.c @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -#include "test/instr_nanos6.h" +#include "instr_nanos6.h" int main(void) diff --git a/test/nanos6-ss-mismatch.c b/test/manual/nanos6/nanos6-ss-mismatch.c similarity index 88% rename from test/nanos6-ss-mismatch.c rename to test/manual/nanos6/nanos6-ss-mismatch.c index d10678f..92008fa 100644 --- a/test/nanos6-ss-mismatch.c +++ b/test/manual/nanos6/nanos6-ss-mismatch.c @@ -20,9 +20,7 @@ int main(void) { - int rank = atoi(getenv("OVNI_RANK")); - int nranks = atoi(getenv("OVNI_NRANKS")); - instr_start(rank, nranks); + instr_start(0, 1); instr_nanos6_sched_hungry(); /* The thread is left in the hungry state (should fail) */ diff --git a/test/nanos6-subsystems.c b/test/manual/nanos6/nanos6-subsystems.c similarity index 100% rename from test/nanos6-subsystems.c rename to test/manual/nanos6/nanos6-subsystems.c diff --git a/test/nanos6-task-types.c b/test/manual/nanos6/nanos6-task-types.c similarity index 100% rename from test/nanos6-task-types.c rename to test/manual/nanos6/nanos6-task-types.c diff --git a/test/manual/nosv/CMakeLists.txt b/test/manual/nosv/CMakeLists.txt new file mode 100644 index 0000000..abbf47d --- /dev/null +++ b/test/manual/nosv/CMakeLists.txt @@ -0,0 +1,21 @@ +# +# Copyright (c) 2022 Barcelona Supercomputing Center (BSC) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +ovni_test(NAME nosv-nested-tasks) +ovni_test(NAME nosv-nested-tasks-bad SHOULD_FAIL + REGEX "fatal: cannot execute task 1: state is not created") +ovni_test(NAME nosv-task-types MP) +ovni_test(NAME nosv-pause MP) diff --git a/test/instr_nosv.h b/test/manual/nosv/instr_nosv.h similarity index 92% rename from test/instr_nosv.h rename to test/manual/nosv/instr_nosv.h index 10fe994..c2dbb3c 100644 --- a/test/instr_nosv.h +++ b/test/manual/nosv/instr_nosv.h @@ -15,10 +15,10 @@ * along with this program. If not, see . */ -#ifndef OVNI_TEST_INSTR_NOSV_H -#define OVNI_TEST_INSTR_NOSV_H +#ifndef INSTR_NOSV_H +#define INSTR_NOSV_H -#include "test/instr.h" +#include "../instr.h" #include "compat.h" static inline void @@ -49,4 +49,4 @@ INSTR_1ARG(instr_nosv_task_resume, "VTr", int32_t, id) INSTR_1ARG(instr_nosv_task_end, "VTe", int32_t, id) -#endif /* OVNI_TEST_INSTR_NOSV_H */ +#endif /* INSTR_NOSV_H */ diff --git a/test/nosv-nested-tasks-bad.c b/test/manual/nosv/nosv-nested-tasks-bad.c similarity index 100% rename from test/nosv-nested-tasks-bad.c rename to test/manual/nosv/nosv-nested-tasks-bad.c diff --git a/test/nosv-nested-tasks.c b/test/manual/nosv/nosv-nested-tasks.c similarity index 100% rename from test/nosv-nested-tasks.c rename to test/manual/nosv/nosv-nested-tasks.c diff --git a/test/nosv-pause.c b/test/manual/nosv/nosv-pause.c similarity index 100% rename from test/nosv-pause.c rename to test/manual/nosv/nosv-pause.c diff --git a/test/nosv-task-types.c b/test/manual/nosv/nosv-task-types.c similarity index 100% rename from test/nosv-task-types.c rename to test/manual/nosv/nosv-task-types.c diff --git a/test/manual/ovni/CMakeLists.txt b/test/manual/ovni/CMakeLists.txt new file mode 100644 index 0000000..c03c5fb --- /dev/null +++ b/test/manual/ovni/CMakeLists.txt @@ -0,0 +1,24 @@ +# +# Copyright (c) 2022 Barcelona Supercomputing Center (BSC) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Only run performance sensitive tests on Release builds +if(CMAKE_BUILD_TYPE STREQUAL "Release") + ovni_test(NAME flush-overhead) +endif() + +ovni_test(NAME flush) +ovni_test(NAME mp-simple MP) +ovni_test(NAME mp-rank MP) diff --git a/test/flush-overhead.c b/test/manual/ovni/flush-overhead.c similarity index 100% rename from test/flush-overhead.c rename to test/manual/ovni/flush-overhead.c diff --git a/test/flush.c b/test/manual/ovni/flush.c similarity index 100% rename from test/flush.c rename to test/manual/ovni/flush.c diff --git a/test/manual/ovni/instr_ovni.h b/test/manual/ovni/instr_ovni.h new file mode 100644 index 0000000..6a8d1cb --- /dev/null +++ b/test/manual/ovni/instr_ovni.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2022 Barcelona Supercomputing Center (BSC) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef INSTR_OVNI_H +#define INSTR_OVNI_H + +#include "../instr.h" + +#endif /* INSTR_OVNI_H */ diff --git a/test/mp-rank.c b/test/manual/ovni/mp-rank.c similarity index 96% rename from test/mp-rank.c rename to test/manual/ovni/mp-rank.c index e065a24..443c45c 100644 --- a/test/mp-rank.c +++ b/test/manual/ovni/mp-rank.c @@ -35,15 +35,6 @@ static void fail(const char *msg) abort(); } -static inline void emit_ev(char *mcv) -{ - struct ovni_ev ev = { 0 }; - - ovni_ev_set_mcv(&ev, mcv); - ovni_ev_set_clock(&ev, ovni_clock_now()); - ovni_ev_emit(&ev); -} - #define INSTR_3ARG(name, mcv, ta, a, tb, b, tc, c) \ static inline void name(ta a, tb b, tc c) \ { \ diff --git a/test/mp-simple.c b/test/manual/ovni/mp-simple.c similarity index 94% rename from test/mp-simple.c rename to test/manual/ovni/mp-simple.c index 9a06a96..ac962e6 100644 --- a/test/mp-simple.c +++ b/test/manual/ovni/mp-simple.c @@ -36,15 +36,6 @@ static void fail(const char *msg) abort(); } -static inline void emit_ev(char *mcv) -{ - struct ovni_ev ev = { 0 }; - - ovni_ev_set_mcv(&ev, mcv); - ovni_ev_set_clock(&ev, ovni_clock_now()); - ovni_ev_emit(&ev); -} - #define INSTR_3ARG(name, mcv, ta, a, tb, b, tc, c) \ static inline void name(ta a, tb b, tc c) \ { \ diff --git a/test/rt/CMakeLists.txt b/test/rt/CMakeLists.txt index 1c610ff..61af077 100644 --- a/test/rt/CMakeLists.txt +++ b/test/rt/CMakeLists.txt @@ -24,7 +24,9 @@ function(nosv_test) PUBLIC ${NOSV_INCLUDE_DIR}) set_property(TEST "${OVNI_TEST_NAME}" APPEND PROPERTY - ENVIRONMENT "NOSV_CONFIG=${OVNI_TEST_SOURCE_DIR}/rt/nosv.toml") + ENVIRONMENT "NOSV_CONFIG=${OVNI_TEST_SOURCE_DIR}/rt/nosv/nosv.toml") endfunction() nosv_test(NAME nosv-attach SOURCE nosv/attach.c) + +add_subdirectory(nanos6) diff --git a/test/rt/nanos6/CMakeLists.txt b/test/rt/nanos6/CMakeLists.txt new file mode 100644 index 0000000..9f4d991 --- /dev/null +++ b/test/rt/nanos6/CMakeLists.txt @@ -0,0 +1,10 @@ +function(nanos6_rt_test) + ovni_test(${ARGN}) + target_compile_options("${OVNI_TEST_NAME}" PUBLIC "-fompss-2") + target_link_options("${OVNI_TEST_NAME}" PUBLIC "-fompss-2") + set_property(TEST "${OVNI_TEST_NAME}" APPEND PROPERTY + ENVIRONMENT "NANOS6_CONFIG=${OVNI_TEST_SOURCE_DIR}/rt/nanos6/nanos6.toml") +endfunction() + +nanos6_rt_test(NAME rt-nanos6-simple-task SOURCE simple-task.c) +nanos6_rt_test(NAME rt-nanos6-nested-task SOURCE nested-task.c) diff --git a/test/rt/nanos6/nanos6.toml b/test/rt/nanos6/nanos6.toml new file mode 100644 index 0000000..8937e0f --- /dev/null +++ b/test/rt/nanos6/nanos6.toml @@ -0,0 +1,231 @@ +# This file is part of Nanos6 and is licensed under the terms contained in the COPYING file +# +# Copyright (C) 2020-2021 Barcelona Supercomputing Center (BSC) + +# The Nanos6 default configuration file. More details about the configuration options and the possible +# values are available on the OmpSs-2 User Guide (https://pm.bsc.es/ftp/ompss-2/doc/user-guide/) or on +# the README.md in the Nanos6 repository (https://github.com/bsc-pm/nanos6) + +[version] + # Choose whether the runtime runs with debug symbols and internal asserts. Enabling this option + # may produce significant overheads, so production or performance executions should disable this + # option. Default is false + debug = false + # Choose the dependency system implementation. Default is "discrete" + # Possible values: "discrete", "regions" + dependencies = "discrete" + # Choose the instrumentation variant to run. Default is "none" + # Possible values: "none", "ctf", "extrae", "graph", "lint", "stats", "verbose" + instrument = "ovni" + +[turbo] + # Choose whether enabling floating-point unit optimizations in all Nanos6 threads. Enabling this + # option can speedup the floating-point computations in user tasks, but may produce imprecise + # results. It enables flush-to-zero (FZ) and denormals are zero (DAZ) optimizations in Intel® + # processors. Default is false + enabled = false + +[scheduler] + # Choose the task scheduling policy. Default is "fifo" + # Possible values: "fifo", "lifo" + policy = "fifo" + # Enable the immediate successor feature to improve cache data reutilization between successor + # tasks. If enabled, when a CPU finishes a task it starts executing the successor task (computed + # through their data dependencies). Default is true + immediate_successor = true + # Indicate whether the scheduler should consider task priorities defined by the user in the + # task's priority clause. Default is true + priority = true + +[cpumanager] + # The underlying policy of the CPU manager for the handling of CPUs. Default is "default", which + # corresponds to "hybrid" + # Possible values: "default", "idle", "busy", "hybrid", "lewi", "greedy" + policy = "default" + # The maximum number of iterations to busy wait for before idling. Default is "240000". Only + # works for the 'hybrid' policy. This number will be divided by the number of active CPUs to + # obtain a "busy_iters per CPU" metric for each individual CPU to busy-wait for + busy_iters = 240000 + +[taskfor] + # Choose the total number of CPU groups that will execute the worksharing tasks (taskfors). Default + # is none (not set), which means that the runtime will create one taskfor group per NUMA node + # groups = 1 + # Indicate whether should print the taskfor groups information + report = false + +[throttle] + # Enable throttle to stop creating tasks when certain conditions are met. Default is false + enabled = false + # Maximum number of child tasks that can be created before throttling. Default is 5000000 + tasks = 5000000 + # Maximum memory pressure (percent of max_memory) before throttling. Default is 70 (%) + pressure = 70 # % + # Maximum memory that can be used by the runtime. Default is "0", which equals half of system memory + max_memory = "0" + # Evaluation interval (us). Each time this amount of time is elapsed, the throttle system queries + # the memory allocator statistics and evaluates the current memory pressure. A higher interval + # results in less accurate pressure estimation, but a lower interval introduces noticeable overhead, + # as reading memory statistics requires a global lock on the allocator to aggregate per-thread + # statistics. Default is 1000 + polling_period_us = 1000 + +[numa] + # Enable NUMA tracking of task data. NUMA tracking consists of annotating the NUMA location + # of data to be later scheduled based on this information. When using "auto" this feature is + # enabled in the first allocation done using the Nanos6 NUMA API. Default is "auto" + # Possible values: "auto", "on", "off" + tracking = "auto" + # Indicate whether should print the NUMA bitmask of each NUMA wildcards + report = false + # Use the page auto-discovery mechanism to detect the system's page size + # Default is true, which is useful in systems with THP enabled + # Set to false will use the default page size, which is arch-dependent + discover_pagesize = true + +[hardware_counters] + # Enable the verbose mode of hardware counters, printing a small summary of metrics at the + # end of the execution. Default is false + verbose = false + # The verbose file's name. Default is "nanos6-output-hwcounters.txt" + verbose_file = "nanos6-output-hwcounters.txt" + [hardware_counters.papi] + # Enable the PAPI backend of the hardware counters module. Default is false + enabled = false + # The list of PAPI counters to read. Default is "PAPI_TOT_INS" and "PAPI_TOT_CYC" + counters = [ + "PAPI_TOT_INS", + "PAPI_TOT_CYC" + ] + [hardware_counters.rapl] + # Enable the RAPL backend of the hardware counters module for runtime-wise energy + # metrics. Default is false + enabled = false + +[monitoring] + # Indicate whether enabling the Monitoring of tasks and CPUs, which allows the usage of + # prediction-based policies. Disabled by default + enabled = false + # Indicate whether enabling the "Wisdom" mechanism of Monitoring, saving normalized metrics for + # future executions and loading previously saved metrics when the runtime initializes. Default + # is false + wisdom = false + # Enable the verbose mode of Monitoring, which prints a detailed summary of task type metrics + # at the end of the execution. Default is true + verbose = true + # The verbose file's name. Default is "output-monitoring.txt" + verbose_file = "output-monitoring.txt" + # The prediction rate at which CPU usage predictions are infered. Default is once every 100µs + cpuusage_prediction_rate = 100 # µs + # The number of samples (window) of the normalized exponential moving average for predictions + # Default is 20 + rolling_window = 20 + +[devices] + +[instrument] + [instrument.ctf] + # Choose the temporary directory where to store intermediate CTF files. Default is none + # (not set), which means that $TMPDIR will be used if present, or /tmp otherwise + # tmpdir = "/tmp" + [instrument.ctf.converter] + # Indicate whether the trace converter should automatically generate the trace after + # executing a program with CTF instrumentation. Default is true + enabled = true + # Use the fast converter. This feature is experimental and generates a trace compatible + # with just a subset of Paraver cfgs. Default is false + fast = false + # Indicate the location of the ctf2prv converter script. Default is none (not set), + # which means that the $CTF2PRV will be used if present, or ctf2prv in $PATH + # otherwise + # location = "path/to/ctf2prv" + # Choose the events that will be traced + [instrument.ctf.events] + # Linux Kernel events options. Nanos6 can collect Linux kernel internal events using the + # perf_event_open system call. This requires to set /proc/sys/kernel/perf_event_paranoid + # to -1 and read permissions for either /sys/kernel/tracing or /sys/kernel/debug/tracing. + # Events can be selected individually and/or using Nanos6-defined presets + [instrument.ctf.events.kernel] + # Select one or more predefined sets of events. Available options are: + # - preemption: Trace context switches and interrupts + # - context_switch: Trace context switches + # - syscall: Trace all kernel syscalls entry and exit + # presets = [ + # "preemption" + # ] + # Provide a file with a list of individual events to enable, one event per line. + # Lines starting with "#" are omitted. + # file = "./nanos6_kernel_events" + # Exclude selected events. Disable events even if enabled in a preset or the + # user provided file. + # exclude = [ + # "sys_enter_gettimeofday", + # "sys_exit_gettimeofday" + # ] + [instrument.extrae] + # Indicate whether the trace should show the activity of the threads instead of the CPUs' + # activity. Default is false, which shows the activity of CPUs + as_threads = false + # Choose the detail level of the information generated in extrae traces. Default is 1 + detail_level = 1 + [instrument.graph] + # Indicate whether the resulting PDF should be opened automatically with the display + # command. Default is false + display = false + # Choose the command to be used to automatically display the resulting PDF + display_command = "xdg-open" + # Indicate whether the graph nodes should remove the directories from the source code + # file names. Default is false + shorten_filenames = false + # Indicate whether should show the internal data structures that determine when tasks + # are ready. Default is false + show_dependency_structures = false + # Include the information about the range of data or region that is covered when showing + # internal data structures. Default is false + show_regions = false + # Indicate whether should show the internal data structures that do not determine dependencies + # or that are redundant by transitivity. Default is false + show_spurious_dependency_structures = false + # Choose whether should force future and previous dependencies to be shown with different + # graphical attributes. Default is false + show_dead_dependencies = false + # Include the internal data structures after they are no longer relevant. Default is false + show_dead_dependency_structures = false + # Instead of trying to collapse in one step as many related changes as possible, show one + # at a time. Default is false + show_all_steps = false + # Show superaccess links. Default is true + show_superaccess_links = true + # Choose whether to emit a table next to the graph with a description of the changes in + # each frame. Default is false + show_log = false + [instrument.stats] + # The outfile file for emitting the statistics. Default is the standard error + output_file = "/dev/stderr" + [instrument.verbose] + # Output device or file for verbose log. Default is "/dev/stderr" + output_file = "/dev/stderr" + # Print timestamps on log. Default is true + timestamps = true + # Delay verbose output to prevent mixing with application output. Default is false + dump_only_on_exit = false + # Verbose log concepts to display. Possible values on README.md + areas = ["all", "!ComputePlaceManagement", "!DependenciesByAccess", "!DependenciesByAccessLinks", + "!DependenciesByGroup", "!LeaderThread", "!TaskStatus", "!ThreadManagement"] + +[memory] + +[misc] + # Stack size of threads created by the runtime. Default is 8M + stack_size = "8M" + +[loader] + # Enable verbose output of the loader, to debug dynamic linking problems. Default is false + verbose = false + # Choose whether to print a warning when there is any invalid NANOS6 environment variables + # defined when running a program. Default is true + warn_envars = true + # Path to the nanos6 libraries. Default is none + # library_path = "path/to/nanos6/lib" + # Prefix for the report printing all the runtime variables. Default is none + # report_prefix = "#" diff --git a/test/rt/nanos6/nested-task.c b/test/rt/nanos6/nested-task.c new file mode 100644 index 0000000..9836a4f --- /dev/null +++ b/test/rt/nanos6/nested-task.c @@ -0,0 +1,11 @@ +int main(void) +{ + #pragma oss task + { + #pragma oss task + { + } + #pragma oss taskwait + } + return 0; +} diff --git a/test/rt/nanos6/simple-task.c b/test/rt/nanos6/simple-task.c new file mode 100644 index 0000000..2cd8b16 --- /dev/null +++ b/test/rt/nanos6/simple-task.c @@ -0,0 +1,7 @@ +int main(void) +{ + #pragma oss task + { + } + return 0; +} diff --git a/test/rt/nosv.toml b/test/rt/nosv/nosv.toml similarity index 100% rename from test/rt/nosv.toml rename to test/rt/nosv/nosv.toml