Automatic scheduling with custom IO timesΒΆ

It is possible to specify the IO times and provide those to the scheduling.

from b_asic.core_operations import ConstantMultiplication
from b_asic.fft_operations import R2Butterfly
from b_asic.list_schedulers import HybridScheduler
from b_asic.schedule import Schedule
from b_asic.scheduler import ALAPScheduler, ASAPScheduler
from b_asic.sfg_generators import radix_2_dif_fft

points = 8
sfg = radix_2_dif_fft(points=points)

The SFG is:

sfg
%3 in0 in0 r2bfly0 r2bfly0 in0->r2bfly0 0 r2bfly1 r2bfly1 r2bfly0->r2bfly1 0 0 r2bfly2 r2bfly2 r2bfly0->r2bfly2 0 1 in1 in1 r2bfly8 r2bfly8 in1->r2bfly8 0 cmul2 cmul2 r2bfly8->cmul2 1 r2bfly7 r2bfly7 r2bfly8->r2bfly7 0 0 in2 in2 r2bfly11 r2bfly11 in2->r2bfly11 0 r2bfly11->r2bfly1 1 0 cmul0 cmul0 r2bfly11->cmul0 1 in3 in3 r2bfly6 r2bfly6 in3->r2bfly6 0 cmul3 cmul3 r2bfly6->cmul3 1 r2bfly6->r2bfly7 1 0 in4 in4 in4->r2bfly0 1 in5 in5 in5->r2bfly8 1 in6 in6 in6->r2bfly11 1 in7 in7 in7->r2bfly6 1 out0 out0 r2bfly9 r2bfly9 r2bfly9->out0 0 out4 out4 r2bfly9->out4 1 out1 out1 r2bfly3 r2bfly3 r2bfly3->out1 0 out5 out5 r2bfly3->out5 1 out2 out2 r2bfly10 r2bfly10 r2bfly10->out2 0 out6 out6 r2bfly10->out6 1 out3 out3 r2bfly4 r2bfly4 r2bfly4->out3 0 out7 out7 r2bfly4->out7 1 r2bfly1->r2bfly9 0 0 r2bfly1->r2bfly10 0 1 r2bfly2->r2bfly3 0 0 r2bfly2->r2bfly4 0 1 cmul0->r2bfly2 1 cmul1 cmul1 cmul1->r2bfly4 1 r2bfly5 r2bfly5 r2bfly5->r2bfly3 1 0 r2bfly5->cmul1 1 cmul2->r2bfly5 0 cmul3->r2bfly5 1 r2bfly7->r2bfly9 1 0 cmul4 cmul4 r2bfly7->cmul4 1 cmul4->r2bfly10 1


Set latencies and execution times.

sfg.set_latency_of_type(R2Butterfly, 1)
sfg.set_latency_of_type(ConstantMultiplication, 3)
sfg.set_execution_time_of_type(R2Butterfly, 1)
sfg.set_execution_time_of_type(ConstantMultiplication, 1)

Generate an ASAP schedule for reference with custom IO times.

input_times = {f"in{i}": i for i in range(points)}
output_delta_times = {f"out{i}": i for i in range(points)}
schedule1 = Schedule(sfg, scheduler=ASAPScheduler(input_times, output_delta_times))
schedule1.show()
auto scheduling with custom io times

Generate an ALAP schedule for reference with custom IO times..

schedule_t = Schedule(sfg, scheduler=ALAPScheduler(input_times, output_delta_times))
schedule_t.show()
auto scheduling with custom io times

Generate a non-cyclic Schedule from HybridScheduler with custom IO times, one input and output per time unit and one butterfly/multiplication per time unit.

auto scheduling with custom io times

Generate a new Schedule with cyclic scheduling enabled.

schedule3 = Schedule(
    sfg,
    scheduler=HybridScheduler(
        resources,
        input_times=input_times,
        output_delta_times=output_delta_times,
    ),
    schedule_time=14,
    cyclic=True,
)
schedule3.show()
auto scheduling with custom io times

Generate a new Schedule with even less scheduling time.

schedule4 = Schedule(
    sfg,
    scheduler=HybridScheduler(
        resources,
        input_times=input_times,
        output_delta_times=output_delta_times,
    ),
    schedule_time=13,
    cyclic=True,
)
schedule4.show()
auto scheduling with custom io times

Try scheduling for 12 cycles, which gives full butterfly usage.

schedule5 = Schedule(
    sfg,
    scheduler=HybridScheduler(
        resources,
        input_times=input_times,
        output_delta_times=output_delta_times,
    ),
    schedule_time=12,
    cyclic=True,
)
schedule5.show()
auto scheduling with custom io times

Total running time of the script: (0 minutes 2.266 seconds)

Gallery generated by Sphinx-Gallery