Module InstructionScheduler

module InstructionScheduler: sig .. end

InstructionScheduler scheduling functions and utilities

val print_problem : Stdlib.out_channel -> InstructionSchedulerTypes.problem -> unit

Print problem for human readability.

val get_nr_instructions : InstructionSchedulerTypes.problem -> int

Get the number of instructions in a problem

val get_nr_resources : InstructionSchedulerTypes.problem -> int

Get the number of resources in a problem

val maximum_slot_used : int array -> int

Get the number the last scheduling time used for an instruction in a solution.

val check_schedule : InstructionSchedulerTypes.problem ->
InstructionSchedulerTypes.solution -> unit

Validate that a solution is truly a solution of a scheduling problem.

val list_scheduler : InstructionSchedulerTypes.problem ->
InstructionSchedulerTypes.solution option

Schedule the problem using a greedy list scheduling algorithm, from the start. The first (according to instruction ordering) instruction that is ready (according to the latency constraints) is scheduled at the current clock tick. Once a clock tick is full go to the next.

val regpres_scheduler : InstructionSchedulerTypes.problem ->
InstructionSchedulerTypes.solution option

Same as list_scheduler, but schedules instructions which decrease register pressure when it gets too high.

val reg_pres_scheduler_old : InstructionSchedulerTypes.problem ->
InstructionSchedulerTypes.solution option
val greedy_scheduler : InstructionSchedulerTypes.problem ->
InstructionSchedulerTypes.solution option

Schedule the problem using the order of instructions without any reordering. DOES NOT COMPUTE A CORRECT MAKESPAN, the "times" are logical not cycles.

val recompute_makespan : InstructionSchedulerTypes.problem -> int array -> int option
val schedule_reversed : InstructionSchedulerTypes.scheduler ->
InstructionSchedulerTypes.problem ->
InstructionSchedulerTypes.solution option

Schedule a problem using a scheduler applied in the opposite direction, e.g. for list scheduling from the end instead of the start. BUGGY

val reverse_list_scheduler : InstructionSchedulerTypes.problem ->
InstructionSchedulerTypes.solution option

Schedule a problem from the end using a list scheduler. BUGGY

val check_problem : InstructionSchedulerTypes.problem -> unit

Check that a problem is well-formed.

val validated_scheduler : InstructionSchedulerTypes.scheduler ->
InstructionSchedulerTypes.problem ->
InstructionSchedulerTypes.solution option

Apply a scheduler and validate the result against the input problem.

val get_max_latency : int array -> int

Get max latency from solution

val maximum_critical_path : InstructionSchedulerTypes.problem -> int

Get the length of a maximal critical path

val cascaded_scheduler : InstructionSchedulerTypes.problem ->
InstructionSchedulerTypes.solution option

Apply line scheduler then advanced solver

val show_date_ranges : InstructionSchedulerTypes.problem -> unit
type pseudo_boolean_problem_type = 
| SATISFIABILITY
| OPTIMIZATION
type pseudo_boolean_mapper 
val pseudo_boolean_print_problem : Stdlib.out_channel ->
InstructionSchedulerTypes.problem ->
pseudo_boolean_problem_type ->
pseudo_boolean_mapper
val pseudo_boolean_read_solution : pseudo_boolean_mapper -> Stdlib.in_channel -> int array
val pseudo_boolean_scheduler : pseudo_boolean_problem_type ->
InstructionSchedulerTypes.problem ->
InstructionSchedulerTypes.solution option
val smt_print_problem : Stdlib.out_channel -> InstructionSchedulerTypes.problem -> unit
val ilp_print_problem : Stdlib.out_channel ->
InstructionSchedulerTypes.problem ->
pseudo_boolean_problem_type ->
pseudo_boolean_mapper
val ilp_scheduler : pseudo_boolean_problem_type ->
InstructionSchedulerTypes.problem ->
InstructionSchedulerTypes.solution option
val mris_scheduler : InstructionSchedulerTypes.problem ->
bool -> bool -> InstructionSchedulerTypes.solution option
val scheduler_by_name : string ->
InstructionSchedulerTypes.problem ->
InstructionSchedulerTypes.solution option

Schedule a problem using a scheduler given by a string name