Commit e1ffb20a by chengshuyao

Debug output files

parent 7014457a
...@@ -32,7 +32,7 @@ using namespace std; ...@@ -32,7 +32,7 @@ using namespace std;
//电路的parameter Circuit_parameter //电路的parameter Circuit_parameter
int circuit_index = 9999; //电路编号 int circuit_index = 9999; //电路编号
int parameter_max_orders = 1; int parameter_max_orders = 8;
...@@ -133,7 +133,7 @@ int main(int argc,char* argv[]){ ...@@ -133,7 +133,7 @@ int main(int argc,char* argv[]){
//int* start_order_a = new int [parameter_input_bit_width]; //int* start_order_a = new int [parameter_input_bit_width];
//int area_a = search_order(10,output_partition_set_a,0,start_order_a); //int area_a = search_order(10,output_partition_set_a,0,start_order_a);
int* start_order = new int [parameter_input_bit_width]; int* start_order = new int [parameter_input_bit_width];
int area_a = search_order(1000,default_partition_set,0,start_order); int area_a = search_order(parameter_search_iterations,default_partition_set,0,start_order);
//search_partition(parameter_input_bit_width,start_order); //search_partition(parameter_input_bit_width,start_order);
}; };
int search_partition(int start_order_depth, int* start_order){ int search_partition(int start_order_depth, int* start_order){
...@@ -274,7 +274,7 @@ int BSD_execute(int variable_order_number,int** variable_order, int partition_de ...@@ -274,7 +274,7 @@ int BSD_execute(int variable_order_number,int** variable_order, int partition_de
else{ else{
for(int zj =0; zj<parameter_max_orders;zj++){ for(int zj =0; zj<parameter_max_orders;zj++){
for(int zi=0;zi<parameter_input_bit_width;zi++){ for(int zi=0;zi<parameter_input_bit_width;zi++){
variable_order [zj][zi] = BDD_class_main.BSD_variable_order[zj][zi]; variable_order [zj][zi] = BDD_class_main.BSD_variable_order[0][zi];
} }
} }
} }
...@@ -360,7 +360,7 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -360,7 +360,7 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
int best_partition_depth = 10000; int best_partition_depth = 10000;
int best_partition_parts = 2; int best_partition_parts = 2;
int learning_rate; int learning_rate;
for (int i=0;i<search_iterations;i++){ for (int i=0;i<=search_iterations;i++){
GLOBAL_BDD_id_number += 1; GLOBAL_BDD_id_number += 1;
...@@ -418,14 +418,21 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -418,14 +418,21 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
cout<<endl; cout<<endl;
int order_num = gen()%parameter_max_orders; int order_num = gen()%parameter_max_orders;
//int best_reward_tmp = 0; if(i<parameter_max_orders)
//int max_best_order = 0; order_num = 0;
//for(int zi=0;zi<parameter_max_orders;zi++){ //else if (i==search_iterations){
// if(best_rewards[zi] > best_reward_tmp){ // int best_reward_tmp = 999999;
// best_reward_tmp = best_rewards[zi]; // int min_best_order = 0;
// max_best_order = zi; // for(int zi=0;zi<parameter_max_orders;zi++){
// if(best_rewards[zi] < best_reward_tmp){
// best_reward_tmp = best_rewards[zi];
// min_best_order = zi;
// }
// } // }
// order_num = min_best_order;
// cout<<"Best order num "<<order_num<<endl;
//} //}
//if(gen()%4==0){ //if(gen()%4==0){
// order_num = max_best_order; // order_num = max_best_order;
...@@ -435,13 +442,13 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -435,13 +442,13 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
//else //else
// learning_rate= 2; // learning_rate= 2;
learning_rate=1; learning_rate=1;
if(i==0) learning_rate =0;
for (int zi=0;zi<learning_rate;zi++){ for (int zi=0;zi<learning_rate;zi++){
//for(int vv = 0;vv<parameter_max_orders;vv++){ //for(int vv = 0;vv<parameter_max_orders;vv++){
int vv = order_num; int vv = order_num;
if(i<parameter_max_orders){ if(i<parameter_max_orders){
vv=0; vv=0;
}else{ }
else{
best_area_depth = best_area_depths[vv]; best_area_depth = best_area_depths[vv];
//for(int vi=1;vi<best_area_depth;vi++){ //for(int vi=1;vi<best_area_depth;vi++){
// if( (gen()%int(1+best_area_depth)==0)){ // if( (gen()%int(1+best_area_depth)==0)){
...@@ -455,10 +462,10 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -455,10 +462,10 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
// break; // break;
// } // }
//} //}
int num_a = gen()%int(1+best_area_depth/2); int num_a = gen()%int(best_area_depth-1);
//int num_b = gen()%int(1+best_area_depth/4); //int num_b = gen()%int(1+best_area_depth/4);
int num_c = gen()%int(1+best_area_depth/4); int num_c = gen()%int(1+best_area_depth/2);
int num_b = num_c + gen()%int(1+best_area_depth/2); int num_b = gen()%int(1+best_area_depth/2);
cout<<"order number "<<order_num<<endl; cout<<"order number "<<order_num<<endl;
cout<<"num_a: "<<num_a<<" num_b: "<<num_b<<" num_c: "<<num_c<<endl; cout<<"num_a: "<<num_a<<" num_b: "<<num_b<<" num_c: "<<num_c<<endl;
for(int vc=0;vc<num_c;vc++){ for(int vc=0;vc<num_c;vc++){
...@@ -481,11 +488,11 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -481,11 +488,11 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
} }
} }
/// int num_d = gen()%int(1+best_area_depth); //int num_d = gen()%int(1+best_area_depth);
/// int num_e = gen()%int(1+best_area_depth); //int num_e = gen()%int(1+best_area_depth);
/// int x = variable_order[vv][num_d]; //int x = variable_order[vv][num_d];
/// variable_order[vv][num_d] = variable_order[vv][num_e]; //variable_order[vv][num_d] = variable_order[vv][num_e];
/// variable_order[vv][num_e] = x; //variable_order[vv][num_e] = x;
} }
//} //}
...@@ -512,11 +519,18 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -512,11 +519,18 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
// feature_variable[variable_order[j]] = 9999999; // feature_variable[variable_order[j]] = 9999999;
//} //}
if (i==0) if (i<parameter_max_orders)
reward = BSD_execute(start_order_depth,variable_order,partition_depth,partition_parts,0,output_partition_set); reward = BSD_execute(start_order_depth,variable_order,partition_depth,partition_parts,0,output_partition_set);
//else if (i<parameter_max_orders){ //else if (i<parameter_max_orders){
// reward = BSD_execute(0,variable_order,partition_depth,partition_parts,0,output_partition_set); // reward = BSD_execute(0,variable_order,partition_depth,partition_parts,0,output_partition_set);
//} //}
else if (i==search_iterations){
parameter_early_stop_split_nodes = 9999999;
// area = BSD_execute(best_area_depth,variable_order,partition_depth,partition_parts,order_num,output_partition_set);
reward = BSD_execute(best_area_depth,variable_order,partition_depth,partition_parts,order_num,output_partition_set);
//area = BSD_execute(parameter_input_bit_width,best_variable_order,10000,best_partition_parts,best_order_num,output_partition_set);
break;
}
else{ else{
reward = BSD_execute(best_area_depth,variable_order,partition_depth,partition_parts,order_num,output_partition_set); reward = BSD_execute(best_area_depth,variable_order,partition_depth,partition_parts,order_num,output_partition_set);
} }
...@@ -548,15 +562,20 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -548,15 +562,20 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
int replace_order; int replace_order;
replace_order = order_num; replace_order = order_num;
int best_reward_tmp = 0; int best_reward_tmp = 0;
for(int zi=0;zi<parameter_max_orders;zi++){ if(i>=parameter_max_orders){
if(best_rewards[zi] > best_reward_tmp){ for(int zi=0;zi<parameter_max_orders;zi++){
best_reward_tmp = best_rewards[zi]; if(best_rewards[zi] > best_reward_tmp){
replace_order = zi; best_reward_tmp = best_rewards[zi];
replace_order = zi;
}
} }
} }
else{
replace_order = i;
}
if(i==0){ if(i==0){
for (int zi=0;zi<parameter_max_orders;zi++){ for (int zi=0;zi<1;zi++){
replace_order = zi; replace_order = zi;
best_iteration = i; best_iteration = i;
if(reward<best_reward){ if(reward<best_reward){
...@@ -575,6 +594,7 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -575,6 +594,7 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
best_BDD_split_nodes[vi] = BSD_features_0.BSD_area_layers[vi]; best_BDD_split_nodes[vi] = BSD_features_0.BSD_area_layers[vi];
} }
cout<<endl; cout<<endl;
}
best_reward_max = 0; best_reward_max = 0;
best_order_num = 0; best_order_num = 0;
for(int zi=0;zi<parameter_max_orders;zi++){ for(int zi=0;zi<parameter_max_orders;zi++){
...@@ -583,12 +603,11 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -583,12 +603,11 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
if(best_rewards[zi] == best_reward) if(best_rewards[zi] == best_reward)
best_order_num = zi; best_order_num = zi;
} }
if(i>=parameter_max_orders)
if(best_reward_max<1000) if(best_reward_max<1000)
parameter_early_stop_split_nodes = 2000; parameter_early_stop_split_nodes = 4000;
else else
parameter_early_stop_split_nodes = int(best_reward_max*2); parameter_early_stop_split_nodes = int(best_reward_max*4);
}
}else{ }else{
best_iteration = i; best_iteration = i;
if(reward<best_reward){ if(reward<best_reward){
...@@ -617,9 +636,13 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -617,9 +636,13 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
} }
if(i>=parameter_max_orders) if(i>=parameter_max_orders)
if(best_reward_max<1000) if(best_reward_max<1000)
parameter_early_stop_split_nodes = 2000; parameter_early_stop_split_nodes = 4000;
else else
parameter_early_stop_split_nodes = int(best_reward_max*2); parameter_early_stop_split_nodes = int(best_reward_max*4);
if((i>=10) && (best_reward_max < 1.001*best_reward))
break;
} }
...@@ -652,8 +675,8 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -652,8 +675,8 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
//cout<<"Best Design Area: "<<BSD_features_0.BSD_area<<endl; //cout<<"Best Design Area: "<<BSD_features_0.BSD_area<<endl;
cout<<endl; cout<<endl;
} }
parameter_early_stop_split_nodes = 99999999;
area = BSD_execute(parameter_input_bit_width,best_variable_order,best_partition_depth,best_partition_parts,best_order_num,output_partition_set); //area = BSD_execute(parameter_input_bit_width,best_variable_order,10000,best_partition_parts,best_order_num,output_partition_set);
delete [] best_BDD_split_nodes ; delete [] best_BDD_split_nodes ;
delete [] best_areas ; delete [] best_areas ;
......
...@@ -1081,9 +1081,59 @@ int BDD_class::BDD_FULL_PROCESS(){ ...@@ -1081,9 +1081,59 @@ int BDD_class::BDD_FULL_PROCESS(){
else{ else{
int optimize_time =0; int optimize_time =0;
for(int k=1;k<2;k++){ for(int k=1;k<2;k++){
for(int zj=0;zj<5;zj++){ //for(int zj=0;zj<2;zj++){
max_group =(zj)+1 ; // max_group = 2 ;
max_move_length = int((parameter_input_bit_width/(1+zj))-1) ; // max_move_length = max(min(50,int(parameter_input_bit_width/2)-1),int((parameter_input_bit_width/(1+zj))-1)) ;
//
// cout<<"######################################################################"<<endl;
// cout<<"Switch Times "<<zj<<endl;
// optimize_time = 0;
// int best_move_times_zk=0;
// int best_move_times_zi=0;
// random_device rd;
// mt19937 gen(rd());
// //int start_i = gen()%total_BDD_depth;
// int start_i = 0;
// for(int si=0;si<parameter_input_bit_width;si++){
// int i = (start_i + si)%total_BDD_depth;
// cout<<"Switch bit: "<<i<<" "<<endl;
// bool optimize=0;
// int move_length = min(i,max_move_length);
// for(int zk=0;zk<=max_group;zk++){
// for(int zi=0;zi<=move_length;zi++){
// BSD_switch_layer(i-zi);
// if(total_split_nodes_recursive < best_total_split_nodes_recursive){
// best_total_split_nodes_recursive = total_split_nodes_recursive;
// cout<<" move length "<<zi<<" move group "<<zk;
// cout<<" Best area update: "<<best_total_split_nodes_recursive<<endl;
// optimize_time +=1;
// }
// }
//
// }
// for(int zk=max_group;zk>=0;zk--){
// for(int zi=move_length;zi>=0;zi--){
// if(total_split_nodes_recursive == best_total_split_nodes_recursive)
// break;
// else
// BSD_switch_layer(i-zi);
// }
// }
// }
// //if(( parameter_input_bit_width<50)){
// // if((optimize_time < 1) )
// // break;
// //}else{
// // if(optimize_time < int(parameter_input_bit_width/10))
// // break;
// //}
//}
for(int zj=0;zj<10;zj++){
if(zj==0)
max_group = zj ;
else
max_group = zj - 1;
max_move_length = max(20,int((parameter_input_bit_width/(1+zj))-1)) ;
cout<<"######################################################################"<<endl; cout<<"######################################################################"<<endl;
cout<<"Switch Times "<<zj<<endl; cout<<"Switch Times "<<zj<<endl;
...@@ -1120,7 +1170,7 @@ int BDD_class::BDD_FULL_PROCESS(){ ...@@ -1120,7 +1170,7 @@ int BDD_class::BDD_FULL_PROCESS(){
} }
} }
} }
if(optimize_time < 10) if((optimize_time < 2) && (zj>4))
break; break;
} }
} }
...@@ -1131,10 +1181,12 @@ int BDD_class::BDD_FULL_PROCESS(){ ...@@ -1131,10 +1181,12 @@ int BDD_class::BDD_FULL_PROCESS(){
} }
cout<<"Start infer"<<endl; cout<<"Start infer"<<endl;
///BDD_infer(BDD,most_influence); BDD_infer(BDD,most_influence);
//print_circuit(BDD,most_influence); print_circuit(BDD,most_influence);
delete [] test_input_data; delete [] test_input_data;
for (int vi=0;vi<parameter_input_bit_width;vi++){
BSD_variable_order[0][vi] = most_influence[vi];
}
//GLOBAL_BDD_nodes += total_nodes_amount; //GLOBAL_BDD_nodes += total_nodes_amount;
//GLOBAL_BDD_split_nodes += total_split_nodes; //GLOBAL_BDD_split_nodes += total_split_nodes;
//cout<<"Total nodes = "<<total_nodes_amount<<endl; //cout<<"Total nodes = "<<total_nodes_amount<<endl;
......
...@@ -18,7 +18,13 @@ The latest version of the BSD Learner. ...@@ -18,7 +18,13 @@ The latest version of the BSD Learner.
Line 1: modify input bitwidth; Line 1: modify input bitwidth;
Line 2: modify output bitwidth; Line 2: modify output bitwidth;
Line 3: include your own io_generator file. Line 3: include your own io_generator file.
Line 4: If it is an AIG file, add its vec.h file generated from write_vec.sh.
If it is a AIG, #define INPUT_AIG, otherwise do not define it. Line 5: If it is a AIG, #define INPUT_AIG, otherwise do not define it.
Line 1: extern const int parameter_input_bit_width = 256+5;
Line 2: extern const int parameter_output_bit_width = 129;
Line 3: #include"io_generator/adder.h"
Line 4: #include "adder_vec.h"
Line 5: #define INPUT_AIG
extern const int parameter_input_bit_width = 256+5; //输入bit有几位,写在+6前面。+6是为了防止一些bug的冗余设计。 extern const int parameter_input_bit_width = 33+5; //输入bit有几位,写在+6前面。+6是为了防止一些bug的冗余设计。
extern const int parameter_output_bit_width = 129; //输出bit有几位 extern const int parameter_output_bit_width = 25; //输出bit有几位
#include"io_generator/adder.h" #include"io_generator/c1908.h"
#include "adder_vec.h" #include "c1908_vec.h"
#include"io_generator_function.h"
#define INPUT_AIG #define INPUT_AIG
//#include"io_generator_function.h" //#include"io_generator_function.h"
int parameter_search_iterations = 1000; //最大设计次数 int parameter_search_iterations = 400; //最大设计次数
int parameter_test_ios = 100; //测试要求多少样本 int parameter_test_ios = 1000; //测试要求多少样本
extern const int parameter_max_samples = int(parameter_test_ios*40); //BSD每一个节点最多进行多少次采样 extern const int parameter_max_samples = int(parameter_test_ios*10); //BSD每一个节点最多进行多少次采样
bool* io_generator_function(bool input_data[parameter_input_bit_width], bool* output_data) { bool* io_generator_function(bool input_data[parameter_input_bit_width], bool* output_data) {
......
module_name="adder" module_name="dalu"
vim -c "open io_generator/${module_name}.h" \ vim -c "open io_generator/${module_name}.h" \
-c "1d"\ -c "1d"\
-c "1d"\ -c "1d"\
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment