Commit 05b122a1 by chengshuyao

set ifdef for AIGs and others

parent 7889538b
...@@ -203,14 +203,6 @@ bool* BDD_class::io_generator(bool input_data[parameter_input_bit_width],bool* o ...@@ -203,14 +203,6 @@ bool* BDD_class::io_generator(bool input_data[parameter_input_bit_width],bool* o
//io_read_times += 1; //io_read_times += 1;
return output_bits; return output_bits;
}; };
int* BDD_class::io_generator_vec(int input_data[parameter_input_bit_width],int* output_bits){
//bool* output_bits = new bool [parameter_output_bit_width];
//cout<<"Debug 4"<<endl;
output_bits = io_generator_function_vec(input_data,output_bits);
//cout<<"Debug 5"<<endl;
//io_read_times += 1;
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[parameter_input_bit_width],int which_bit_output){
...@@ -221,6 +213,16 @@ bool BDD_class::io_generator_single(bool input_data[parameter_input_bit_width],i ...@@ -221,6 +213,16 @@ bool BDD_class::io_generator_single(bool input_data[parameter_input_bit_width],i
delete [] output_bits; delete [] output_bits;
return output_bit; return output_bit;
}; };
#ifdef INPUT_AIG
int* BDD_class::io_generator_vec(int input_data[parameter_input_bit_width],int* output_bits){
//bool* output_bits = new bool [parameter_output_bit_width];
//cout<<"Debug 4"<<endl;
output_bits = io_generator_function_vec(input_data,output_bits);
//cout<<"Debug 5"<<endl;
//io_read_times += 1;
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[parameter_input_bit_width],int which_bit_output){
//cout<<"Debug 3"<<endl; //cout<<"Debug 3"<<endl;
...@@ -234,7 +236,7 @@ int BDD_class::io_generator_single_vec(int input_data[parameter_input_bit_width] ...@@ -234,7 +236,7 @@ int BDD_class::io_generator_single_vec(int input_data[parameter_input_bit_width]
delete [] output_bits; delete [] output_bits;
return output_bit; return output_bit;
}; };
#endif
int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int how_many_start_nodes, BDD_node* start_nodes){ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int how_many_start_nodes, BDD_node* start_nodes){
...@@ -463,28 +465,7 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int ...@@ -463,28 +465,7 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
cout<<"The input bit is: x"<<most_influence[i]<<endl; cout<<"The input bit is: x"<<most_influence[i]<<endl;
cout<<"BSD width at this layer: "<<BDD_width_each_layer[i]<<endl; cout<<"BSD width at this layer: "<<BDD_width_each_layer[i]<<endl;
set_random_input_data(mask_input_data); set_random_input_data(mask_input_data);
// #pragma omp parallel for #ifdef INPUT_AIG
// for(long zj=0;zj<BDD_width_each_layer[i]*BSD_samples;zj++){
// int j = int(zj/BSD_samples);
// int zi = int(zj%BSD_samples);
// bool mask_input_data_left [parameter_input_bit_width];
// bool mask_input_data_right[parameter_input_bit_width];
// for (int jj=0;jj<parameter_input_bit_width;jj++){
// mask_input_data_left [jj] = mask_input_data[zi][jj];
// mask_input_data_right[jj] = mask_input_data[zi][jj];
// }
// for (int jj=0;jj<i;jj++){
// mask_input_data_left [most_influence[jj]] = BDD_mask_this[j].mask[most_influence[jj]];
// mask_input_data_right[most_influence[jj]] = BDD_mask_this[j].mask[most_influence[jj]];
// }
// mask_input_data_left [most_influence[i]] = 0;
// mask_input_data_right[most_influence[i]] = 1;
// bool left_mask_output_data_b = io_generator_single(mask_input_data_left ,BDD[i][j].which_bit_output);
// bool right_mask_output_data_b = io_generator_single(mask_input_data_right,BDD[i][j].which_bit_output);
// right_mask_output_data_all[zj] = right_mask_output_data_b;
// left_mask_output_data_all [zj] = left_mask_output_data_b;
//
// }
int vec_length=31; int vec_length=31;
#pragma omp parallel for #pragma omp parallel for
for(long zk=0;zk<int(BDD_width_each_layer[i]*int(BSD_samples/vec_length));zk++){ for(long zk=0;zk<int(BDD_width_each_layer[i]*int(BSD_samples/vec_length));zk++){
...@@ -567,6 +548,31 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int ...@@ -567,6 +548,31 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
delete [] vec_output_right; delete [] vec_output_right;
} }
#else
#pragma omp parallel for
for(long zj=0;zj<BDD_width_each_layer[i]*BSD_samples;zj++){
int j = int(zj/BSD_samples);
int zi = int(zj%BSD_samples);
bool mask_input_data_left [parameter_input_bit_width];
bool mask_input_data_right[parameter_input_bit_width];
for (int jj=0;jj<parameter_input_bit_width;jj++){
mask_input_data_left [jj] = mask_input_data[zi][jj];
mask_input_data_right[jj] = mask_input_data[zi][jj];
}
for (int jj=0;jj<i;jj++){
mask_input_data_left [most_influence[jj]] = BDD_mask_this[j].mask[most_influence[jj]];
mask_input_data_right[most_influence[jj]] = BDD_mask_this[j].mask[most_influence[jj]];
}
mask_input_data_left [most_influence[i]] = 0;
mask_input_data_right[most_influence[i]] = 1;
bool left_mask_output_data_b = io_generator_single(mask_input_data_left ,BDD[i][j].which_bit_output);
bool right_mask_output_data_b = io_generator_single(mask_input_data_right,BDD[i][j].which_bit_output);
right_mask_output_data_all[zj] = right_mask_output_data_b;
left_mask_output_data_all [zj] = left_mask_output_data_b;
}
#endif
for(int j=0;j<BDD_width_each_layer[i];j++){ for(int j=0;j<BDD_width_each_layer[i];j++){
BDD[i][j].this_layer_bit_expansion = most_influence[i]; BDD[i][j].this_layer_bit_expansion = most_influence[i];
......
...@@ -20,5 +20,5 @@ The latest version of the BSD Learner. ...@@ -20,5 +20,5 @@ The latest version of the BSD Learner.
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.
If it is a AIG, #define INPUT_AIG, otherwise do not define it.
...@@ -2,10 +2,11 @@ extern const int parameter_input_bit_width = 33+5; //输入bit有几位,写在 ...@@ -2,10 +2,11 @@ extern const int parameter_input_bit_width = 33+5; //输入bit有几位,写在
extern const int parameter_output_bit_width = 25 ; //输出bit有几位 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" //#include"io_generator_function.h"
int parameter_search_iterations = 1000; //最大设计次数 int parameter_search_iterations = 1000; //最大设计次数
int parameter_test_ios = 1024; //测试要求多少样本 int parameter_test_ios = 1000; //测试要求多少样本
extern const int parameter_max_samples = int(parameter_test_ios*16); //BSD每一个节点最多进行多少次采样 extern const int parameter_max_samples = int(parameter_test_ios*16); //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) {
...@@ -24,6 +25,7 @@ bool* io_generator_function(bool input_data[parameter_input_bit_width], bool* ou ...@@ -24,6 +25,7 @@ bool* io_generator_function(bool input_data[parameter_input_bit_width], bool* ou
return output_data; return output_data;
} }
#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[parameter_input_bit_width], int* output_data) {
...@@ -39,3 +41,4 @@ int* io_generator_function_vec(int input_data[parameter_input_bit_width], int* o ...@@ -39,3 +41,4 @@ int* io_generator_function_vec(int input_data[parameter_input_bit_width], int* o
return output_data; return output_data;
} }
#endif
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