Commit 4421c624 by chengshuyao

update 20250312

now the default output is 1 bit
now the default partition is off
fix bug gen()
fix bug fault: Line 489
parent 73b264e5
...@@ -22,7 +22,7 @@ using namespace std; ...@@ -22,7 +22,7 @@ using namespace std;
//电路的parameter Circuit_parameter //电路的parameter Circuit_parameter
int circuit_index = 9999; //电路编号 int circuit_index = 9999; //电路编号
extern const int parameter_input_bit_width = 64; //输入bit有几位 extern const int parameter_input_bit_width = 64; //输入bit有几位
extern const int parameter_output_bit_width = 32; //输出bit有几位 extern const int parameter_output_bit_width = 1; //输出bit有几位
int parameter_test_ios = 10000; //测试要求多少样本 int parameter_test_ios = 10000; //测试要求多少样本
//算法的parameter Algorithm_parameter //算法的parameter Algorithm_parameter
...@@ -66,7 +66,7 @@ int main(int argc,char* argv[]){ ...@@ -66,7 +66,7 @@ int main(int argc,char* argv[]){
if(argc>=3){ if(argc>=3){
which_demo_function = atoi(argv[2]); which_demo_function = atoi(argv[2]);
}else{ }else{
which_demo_function = 20; which_demo_function = 22;
} }
DIR* output_dir; DIR* output_dir;
output_dir = opendir("rtl/"); output_dir = opendir("rtl/");
...@@ -102,7 +102,7 @@ int main(int argc,char* argv[]){ ...@@ -102,7 +102,7 @@ int main(int argc,char* argv[]){
BDD_class_main.BDD_id = 0; BDD_class_main.BDD_id = 0;
GLOBAL_BDD_id_number += 1; GLOBAL_BDD_id_number += 1;
BDD_class_main.which_demo_function = which_demo_function; BDD_class_main.which_demo_function = which_demo_function;
BDD_class_main.which_demo_function = 2; BDD_class_main.which_demo_function = 22;
BDD_class_main.how_many_start_nodes = parameter_output_bit_width; BDD_class_main.how_many_start_nodes = parameter_output_bit_width;
BDD_class_main.start_nodes = new BDD_node [BDD_class_main.how_many_start_nodes]; BDD_class_main.start_nodes = new BDD_node [BDD_class_main.how_many_start_nodes];
for(int zi=0;zi<BDD_class_main.how_many_start_nodes;zi++){ for(int zi=0;zi<BDD_class_main.how_many_start_nodes;zi++){
......
...@@ -75,9 +75,9 @@ public: ...@@ -75,9 +75,9 @@ public:
bool io_generator_single(bool input_data[parameter_input_bit_width],int which_bit_output); bool io_generator_single(bool input_data[parameter_input_bit_width],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[parameter_input_bit_width],int amount,int* most_influence,bool** mask_input_data);
int cal_most_influence_next(int depth,BDD_node** BDD,int* most_influence); int next_bit_layer(int depth,BDD_node** BDD,int* most_influence);
int cal_most_influence_next_old(int depth,BDD_node** BDD,int* most_influence); int next_bit_layer_old(int depth,BDD_node** BDD,int* most_influence);
int cal_most_influence_next_single(int depth,BDD_node** BDD,int* most_influence,int which_node_this_layer); int next_bit_layer_single(int depth,BDD_node** BDD,int* most_influence,int which_node_this_layer);
int compare_simplify_list(int list_line_amount,bool* this_line,bool** simplify_list); int compare_simplify_list(int list_line_amount,bool* this_line,bool** simplify_list);
int compare_simplify_list_neg(int list_line_amount,bool* this_line,bool** simplify_list); int compare_simplify_list_neg(int list_line_amount,bool* this_line,bool** simplify_list);
...@@ -119,7 +119,7 @@ public: ...@@ -119,7 +119,7 @@ public:
bool* left_mask_output_data_all ; bool* left_mask_output_data_all ;
bool* right_mask_output_data_all ; bool* right_mask_output_data_all ;
int partition_depth = 10; int partition_depth = 1000;
int partition_into_how_many_parts =2; int partition_into_how_many_parts =2;
int* partition_start_node_numbers; int* partition_start_node_numbers;
int** partition_index; int** partition_index;
...@@ -176,7 +176,7 @@ int BDD_class::BSD_samples_sort_each_layer(){ ...@@ -176,7 +176,7 @@ int BDD_class::BSD_samples_sort_each_layer(){
bool* BDD_class::io_generator(bool input_data[parameter_input_bit_width],bool* output_bits){ bool* BDD_class::io_generator(bool input_data[parameter_input_bit_width],bool* output_bits){
//bool* output_bits = new bool [parameter_output_bit_width]; //bool* output_bits = new bool [parameter_output_bit_width];
output_bits = io_generator_function(input_data,0,1,0,3,output_bits); output_bits = io_generator_function(input_data,22,output_bits);
//io_read_times += 1; //io_read_times += 1;
return output_bits; return output_bits;
}; };
...@@ -391,7 +391,7 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int ...@@ -391,7 +391,7 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
BDD[i+1][zi].non_equal_number = 0; BDD[i+1][zi].non_equal_number = 0;
} }
BSD_samples = BSD_samples_sort; BSD_samples = BSD_samples_sort;
most_influence[i] = cal_most_influence_next(i,BDD,most_influence); most_influence[i] = next_bit_layer(i,BDD,most_influence);
BSD_samples = BSD_samples_train; BSD_samples = BSD_samples_train;
cout<<BSD_samples<<endl; cout<<BSD_samples<<endl;
...@@ -486,7 +486,7 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int ...@@ -486,7 +486,7 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
all_zero_right = 1; all_zero_right = 1;
} }
} }
if((BDD_width_each_layer[i] > parameter_max_BDD_width) ){ if((BDD_width_each_layer[i] > parameter_max_BDD_width/2) ){
if(left_mask_output_data_sum > (BSD_samples/2)){ if(left_mask_output_data_sum > (BSD_samples/2)){
all_one_left = 1; all_one_left = 1;
all_zero_left = 0; all_zero_left = 0;
......
int BDD_class::cal_most_influence_next_single(int depth,BDD_node** BDD,int* most_influence,int which_node_this_layer){ int BDD_class::next_bit_layer_single(int depth,BDD_node** BDD,int* most_influence,int which_node_this_layer){
int most_influence_next=0; int most_influence_next=0;
int i,j,k; int i,j,k;
...@@ -113,20 +113,21 @@ int BDD_class::cal_most_influence_next_single(int depth,BDD_node** BDD,int* most ...@@ -113,20 +113,21 @@ int BDD_class::cal_most_influence_next_single(int depth,BDD_node** BDD,int* most
return most_influence_next; return most_influence_next;
}; };
int BDD_class::cal_most_influence_next(int depth,BDD_node** BDD,int* most_influence){ int BDD_class::next_bit_layer(int depth,BDD_node** BDD,int* most_influence){
random_device rd; random_device rd;
mt19937 gen(rd()); mt19937 gen(rd());
//int most_influence_all[64] ={0,32,1,33,2,34,3,35,4,36,5,37,6,38,7,39,8,40,9,41,10,42,11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,20,52,21,53,22,54,23,55,24,56,25,57,26,58,27,59,28,60,29,61,30,62,31,63}; int most_influence_all[64] ={0,32,1,33,2,34,3,35,4,36,5,37,6,38,7,39,8,40,9,41,10,42,11,43,12,44,13,45,14,46,15,47,16,48,17,49,18,50,19,51,20,52,21,53,22,54,23,55,24,56,25,57,26,58,27,59,28,60,29,61,30,62,31,63};
//int most_influence_next = most_influence_all[depth]; int most_influence_next = most_influence_all[depth];
//int most_influence_next = ; //int most_influence_next = ;
//return most_influence_next; //int most_influence_next=999999;
int most_influence_next=999999; cin>>most_influence_next;
return most_influence_next;
int most_influence_single=0; int most_influence_single=0;
if(depth < 2000){ if(depth < 2000){
most_influence_next = cal_most_influence_next_old(depth,BDD,most_influence); most_influence_next = next_bit_layer_old(depth,BDD,most_influence);
} }
else if(depth==parameter_input_bit_width-1){ else if(depth==parameter_input_bit_width-1){
most_influence_next = cal_most_influence_next_old(depth,BDD,most_influence); most_influence_next = next_bit_layer_old(depth,BDD,most_influence);
return most_influence_next; return most_influence_next;
} }
//return most_influence_next; //return most_influence_next;
...@@ -147,7 +148,7 @@ int BDD_class::cal_most_influence_next(int depth,BDD_node** BDD,int* most_influe ...@@ -147,7 +148,7 @@ int BDD_class::cal_most_influence_next(int depth,BDD_node** BDD,int* most_influe
else{ else{
which_node_this_layer = rand()%BDD_width_each_layer[depth]; which_node_this_layer = rand()%BDD_width_each_layer[depth];
} }
most_influence_single = cal_most_influence_next_single(depth,BDD,most_influence,which_node_this_layer); most_influence_single = next_bit_layer_single(depth,BDD,most_influence,which_node_this_layer);
this_bit_most_influence[most_influence_single] = 1; this_bit_most_influence[most_influence_single] = 1;
} }
int i = depth; int i = depth;
...@@ -321,7 +322,7 @@ int BDD_class::cal_most_influence_next(int depth,BDD_node** BDD,int* most_influe ...@@ -321,7 +322,7 @@ int BDD_class::cal_most_influence_next(int depth,BDD_node** BDD,int* most_influe
return most_influence_next; return most_influence_next;
}; };
int BDD_class::cal_most_influence_next_old(int depth,BDD_node** BDD,int* most_influence){ int BDD_class::next_bit_layer_old(int depth,BDD_node** BDD,int* most_influence){
int most_influence_next=0; int most_influence_next=0;
int i,j,k; int i,j,k;
...@@ -350,7 +351,7 @@ int BDD_class::cal_most_influence_next_old(int depth,BDD_node** BDD,int* most_in ...@@ -350,7 +351,7 @@ int BDD_class::cal_most_influence_next_old(int depth,BDD_node** BDD,int* most_in
int which_node_this_layer = 0; int which_node_this_layer = 0;
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[BSD_samples_influence];
#pragma omp parallel for //#pragma omp parallel for
for (int i=0;i<BSD_samples_influence;i++){ for (int i=0;i<BSD_samples_influence;i++){
int which_node_this_layer = gen()%BDD_width_each_layer[depth]; int which_node_this_layer = gen()%BDD_width_each_layer[depth];
for (j=0;j<parameter_input_bit_width;j++){ for (j=0;j<parameter_input_bit_width;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