Commit e1ffb20a by chengshuyao

Debug output files

parent 7014457a
......@@ -32,7 +32,7 @@ using namespace std;
//电路的parameter Circuit_parameter
int circuit_index = 9999; //电路编号
int parameter_max_orders = 1;
int parameter_max_orders = 8;
......@@ -133,7 +133,7 @@ int main(int argc,char* argv[]){
//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* 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);
};
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
else{
for(int zj =0; zj<parameter_max_orders;zj++){
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
int best_partition_depth = 10000;
int best_partition_parts = 2;
int learning_rate;
for (int i=0;i<search_iterations;i++){
for (int i=0;i<=search_iterations;i++){
GLOBAL_BDD_id_number += 1;
......@@ -418,14 +418,21 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
cout<<endl;
int order_num = gen()%parameter_max_orders;
//int best_reward_tmp = 0;
//int max_best_order = 0;
//for(int zi=0;zi<parameter_max_orders;zi++){
// if(best_rewards[zi] > best_reward_tmp){
// best_reward_tmp = best_rewards[zi];
// max_best_order = zi;
if(i<parameter_max_orders)
order_num = 0;
//else if (i==search_iterations){
// int best_reward_tmp = 999999;
// int min_best_order = 0;
// 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){
// order_num = max_best_order;
......@@ -435,13 +442,13 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
//else
// learning_rate= 2;
learning_rate=1;
if(i==0) learning_rate =0;
for (int zi=0;zi<learning_rate;zi++){
//for(int vv = 0;vv<parameter_max_orders;vv++){
int vv = order_num;
if(i<parameter_max_orders){
vv=0;
}else{
}
else{
best_area_depth = best_area_depths[vv];
//for(int vi=1;vi<best_area_depth;vi++){
// 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
// 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_c = gen()%int(1+best_area_depth/4);
int num_b = num_c + gen()%int(1+best_area_depth/2);
int 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<<"num_a: "<<num_a<<" num_b: "<<num_b<<" num_c: "<<num_c<<endl;
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
}
}
/// int num_d = gen()%int(1+best_area_depth);
/// int num_e = gen()%int(1+best_area_depth);
/// int x = variable_order[vv][num_d];
/// variable_order[vv][num_d] = variable_order[vv][num_e];
/// variable_order[vv][num_e] = x;
//int num_d = gen()%int(1+best_area_depth);
//int num_e = gen()%int(1+best_area_depth);
//int x = variable_order[vv][num_d];
//variable_order[vv][num_d] = variable_order[vv][num_e];
//variable_order[vv][num_e] = x;
}
//}
......@@ -512,11 +519,18 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
// 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);
//else if (i<parameter_max_orders){
// 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{
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
int replace_order;
replace_order = order_num;
int best_reward_tmp = 0;
for(int zi=0;zi<parameter_max_orders;zi++){
if(best_rewards[zi] > best_reward_tmp){
best_reward_tmp = best_rewards[zi];
replace_order = zi;
if(i>=parameter_max_orders){
for(int zi=0;zi<parameter_max_orders;zi++){
if(best_rewards[zi] > best_reward_tmp){
best_reward_tmp = best_rewards[zi];
replace_order = zi;
}
}
}
else{
replace_order = i;
}
if(i==0){
for (int zi=0;zi<parameter_max_orders;zi++){
for (int zi=0;zi<1;zi++){
replace_order = zi;
best_iteration = i;
if(reward<best_reward){
......@@ -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];
}
cout<<endl;
}
best_reward_max = 0;
best_order_num = 0;
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
if(best_rewards[zi] == best_reward)
best_order_num = zi;
}
if(i>=parameter_max_orders)
if(best_reward_max<1000)
parameter_early_stop_split_nodes = 2000;
parameter_early_stop_split_nodes = 4000;
else
parameter_early_stop_split_nodes = int(best_reward_max*2);
}
parameter_early_stop_split_nodes = int(best_reward_max*4);
}else{
best_iteration = i;
if(reward<best_reward){
......@@ -617,9 +636,13 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
}
if(i>=parameter_max_orders)
if(best_reward_max<1000)
parameter_early_stop_split_nodes = 2000;
parameter_early_stop_split_nodes = 4000;
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
//cout<<"Best Design Area: "<<BSD_features_0.BSD_area<<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_areas ;
......
......@@ -1081,9 +1081,59 @@ int BDD_class::BDD_FULL_PROCESS(){
else{
int optimize_time =0;
for(int k=1;k<2;k++){
for(int zj=0;zj<5;zj++){
max_group =(zj)+1 ;
max_move_length = int((parameter_input_bit_width/(1+zj))-1) ;
//for(int zj=0;zj<2;zj++){
// max_group = 2 ;
// 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<<"Switch Times "<<zj<<endl;
......@@ -1120,7 +1170,7 @@ int BDD_class::BDD_FULL_PROCESS(){
}
}
}
if(optimize_time < 10)
if((optimize_time < 2) && (zj>4))
break;
}
}
......@@ -1131,10 +1181,12 @@ int BDD_class::BDD_FULL_PROCESS(){
}
cout<<"Start infer"<<endl;
///BDD_infer(BDD,most_influence);
//print_circuit(BDD,most_influence);
BDD_infer(BDD,most_influence);
print_circuit(BDD,most_influence);
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_split_nodes += total_split_nodes;
//cout<<"Total nodes = "<<total_nodes_amount<<endl;
......
......@@ -18,7 +18,13 @@ The latest version of the BSD Learner.
Line 1: modify input bitwidth;
Line 2: modify output bitwidth;
Line 3: include your own io_generator file.
If it is a AIG, #define INPUT_AIG, otherwise do not define it.
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.
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_output_bit_width = 129; //输出bit有几位
#include"io_generator/adder.h"
#include "adder_vec.h"
#include"io_generator_function.h"
extern const int parameter_input_bit_width = 33+5; //输入bit有几位,写在+6前面。+6是为了防止一些bug的冗余设计。
extern const int parameter_output_bit_width = 25; //输出bit有几位
#include"io_generator/c1908.h"
#include "c1908_vec.h"
#define INPUT_AIG
//#include"io_generator_function.h"
int parameter_search_iterations = 1000; //最大设计次数
int parameter_test_ios = 100; //测试要求多少样本
extern const int parameter_max_samples = int(parameter_test_ios*40); //BSD每一个节点最多进行多少次采样
int parameter_search_iterations = 400; //最大设计次数
int parameter_test_ios = 1000; //测试要求多少样本
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) {
......
module_name="adder"
module_name="dalu"
vim -c "open io_generator/${module_name}.h" \
-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