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;
//电路的parameter Circuit_parameter
int circuit_index = 9999; //电路编号
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; //测试要求多少样本
//算法的parameter Algorithm_parameter
......@@ -66,7 +66,7 @@ int main(int argc,char* argv[]){
if(argc>=3){
which_demo_function = atoi(argv[2]);
}else{
which_demo_function = 20;
which_demo_function = 22;
}
DIR* output_dir;
output_dir = opendir("rtl/");
......@@ -102,7 +102,7 @@ int main(int argc,char* argv[]){
BDD_class_main.BDD_id = 0;
GLOBAL_BDD_id_number += 1;
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.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++){
......
......@@ -75,9 +75,9 @@ public:
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 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 cal_most_influence_next_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(int depth,BDD_node** BDD,int* most_influence);
int next_bit_layer_old(int depth,BDD_node** BDD,int* most_influence);
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_neg(int list_line_amount,bool* this_line,bool** simplify_list);
......@@ -119,7 +119,7 @@ public:
bool* left_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_start_node_numbers;
int** partition_index;
......@@ -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* 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;
return output_bits;
};
......@@ -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;
}
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;
cout<<BSD_samples<<endl;
......@@ -486,7 +486,7 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
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)){
all_one_left = 1;
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 i,j,k;
......@@ -113,20 +113,21 @@ int BDD_class::cal_most_influence_next_single(int depth,BDD_node** BDD,int* most
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;
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_next = most_influence_all[depth];
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 = ;
//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;
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){
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;
......@@ -147,7 +148,7 @@ int BDD_class::cal_most_influence_next(int depth,BDD_node** BDD,int* most_influe
else{
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;
}
int i = depth;
......@@ -321,7 +322,7 @@ int BDD_class::cal_most_influence_next(int depth,BDD_node** BDD,int* most_influe
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 i,j,k;
......@@ -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_sample = 0;
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++){
int which_node_this_layer = gen()%BDD_width_each_layer[depth];
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