Commit f447e0e0 by chengshuyao

PI PO width adjust

parent e1ffb20a
...@@ -32,15 +32,15 @@ using namespace std; ...@@ -32,15 +32,15 @@ using namespace std;
//电路的parameter Circuit_parameter //电路的parameter Circuit_parameter
int circuit_index = 9999; //电路编号 int circuit_index = 9999; //电路编号
int parameter_max_orders = 8; extern const int parameter_max_orders = 8;
//算法的parameter Algorithm_parameter //算法的parameter Algorithm_parameter
extern const int parameter_num_threads = 100; //线程数 extern const int parameter_num_threads = 100; //线程数
extern const int parameter_multi_output_index = 0; //BSD从第几层开始化简,前面若干层展开序确定 extern const int parameter_multi_output_index = 0; //BSD从第几层开始化简,前面若干层展开序确定
extern const int parameter_max_BDD_width = 40000; //BSD每一层最多多少个节点
int parameter_early_stop_depth = parameter_input_bit_width; //BSD到第几层终止,输出此时的不准确BSD int parameter_early_stop_depth = parameter_input_bit_width; //BSD到第几层终止,输出此时的不准确BSD
int parameter_max_BDD_width = 40000; //BSD每一层最多多少个节点
int parameter_early_stop_split_nodes= 1000000; //BSD每一层最多多少个节点 int parameter_early_stop_split_nodes= 1000000; //BSD每一层最多多少个节点
//全局变量 //全局变量
...@@ -132,7 +132,9 @@ int main(int argc,char* argv[]){ ...@@ -132,7 +132,9 @@ int main(int argc,char* argv[]){
//search_order(); //search_order();
//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(parameter_search_iterations,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);
}; };
...@@ -519,8 +521,11 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -519,8 +521,11 @@ 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<parameter_max_orders) if (i<parameter_max_orders){
//parameter_max_samples = int(parameter_max_samples/10); //BSD每一个节点最多进行多少次采样
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);
//parameter_max_samples *= 10; //BSD每一个节点最多进行多少次采样
}
//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);
//} //}
......
...@@ -81,13 +81,13 @@ public: ...@@ -81,13 +81,13 @@ public:
double* amount_turn ; double* amount_turn ;
bool ** simplify_list ; bool ** simplify_list ;
bool cal_infer_result(bool input_data[parameter_input_bit_width],int which_root_node,bool neg); bool cal_infer_result(bool* input_data,int which_root_node,bool neg);
bool* io_generator(bool input_data[parameter_input_bit_width],bool* output_data); bool* io_generator(bool* input_data,bool* output_data);
int* io_generator_vec(int input_data[parameter_input_bit_width],int* output_data); int* io_generator_vec(int* input_data,int* output_data);
bool io_generator_single(bool input_data[parameter_input_bit_width],int which_bit_output); bool io_generator_single(bool* input_data,int which_bit_output);
int io_generator_single_vec(int input_data[parameter_input_bit_width],int which_bit_output); int io_generator_single_vec(int* input_data,int which_bit_output);
int set_random_input_data(bool** mask_input_data); int set_random_input_data(bool** mask_input_data);
int mask_random_input_data(int depth,bool mask[parameter_input_bit_width],int amount,int* most_influence,bool** mask_input_data); int mask_random_input_data(int depth,bool* mask,int amount,int* most_influence,bool** mask_input_data);
int next_bit_layer(int depth,int order_num); int next_bit_layer(int depth,int order_num);
int next_bit_layer_0(int depth); int next_bit_layer_0(int depth);
int next_bit_layer_1(int depth); int next_bit_layer_1(int depth);
...@@ -240,7 +240,7 @@ int BDD_class::BSD_samples_sort_each_layer(){ ...@@ -240,7 +240,7 @@ int BDD_class::BSD_samples_sort_each_layer(){
// return output_bits; // return output_bits;
//}; //};
bool BDD_class::io_generator_single(bool input_data[parameter_input_bit_width],int which_bit_output){ bool BDD_class::io_generator_single(bool* input_data,int which_bit_output){
bool output_bit; bool output_bit;
bool* output_bits = new bool [parameter_output_bit_width]; bool* output_bits = new bool [parameter_output_bit_width];
...@@ -263,7 +263,7 @@ bool BDD_class::io_generator_single(bool input_data[parameter_input_bit_width],i ...@@ -263,7 +263,7 @@ bool BDD_class::io_generator_single(bool input_data[parameter_input_bit_width],i
// return output_bits; // return output_bits;
//}; //};
int BDD_class::io_generator_single_vec(int input_data[parameter_input_bit_width],int which_bit_output){ int BDD_class::io_generator_single_vec(int* input_data,int which_bit_output){
//cout<<"Debug 3"<<endl; //cout<<"Debug 3"<<endl;
int output_bit; int output_bit;
...@@ -981,7 +981,7 @@ int BDD_class::BDD_infer(BDD_node** BDD,int* most_influence){ ...@@ -981,7 +981,7 @@ int BDD_class::BDD_infer(BDD_node** BDD,int* most_influence){
return 0; return 0;
}; };
bool BDD_class::cal_infer_result(bool input_data[parameter_input_bit_width],int which_root_node,bool neg){ bool BDD_class::cal_infer_result(bool* input_data,int which_root_node,bool neg){
bool infer_result = 0; bool infer_result = 0;
int i; int i;
int position = which_root_node; int position = which_root_node;
...@@ -1133,7 +1133,7 @@ int BDD_class::BDD_FULL_PROCESS(){ ...@@ -1133,7 +1133,7 @@ int BDD_class::BDD_FULL_PROCESS(){
max_group = zj ; max_group = zj ;
else else
max_group = zj - 1; max_group = zj - 1;
max_move_length = max(20,int((parameter_input_bit_width/(1+zj))-1)) ; max_move_length = max(20,int((parameter_input_bit_width/(1+zj))-3)) ;
cout<<"######################################################################"<<endl; cout<<"######################################################################"<<endl;
cout<<"Switch Times "<<zj<<endl; cout<<"Switch Times "<<zj<<endl;
...@@ -1148,7 +1148,7 @@ int BDD_class::BDD_FULL_PROCESS(){ ...@@ -1148,7 +1148,7 @@ int BDD_class::BDD_FULL_PROCESS(){
int i = (start_i + si)%total_BDD_depth; int i = (start_i + si)%total_BDD_depth;
cout<<"Switch bit: "<<i<<" "<<endl; cout<<"Switch bit: "<<i<<" "<<endl;
bool optimize=0; bool optimize=0;
int move_length = min(total_BDD_depth-i-max_group-1,max_move_length); int move_length = min(total_BDD_depth-i-max_group-3,max_move_length);
for(int zi=0;zi<=move_length;zi++){ for(int zi=0;zi<=move_length;zi++){
for(int zk=0;zk<=min(max_group,move_length-1);zk++){ for(int zk=0;zk<=min(max_group,move_length-1);zk++){
BSD_switch_layer(i+zi+min(max_group,move_length-1)-zk); BSD_switch_layer(i+zi+min(max_group,move_length-1)-zk);
...@@ -1182,8 +1182,9 @@ int BDD_class::BDD_FULL_PROCESS(){ ...@@ -1182,8 +1182,9 @@ 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); if(circuit_accuracy==1)
delete [] test_input_data; print_circuit(BDD,most_influence);
delete [] test_input_data;
for (int vi=0;vi<parameter_input_bit_width;vi++){ for (int vi=0;vi<parameter_input_bit_width;vi++){
BSD_variable_order[0][vi] = most_influence[vi]; BSD_variable_order[0][vi] = most_influence[vi];
} }
......
...@@ -4,7 +4,7 @@ int BDD_class::next_bit_layer_single(int depth,int which_node_this_layer){ ...@@ -4,7 +4,7 @@ int BDD_class::next_bit_layer_single(int depth,int which_node_this_layer){
int i,j,k; int i,j,k;
int zz; int zz;
int zi; int zi;
bool should_not_be_unfold[parameter_input_bit_width] = {0}; bool* should_not_be_unfold = new bool [parameter_input_bit_width];
for (zz=0;zz<parameter_input_bit_width;zz++){ for (zz=0;zz<parameter_input_bit_width;zz++){
amount_turn[zz] = 0; amount_turn[zz] = 0;
} }
...@@ -17,7 +17,7 @@ int BDD_class::next_bit_layer_single(int depth,int which_node_this_layer){ ...@@ -17,7 +17,7 @@ int BDD_class::next_bit_layer_single(int depth,int which_node_this_layer){
} }
int BSD_samples_influence = 1; int BSD_samples_influence = 1;
int which_node_this_layer_sample = 0; int which_node_this_layer_sample = 0;
int which_node_this_layer_array[BSD_samples_influence]; int* which_node_this_layer_array = new int [BSD_samples_influence];
for (zz=0;zz<10;zz++){ for (zz=0;zz<10;zz++){
if(depth < parameter_multi_output_index){ if(depth < parameter_multi_output_index){
break; break;
...@@ -111,6 +111,8 @@ int BDD_class::next_bit_layer_single(int depth,int which_node_this_layer){ ...@@ -111,6 +111,8 @@ int BDD_class::next_bit_layer_single(int depth,int which_node_this_layer){
} }
delete [] should_not_be_unfold;
delete [] which_node_this_layer_array;
return most_influence_next; return most_influence_next;
}; };
...@@ -151,7 +153,7 @@ int BDD_class::next_bit_layer_1(int depth){ ...@@ -151,7 +153,7 @@ int BDD_class::next_bit_layer_1(int depth){
} }
else{ else{
cout<<"BSD_samples"<<BSD_samples<<endl; cout<<"BSD_samples"<<BSD_samples<<endl;
bool this_bit_most_influence[parameter_input_bit_width] = {0}; bool* this_bit_most_influence = new bool [parameter_input_bit_width];
for(int i=0;i<100;i++){ for(int i=0;i<100;i++){
int which_node_this_layer; int which_node_this_layer;
if(BDD_width_each_layer[depth] < 100){ if(BDD_width_each_layer[depth] < 100){
...@@ -343,7 +345,7 @@ int BDD_class::next_bit_layer_0(int depth){ ...@@ -343,7 +345,7 @@ int BDD_class::next_bit_layer_0(int depth){
int i,j,k; int i,j,k;
int zz; int zz;
int zi; int zi;
bool should_not_be_unfold[parameter_input_bit_width] = {0}; bool* should_not_be_unfold = new bool [parameter_input_bit_width];
random_device rd; random_device rd;
mt19937 gen(rd()); mt19937 gen(rd());
......
...@@ -18,7 +18,7 @@ int BDD_class::set_random_input_data(bool** mask_input_data){ ...@@ -18,7 +18,7 @@ int BDD_class::set_random_input_data(bool** mask_input_data){
} }
return 0; return 0;
}; };
int BDD_class::mask_random_input_data(int depth,bool mask[parameter_input_bit_width],int amount,int* most_influence,bool** mask_input_data){ int BDD_class::mask_random_input_data(int depth,bool* mask,int amount,int* most_influence,bool** mask_input_data){
int i,j; int i,j;
//#pragma omp parallel for //#pragma omp parallel for
for (i=0;i<amount;i++){ for (i=0;i<amount;i++){
......
extern const int parameter_input_bit_width = 33+5; //输入bit有几位,写在+6前面。+6是为了防止一些bug的冗余设计。 #define INPUT_AIG
extern const int parameter_output_bit_width = 25; //输出bit有几位
#include"io_generator/c1908.h" #include"io_generator/c1908.h"
#include "c1908_vec.h" #include "c1908_vec.h"
#define INPUT_AIG
//#include"io_generator_function.h"
int parameter_search_iterations = 400; //最大设计次数 extern const int parameter_input_bit_width = PI_WIDTH + 2 ;
int parameter_test_ios = 1000; //测试要求多少样本 extern const int parameter_output_bit_width = PO_WIDTH ;
extern const int parameter_max_samples = int(parameter_test_ios*10); //BSD每一个节点最多进行多少次采样
//int parameter_input_bit_width = 80+5; //输入bit有几位,写在+6前面。+6是为了防止一些bug的冗余设计。
//int parameter_output_bit_width = 65; //输出bit有几位
//#include"io_generator_tmp.h"
extern const int parameter_search_iterations = 400; //最大设计次数
extern const int parameter_test_ios = 10000; //测试要求多少样本
extern const int parameter_max_samples = int(parameter_test_ios*1); //BSD每一个节点最多进行多少次采样
bool* io_generator_function(bool input_data[parameter_input_bit_width], bool* output_data) { bool* io_generator_function(bool* input_data, bool* output_data) {
int i,j; int i,j;
...@@ -26,7 +35,7 @@ bool* io_generator_function(bool input_data[parameter_input_bit_width], bool* ou ...@@ -26,7 +35,7 @@ bool* io_generator_function(bool input_data[parameter_input_bit_width], bool* ou
} }
#ifdef INPUT_AIG #ifdef INPUT_AIG
int* io_generator_function_vec(int input_data[parameter_input_bit_width], int* output_data) { int* io_generator_function_vec(int* input_data, int* output_data) {
int i,j; int i,j;
......
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