.. _interface-asynchronous-local_evaluation_scheduling:

"""""""""""""""""""""""""""
local_evaluation_scheduling
"""""""""""""""""""""""""""


Control how local asynchronous jobs are scheduled



**Topics**


concurrency_and_parallelism


.. toctree::
   :hidden:
   :maxdepth: 1

   interface-asynchronous-local_evaluation_scheduling-dynamic
   interface-asynchronous-local_evaluation_scheduling-static


**Specification**

- *Alias:* None

- *Arguments:* None

- *Default:* dynamic


**Child Keywords:**

+-------------------------+--------------------+--------------------+-----------------------------------------------+
| Required/Optional       | Description of     | Dakota Keyword     | Dakota Keyword Description                    |
|                         | Group              |                    |                                               |
+=========================+====================+====================+===============================================+
| Required (Choose One)   | Scheduling Mode    | `dynamic`__        | Dynamic local scheduling (sequential)         |
|                         |                    +--------------------+-----------------------------------------------+
|                         |                    | `static`__         | Static local scheduling (tiled)               |
+-------------------------+--------------------+--------------------+-----------------------------------------------+

.. __: interface-asynchronous-local_evaluation_scheduling-dynamic.html
__ interface-asynchronous-local_evaluation_scheduling-static.html



**Description**


When performing asynchronous local evaluations, the
local_evaluation_scheduling keyword controls how new evaluation jobs
are dispatched when one completes.

The two options are:

- ``dynamic``
- ``static``

If the local_evaluation_scheduling is specified as dynamic (the
default), each completed evaluation will be replaced by the next in
the local evaluation queue.

If local_evaluation_scheduling is specified as static, each completed
evaluation will be replaced by an evaluation number that is congruent
modulo the evaluation_concurrency.  This is helpful for relative node
scheduling as described in ``dakota/share/dakota/examples/parallelism``.  For example,
assuming only asynchronous local concurrency (no MPI), if the local
concurrency is 6 and job 2 completes, it will be replaced with job 8.

For the case of hybrid parallelism, static local scheduling results in
evaluation replacements that are modulo the total capacity, defined as
the product of the evaluation concurrency and the number of evaluation
servers.  Both of these cases can result in idle processors if
runtimes are non-uniform, so the default dynamic scheduling is
preferred when relative node scheduling is not required.