
利用 ASAP, ALAP 做 scheduling 找出每個 Vertex 的 tolerance range. 我們就可以利用這樣的 info 來減少 peak power 的產生. 範例如下圖所示
constrain
1. 在不影響每個 Vertex 的先後順序下, 用 ASAP 算出 begin 值. 用 ALAP 算出 end 值.
2. 當 begin==end 時,為 critical path, 表示這個 vertex 不能被移動, begin!=end 表示為 vertex 可以移動的位置.
example :
vertex 1 : begin time 2 end time 4
vertex 2 : begin time 3 end time 3
vertex 3 : begin time 2 end time 4
由此可知, vertex 2 的位置為固定值, 只能靠移動 Vertex1, Vertex3 來減少 peak power.

worst case

best case

ps: 這可以用 short path algorithm 來算出最小值
example :
power_vertex1(x) 2<=x<=4;
power_vertex2(y) 3<=y<=3;
power_vertex3(z) 2<=z<=4;
find min( power_vertex1(x) + power_vertex2(y) + power_vertex3(z) )
my $tt = CDFG->new();
$tt->set_time_weighted_vertex('#::1',0);
...
$tt->set_time_weighted_edge('<::0','#::1',1);
...
# initial set
$tt->run_time_weighted_ini();
# ASAP flow
$tt->run_time_weighted_test();
$tt->run_time_weighted_ASAP();
$tt->rst_time_weighted_ASAP();
# dump or not
$tt->dump_ASAP_graphviz_file('ASAP.dot');
# ALAP flow
$tt->run_time_weighted_test();
$tt->run_time_weighted_max_path();
$tt->run_time_weighted_ALAP();
$tt->rst_time_weighted_ALAP();
# dump or not
$tt->dump_ALAP_grpahviz_file('ALAP.dot');
# report
my $rpt = $tt->run_report();
print Dumper($rpt);
project:
https://github.com/funningboy/SOC_c_model/blob/master/ASALAP/main.pl
沒有留言:
張貼留言