Legend:
Library
Module
Module type
Parameter
Class
Class type
Models associated to benchmarks have free variables. Some of these variables are to be inferred from the empirical data, but some others must be provided by other models and correspond to _dependencies_ of a model upon the result of another one.
The goal of this module is to take as input a set of models seen as sets of free variables and infer back a partial dependency ordering among them. In particular, a topological sort of this partial ordering yields a scheduling for the inference process that respects cross-model dependencies.
Such a problem does not always have a solution, or can have several solutions (ie it is in general ill-posed). When there's more than one possible solution, we use a simple heuristic to pick one.
Dependency graph of benchmarks using dependencies/provides
val find_model_or_generic : string ->(string * 'model) list->'model option
find_model_or_generic local_model_name local_model_list returns the model matching local_model_name from a local_model_list of a benchmark. If none match, then searches for models named "*".
load_workload_files ~local_model_name files loads .workload files given in files, looks for the model local_model_name, and if found, adds it to a dependency graph. Returns (G, H) where G is the final graph obtained this way, and H is a table that maps the name of a benchmark with its contents.