Skip to content

[Scheduling] Problem understanding incomingDelay and outgoingDelay in a simple example. #8506

Open
@leothaud

Description

@leothaud

I'm using the simplex scheduler with a simple example. But I think I misunderstood what the incomingDelay and outgoingDelay are. I understood that the operation must start at least incomingDelay before the next clock tick. After this clock ticks, the results will be available only after outgoingDelay. Am I right?
I have a problem in the following example when I try to schedule it using the simplex scheduler with a cycle-time of 10.0:

ssp.instance of "ChainingCyclicProblem" {
  library {
    operator_type @operator [latency<1>, incDelay<8.0>, outDelay<3.0>]
  }
  graph {
    %0 = operation<@operator> @op0(@op0 [dist<1>])
  }
}

This example represents the following simple circuit :

The operation has to start at 8.0 before the end of the cycle, and the results are available after 3.0 in the next cycle. Having II=1 is impossible as the operation needs the results of its previous iteration. Leads to the following schedule, with II=2 :

But when I use circt-opt with the argument -ssp-schedule="scheduler=simplex options=cycle-time=10.0" the result is :

ssp.instance of "ChainingCyclicProblem" [II<1>] {
  library {
    operator_type @operator [latency<1>, incDelay<8.000000e+00 : f32>, outDelay<3.000000e+00 : f32>]
  }
  graph {
    %0 = operation<@operator> @op0(@op0 [dist<1>]) [t<0>, z<0.000000e+00 : f32>]
  }
}

This means the schedule would look like this:

How is this schedule correct? What did I miss about circt's scheduling problems?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions