| .. _run_vtr_task: |
| |
| run_vtr_task |
| --------------- |
| This script is used to execute one or more *tasks* (i.e. collections of benchmarks and architectures). |
| |
| .. seealso:: See :ref:`vtr_tasks` for creation and configuration of tasks. |
| |
| This script runs the VTR flow for a single benchmark circuit and architecture file. |
| |
| The script is located at:: |
| |
| $VTR_ROOT/vtr_flow/scripts/run_vtr_task.pl |
| |
| .. program:: run_vtr_task.pl |
| |
| Basic Usage |
| ~~~~~~~~~~~ |
| |
| Typical usage is:: |
| |
| run_vtr_task.pl <task_name1> <task_name2> ... |
| |
| .. note:: At least one task must be specified, either directly as a parameter or via the :option:`-l` options. |
| |
| Output |
| ~~~~~~ |
| Each task will execute the script specified in the configuration file for every benchmark/circuit/option combination. |
| The standard output of the underlying script will be forwarded to the output of this script. |
| |
| If golden results exist (see :ref:`parse_vtr_task`), they will be inspected for runtime and memory usage. |
| |
| Detailed Command-line Options |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| .. option:: -s <script_param> ... |
| |
| Treat the remaining command line options as parameters to forward to the underlying script (e.g. :ref:`run_vtr_flow`). |
| |
| .. option:: -j <N> |
| |
| Perform parallel execution using ``N`` threads. |
| |
| .. note:: |
| Only effective for ``-system local`` |
| |
| .. warning:: |
| Large benchmarks will use very large amounts of memory (several to 10s of gigabytes). |
| Because of this, parallel execution often saturates the physical memory, requiring the use of swap memory, which significantly slows execution. |
| Be sure you have allocated a sufficiently large swap memory or errors may result. |
| |
| .. option:: -l <task_list_file> |
| |
| A file containing a list of tasks to execute. |
| |
| Each task name should be on a separate line, e.g.:: |
| |
| <task_name1> |
| <task_name2> |
| <task_name3> |
| ... |
| |
| .. option:: -system {local | scripts} |
| |
| Controls how the actions (e.g. invocations of :ref:`run_vtr_flow`) are called. |
| |
| **Default:** ``local`` |
| |
| * ``local``: Runs the flow invocations on the local machine (potentially in parallel with the ``-j`` option). |
| |
| Example: |
| |
| .. code-block:: console |
| |
| #From $VTR_ROOT/vtr_flow/tasks |
| |
| $ ../scripts/run_vtr_task.pl regression_tests/vtr_reg_basic/basic_timing |
| regression_tests/vtr_reg_basic/basic_timing: k6_N10_mem32K_40nm.xml/ch_intrinsics.v/common OK (took 2.24 seconds) |
| regression_tests/vtr_reg_basic/basic_timing: k6_N10_mem32K_40nm.xml/diffeq1.v/common OK (took 10.94 seconds) |
| |
| * ``scripts``: Prints out all the generated script files (instead of calling them to run all the flow invocations). |
| |
| Example: |
| |
| .. code-block:: console |
| |
| #From $VTR_ROOT/vtr_flow/tasks |
| |
| $ ../scripts/run_vtr_task.pl regression_tests/vtr_reg_basic/basic_timing -system scripts |
| /project/trees/vtr/vtr_flow/tasks/regression_tests/vtr_reg_basic/basic_timing/run001/k6_N10_mem32K_40nm.xml/ch_intrinsics.v/common/vtr_flow.sh |
| /project/trees/vtr/vtr_flow/tasks/regression_tests/vtr_reg_basic/basic_timing/run001/k6_N10_mem32K_40nm.xml/diffeq1.v/common/vtr_flow.sh |
| |
| Each generated script file (``vtr_flow.sh``) corresponds to a particular flow invocation generated by the task, and is located within its own directory. |
| |
| This list of scripts can be used to run flow invocations on different computing infrastructures (e.g. a compute cluster). |
| |
| **Using the output of -system scripts to run a task** |
| |
| An example of using the output would be: |
| |
| .. code-block:: console |
| |
| #From $VTR_ROOT/vtr_flow/tasks |
| |
| $ ../scripts/run_vtr_task.pl regression_tests/vtr_reg_basic/basic_timing -system scripts | parallel -j4 'cd $(dirname {}) && {}' |
| regression_tests/vtr_reg_basic/basic_timing: k6_N10_mem32K_40nm.xml/ch_intrinsics.v/common OK (took 2.11 seconds) |
| regression_tests/vtr_reg_basic/basic_timing: k6_N10_mem32K_40nm.xml/diffeq1.v/common OK (took 10.94 seconds) |
| |
| where ``{}`` is a special variable interpretted by the ``parallel`` command to represent the input line (i.e. a script, see ``parallel``'s documentation for details). |
| This will run the scripts generated by run_vtr_task.pl in parallel (up to 4 at-a-time due to ``-j4``). |
| Each script is invoked in the script's containing directory (``cd $(dirname {})``), which mimics the behaviour of ``-system local -j4``. |
| |
| .. note:: |
| While this example shows how the flow invocations could be run locally, similar techniques can be used to submit jobs to other compute infrastructures (e.g. a compute cluster) |
| |
| **Determining Resource Requirements** |
| |
| Often, when running in a cluster computing enviroment, it is useful to know what compute resources are required for each flow invocation. |
| |
| Each generated ``vtr_flow.sh`` scripts contains the expected run-time and memory use of each flow invocation (derived from golden reference results). |
| These can be inspected to determine compute requirements: |
| |
| .. code-block:: console |
| |
| $ grep VTR_RUNTIME_ESTIMATE_SECONDS /project/trees/vtr/vtr_flow/tasks/regression_tests/vtr_reg_basic/basic_timing/run001/k6_N10_mem32K_40nm.xml/ch_intrinsics.v/common/vtr_flow.sh |
| VTR_RUNTIME_ESTIMATE_SECONDS=2.96 |
| |
| $ grep VTR_MEMORY_ESTIMATE_BYTES /project/trees/vtr/vtr_flow/tasks/regression_tests/vtr_reg_basic/basic_timing/run001/k6_N10_mem32K_40nm.xml/ch_intrinsics.v/common/vtr_flow.sh |
| VTR_MEMORY_ESTIMATE_BYTES=63422464 |
| |
| .. note:: |
| If the resource estimates are unkown they will be set to ``0`` |