Commit 7889538b by chengshuyao

Add vector mode for AIGs

parent 6751fa64
...@@ -32,7 +32,7 @@ using namespace std; ...@@ -32,7 +32,7 @@ using namespace std;
//电路的parameter Circuit_parameter //电路的parameter Circuit_parameter
int circuit_index = 9999; //电路编号 int circuit_index = 9999; //电路编号
extern const int parameter_max_orders = 8; extern const int parameter_max_orders = 8;
......
...@@ -74,7 +74,9 @@ public: ...@@ -74,7 +74,9 @@ public:
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[parameter_input_bit_width],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[parameter_input_bit_width],bool* output_data);
int* io_generator_vec(int input_data[parameter_input_bit_width],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[parameter_input_bit_width],int which_bit_output);
int io_generator_single_vec(int 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 next_bit_layer(int depth,int order_num); int next_bit_layer(int depth,int order_num);
...@@ -197,7 +199,15 @@ int BDD_class::BSD_samples_sort_each_layer(){ ...@@ -197,7 +199,15 @@ 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,which_demo_function,output_bits); output_bits = io_generator_function(input_data,output_bits);
//io_read_times += 1;
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; //io_read_times += 1;
return output_bits; return output_bits;
}; };
...@@ -206,12 +216,26 @@ bool BDD_class::io_generator_single(bool input_data[parameter_input_bit_width],i ...@@ -206,12 +216,26 @@ bool BDD_class::io_generator_single(bool input_data[parameter_input_bit_width],i
bool output_bit; bool output_bit;
bool* output_bits = new bool [100]; bool* output_bits = new bool [100];
output_bits = io_generator(input_data,output_bits); output_bits = io_generator_function(input_data,output_bits);
output_bit = output_bits[which_bit_output] ;
delete [] output_bits;
return output_bit;
};
int BDD_class::io_generator_single_vec(int input_data[parameter_input_bit_width],int which_bit_output){
//cout<<"Debug 3"<<endl;
int output_bit;
//cout<<"Debug 3"<<endl;
int* output_bits = new int [100];
//cout<<"Debug 3"<<endl;
output_bits = io_generator_function_vec(input_data,output_bits);
output_bit = output_bits[which_bit_output] ; output_bit = output_bits[which_bit_output] ;
//cout<<"which bit output "<<which_bit_output<<" "<<hex<<output_bit<<endl;
delete [] output_bits; delete [] output_bits;
return output_bit; return output_bit;
}; };
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){
int i,j; int i,j;
...@@ -433,33 +457,114 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int ...@@ -433,33 +457,114 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
BSD_samples = BSD_samples_sort; BSD_samples = BSD_samples_sort;
most_influence[i] = next_bit_layer(i,order_num); most_influence[i] = next_bit_layer(i,order_num);
BSD_samples = BSD_samples_train; BSD_samples = int(BSD_samples_train/31)*31;
cout<<BSD_samples<<endl; cout<<BSD_samples<<endl;
cout<<"The BSD is on layer: "<<i<<" "; cout<<"The BSD is on layer: "<<i<<" ";
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
// 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;
#pragma omp parallel for #pragma omp parallel for
for(long zj=0;zj<BDD_width_each_layer[i]*BSD_samples;zj++){ for(long zk=0;zk<int(BDD_width_each_layer[i]*int(BSD_samples/vec_length));zk++){
int j = int(zj/BSD_samples); bool** vec_input_left = new bool* [parameter_input_bit_width];
int zi = int(zj%BSD_samples); bool** vec_input_right = new bool* [parameter_input_bit_width];
bool mask_input_data_left [parameter_input_bit_width]; for(int kk=0;kk<parameter_input_bit_width;kk++){
bool mask_input_data_right[parameter_input_bit_width]; vec_input_left[kk] = new bool [32];
for (int jj=0;jj<parameter_input_bit_width;jj++){ vec_input_right[kk] = new bool [32];
mask_input_data_left [jj] = mask_input_data[zi][jj]; }
mask_input_data_right[jj] = mask_input_data[zi][jj]; int* vec_input_left_int = new int [parameter_input_bit_width];
} int* vec_input_right_int = new int [parameter_input_bit_width];
for (int jj=0;jj<i;jj++){ int j = int(vec_length*zk/BSD_samples);
mask_input_data_left [most_influence[jj]] = BDD_mask_this[j].mask[most_influence[jj]]; for(int kk=0;kk<32;kk++){
mask_input_data_right[most_influence[jj]] = BDD_mask_this[j].mask[most_influence[jj]]; if(kk<vec_length){
long zj= vec_length*zk+kk;
int zi = int(zj%BSD_samples);
for (int jj=0;jj<parameter_input_bit_width;jj++){
vec_input_left [jj][kk] = mask_input_data[zi][jj];
vec_input_right[jj][kk] = mask_input_data[zi][jj];
}
for (int jj=0;jj<i;jj++){
vec_input_left [most_influence[jj]][kk] = BDD_mask_this[j].mask[most_influence[jj]];
vec_input_right[most_influence[jj]][kk] = BDD_mask_this[j].mask[most_influence[jj]];
}
vec_input_left [most_influence[i]][kk] = 0;
vec_input_right[most_influence[i]][kk] = 1;
}else{
for (int jj=0;jj<parameter_input_bit_width;jj++){
vec_input_left [jj][kk] = 0;
vec_input_right[jj][kk] = 0;
}
} }
mask_input_data_left [most_influence[i]] = 0; // cout<<vec_input_left[0][kk];
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); // cout<<" ";
bool right_mask_output_data_b = io_generator_single(mask_input_data_right,BDD[i][j].which_bit_output); //cout<<"Debug 0"<<endl;
right_mask_output_data_all[zj] = right_mask_output_data_b; for(int kk=0;kk<parameter_input_bit_width;kk++){
left_mask_output_data_all [zj] = left_mask_output_data_b; vec_input_left_int[kk] = cvt_bit_to_number(vec_input_left[kk],vec_length);
vec_input_right_int[kk] = cvt_bit_to_number(vec_input_right[kk],vec_length);
}
// cout<<hex<<vec_input_left_int[0]<<" input"<<endl;
//cout<<"Debug 1"<<endl;
int vec_output_left_int ;
int vec_output_right_int ;
vec_output_left_int = io_generator_single_vec(vec_input_left_int ,BDD[i][j].which_bit_output);
vec_output_right_int = io_generator_single_vec(vec_input_right_int,BDD[i][j].which_bit_output);
//cout<<"Debug 2"<<endl;
bool* vec_output_left = new bool [32];
bool* vec_output_right = new bool [32];
// cout<<"output "<<hex<<vec_output_left_int<<" ";
cvt_number_to_bit(vec_output_left,vec_output_left_int,32);
cvt_number_to_bit(vec_output_right,vec_output_right_int,32);
// for(int kk=0;kk<32;kk++){
// cout<<vec_output_left[31-kk];
// }
// cout<<endl;
for(int kk=0;kk<vec_length;kk++){
long zj= vec_length*zk+kk;
int j = int(zj/BSD_samples);
int zi = int(zj%BSD_samples);
right_mask_output_data_all[zj] = vec_output_right[31-kk];
left_mask_output_data_all [zj] = vec_output_left [31-kk];
//bool* test_vec_input_right = new bool [parameter_input_bit_width];
//bool* test_vec_input_left = new bool [parameter_input_bit_width];
//for(int jj=0;jj<parameter_input_bit_width;jj++){
// test_vec_input_right[jj] = vec_input_right[jj][kk] ;
// test_vec_input_left[jj] = vec_input_left [jj][kk] ;
//}
//right_mask_output_data_all[zj] = io_generator_single(test_vec_input_right,BDD[i][j].which_bit_output);
//left_mask_output_data_all[zj] = io_generator_single(test_vec_input_left, BDD[i][j].which_bit_output);
}
for(int kk=0;kk<parameter_input_bit_width;kk++){
delete [] vec_input_left[kk] ;
delete [] vec_input_right[kk] ;
}
delete [] vec_input_left ;
delete [] vec_input_right ;
delete [] vec_output_left ;
delete [] vec_output_right;
} }
for(int j=0;j<BDD_width_each_layer[i];j++){ for(int j=0;j<BDD_width_each_layer[i];j++){
...@@ -770,7 +875,7 @@ int BDD_class::BDD_infer(BDD_node** BDD,int* most_influence){ ...@@ -770,7 +875,7 @@ int BDD_class::BDD_infer(BDD_node** BDD,int* most_influence){
//#pragma omp parallel for //#pragma omp parallel for
for(long zj=0;zj<how_many_start_nodes*parameter_test_ios;zj++){ for(long zj=0;zj<how_many_start_nodes*parameter_test_ios;zj++){
int test_bit = int(zj/parameter_test_ios); int test_bit = int(zj/parameter_test_ios);
bool test_input_data [parameter_input_bit_width]; bool* test_input_data = new bool [parameter_input_bit_width];
bool test_output_data; bool test_output_data;
bool infer_output_data; bool infer_output_data;
for (int j=0;j<parameter_input_bit_width;j++){ for (int j=0;j<parameter_input_bit_width;j++){
...@@ -789,6 +894,7 @@ int BDD_class::BDD_infer(BDD_node** BDD,int* most_influence){ ...@@ -789,6 +894,7 @@ int BDD_class::BDD_infer(BDD_node** BDD,int* most_influence){
test_output_data = io_generator_single(test_input_data,BDD[start_depth][test_bit].which_bit_output); test_output_data = io_generator_single(test_input_data,BDD[start_depth][test_bit].which_bit_output);
infer_output_data = cal_infer_result(test_input_data,test_bit,0); infer_output_data = cal_infer_result(test_input_data,test_bit,0);
error_all[zj] = (test_output_data != infer_output_data); error_all[zj] = (test_output_data != infer_output_data);
delete [] test_input_data;
} }
circuit_accuracy_all_bits = new double [how_many_start_nodes]; circuit_accuracy_all_bits = new double [how_many_start_nodes];
for(int test_bit=0;test_bit<how_many_start_nodes;test_bit++){ for(int test_bit=0;test_bit<how_many_start_nodes;test_bit++){
......
void io_generator_outer_vec(int* pi, int* po) {
int n0 = 0;
int n1 = pi[0];
int n2 = pi[1];
int n3 = pi[2];
int n4 = pi[3];
int n5 = pi[4];
int n6 = pi[5];
int n7 = pi[6];
int n8 = pi[7];
int n9 = pi[8];
int n10 = pi[9];
int n11 = pi[10];
int n12 = pi[11];
int n13 = pi[12];
int n14 = pi[13];
int n15 = pi[14];
int n16 = pi[15];
int n17 = pi[16];
int n18 = pi[17];
int n19 = pi[18];
int n20 = pi[19];
int n21 = pi[20];
int n22 = pi[21];
int n23 = pi[22];
int n24 = pi[23];
int n25 = pi[24];
int n26 = pi[25];
int n27 = pi[26];
int n28 = pi[27];
int n29 = pi[28];
int n30 = pi[29];
int n31 = pi[30];
int n32 = pi[31];
int n33 = pi[32];
int n34 = n33 & ~n3;
int n35 = n25 & n23;
int n36 = ~n35 & n34;
int n37 = n32 & ~n30;
int n38 = n37 & n3;
int n39 = n38 & ~n35;
int n40 = ~n39 & ~n36;
int n41 = ~n7 & ~n4;
int n42 = n7 & n4;
int n43 = ~n42 & ~n41;
int n44 = n43 & ~n13;
int n45 = ~n43 & n13;
int n46 = ~n45 & ~n44;
int n47 = ~n25 & n18;
int n48 = n47 & ~n3;
int n49 = n48 & ~n15;
int n50 = ~n48 & n15;
int n51 = ~n50 & ~n49;
int n52 = ~n51 & n10;
int n53 = n51 & ~n10;
int n54 = ~n53 & ~n52;
int n55 = ~n14 & ~n8;
int n56 = n14 & n8;
int n57 = ~n56 & ~n55;
int n58 = n57 & ~n16;
int n59 = ~n57 & n16;
int n60 = ~n59 & ~n58;
int n61 = n60 & ~n54;
int n62 = ~n60 & n54;
int n63 = ~n62 & ~n61;
int n64 = ~n63 & ~n46;
int n65 = n63 & n46;
int n66 = ~n65 & ~n64;
int n67 = ~n66 & ~n32;
int n68 = ~n67 & ~n28;
int n69 = n67 & n28;
int n70 = ~n69 & ~n68;
int n71 = n23 & n19;
int n72 = n71 & ~n3;
int n73 = ~n15 & ~n9;
int n74 = n15 & n9;
int n75 = ~n74 & ~n73;
int n76 = ~n75 & ~n11;
int n77 = n75 & n11;
int n78 = ~n77 & ~n76;
int n79 = ~n7 & ~n5;
int n80 = n7 & n5;
int n81 = ~n80 & ~n79;
int n82 = ~n81 & ~n24;
int n83 = n81 & n24;
int n84 = ~n83 & ~n82;
int n85 = ~n84 & ~n78;
int n86 = n84 & n78;
int n87 = ~n86 & ~n85;
int n88 = ~n87 & n72;
int n89 = n87 & ~n72;
int n90 = ~n89 & ~n88;
int n91 = ~n90 & ~n32;
int n92 = ~n91 & ~n29;
int n93 = n91 & n29;
int n94 = ~n93 & ~n92;
int n95 = ~n94 & ~n70;
int n96 = ~n6 & ~n5;
int n97 = n6 & n5;
int n98 = ~n97 & ~n96;
int n99 = ~n98 & ~n4;
int n100 = n98 & n4;
int n101 = ~n100 & ~n99;
int n102 = ~n12 & ~n11;
int n103 = n12 & n11;
int n104 = ~n103 & ~n102;
int n105 = n104 & n10;
int n106 = ~n104 & ~n10;
int n107 = ~n106 & ~n105;
int n108 = ~n16 & ~n15;
int n109 = n16 & n15;
int n110 = ~n109 & ~n108;
int n111 = n110 & ~n9;
int n112 = ~n110 & n9;
int n113 = ~n112 & ~n111;
int n114 = ~n113 & ~n107;
int n115 = n113 & n107;
int n116 = ~n115 & ~n114;
int n117 = ~n116 & ~n101;
int n118 = n116 & n101;
int n119 = ~n118 & ~n117;
int n120 = ~n25 & n17;
int n121 = n120 & ~n3;
int n122 = ~n121 & ~n1;
int n123 = n121 & n1;
int n124 = ~n123 & ~n122;
int n125 = ~n124 & ~n119;
int n126 = n124 & n119;
int n127 = ~n126 & ~n125;
int n128 = ~n127 & ~n32;
int n129 = ~n128 & ~n27;
int n130 = n128 & n27;
int n131 = ~n130 & ~n129;
int n132 = ~n32 & n23;
int n133 = ~n132 & n19;
int n134 = n23 & n20;
int n135 = n134 & ~n3;
int n136 = n135 & ~n12;
int n137 = ~n135 & n12;
int n138 = ~n137 & ~n136;
int n139 = ~n9 & ~n6;
int n140 = n9 & n6;
int n141 = ~n140 & ~n139;
int n142 = ~n141 & ~n2;
int n143 = n141 & n2;
int n144 = ~n143 & ~n142;
int n145 = ~n144 & n60;
int n146 = n144 & ~n60;
int n147 = ~n146 & ~n145;
int n148 = ~n147 & ~n138;
int n149 = n147 & n138;
int n150 = ~n149 & ~n148;
int n151 = ~n150 & ~n32;
int n152 = ~n151 & ~n133;
int n153 = n151 & n133;
int n154 = ~n153 & ~n152;
int n155 = ~n154 & n131;
int n156 = n155 & n95;
int n157 = n156 & ~n40;
int n158 = n22 & ~n3;
int n159 = ~n14 & ~n2;
int n160 = n14 & n2;
int n161 = ~n160 & ~n159;
int n162 = n161 & n158;
int n163 = ~n161 & ~n158;
int n164 = ~n163 & ~n162;
int n165 = ~n24 & ~n13;
int n166 = n24 & n13;
int n167 = ~n166 & ~n165;
int n168 = n167 & ~n1;
int n169 = ~n167 & n1;
int n170 = ~n169 & ~n168;
int n171 = ~n170 & ~n113;
int n172 = n170 & n113;
int n173 = ~n172 & ~n171;
int n174 = n173 & ~n107;
int n175 = ~n173 & n107;
int n176 = ~n175 & ~n174;
int n177 = ~n176 & ~n164;
int n178 = n176 & n164;
int n179 = ~n178 & ~n177;
int n180 = ~n179 & ~n32;
int n181 = ~n180 & ~n26;
int n182 = n180 & n26;
int n183 = ~n182 & ~n181;
int n184 = ~n132 & n20;
int n185 = ~n184 & n183;
int n186 = ~n32 & ~n25;
int n187 = ~n186 & n17;
int n188 = ~n7 & ~n2;
int n189 = n7 & n2;
int n190 = ~n189 & ~n188;
int n191 = ~n170 & ~n101;
int n192 = n170 & n101;
int n193 = ~n192 & ~n191;
int n194 = ~n193 & n190;
int n195 = n193 & ~n190;
int n196 = ~n195 & ~n194;
int n197 = n21 & ~n3;
int n198 = ~n113 & ~n8;
int n199 = n113 & n8;
int n200 = ~n199 & ~n198;
int n201 = ~n200 & ~n197;
int n202 = n200 & n197;
int n203 = ~n202 & ~n201;
int n204 = ~n203 & ~n196;
int n205 = n203 & n196;
int n206 = ~n205 & ~n204;
int n207 = ~n206 & ~n32;
int n208 = ~n207 & ~n187;
int n209 = n207 & n187;
int n210 = ~n209 & ~n208;
int n211 = ~n186 & n18;
int n212 = ~n211 & n210;
int n213 = n212 & n185;
int n214 = n213 & n157;
int n215 = ~n214 & ~n1;
int n216 = n214 & n1;
int n217 = ~n216 & ~n215;
int n218 = ~n67 & ~n28;
int n219 = n67 & n28;
int n220 = ~n219 & ~n218;
int n221 = n220 & ~n94;
int n222 = ~n128 & ~n27;
int n223 = n128 & n27;
int n224 = ~n223 & ~n222;
int n225 = ~n224 & ~n154;
int n226 = n225 & n221;
int n227 = n226 & ~n40;
int n228 = n227 & n213;
int n229 = ~n228 & ~n13;
int n230 = n228 & n13;
int n231 = ~n230 & ~n229;
int n232 = n94 & ~n70;
int n233 = n232 & n225;
int n234 = n233 & ~n40;
int n235 = n234 & n213;
int n236 = ~n235 & ~n24;
int n237 = n235 & n24;
int n238 = ~n237 & ~n236;
int n239 = ~n224 & n154;
int n240 = n239 & n95;
int n241 = n240 & ~n40;
int n242 = n241 & n213;
int n243 = ~n242 & ~n2;
int n244 = n242 & n2;
int n245 = ~n244 & ~n243;
int n246 = n32 & ~n31;
int n247 = n246 & n3;
int n248 = n247 & ~n35;
int n249 = ~n248 & ~n36;
int n250 = n154 & n131;
int n251 = n250 & n232;
int n252 = n251 & ~n249;
int n253 = n252 & n213;
int n254 = ~n253 & ~n9;
int n255 = n253 & n9;
int n256 = ~n255 & ~n254;
int n257 = n220 & n94;
int n258 = n257 & n155;
int n259 = n258 & ~n249;
int n260 = n259 & n213;
int n261 = ~n260 & ~n15;
int n262 = n260 & n15;
int n263 = ~n262 & ~n261;
int n264 = n250 & n221;
int n265 = n264 & ~n249;
int n266 = n265 & n213;
int n267 = ~n266 & ~n16;
int n268 = n266 & n16;
int n269 = ~n268 & ~n267;
int n270 = n221 & n155;
int n271 = n270 & ~n40;
int n272 = ~n184 & ~n183;
int n273 = n272 & n212;
int n274 = n273 & n271;
int n275 = ~n274 & ~n4;
int n276 = n274 & n4;
int n277 = ~n276 & ~n275;
int n278 = n232 & n155;
int n279 = n278 & ~n40;
int n280 = n279 & n273;
int n281 = ~n280 & ~n5;
int n282 = n280 & n5;
int n283 = ~n282 & ~n281;
int n284 = n250 & n95;
int n285 = n284 & ~n40;
int n286 = n285 & n273;
int n287 = ~n286 & ~n6;
int n288 = n286 & n6;
int n289 = ~n288 & ~n287;
int n290 = n257 & n225;
int n291 = n290 & ~n40;
int n292 = n291 & n273;
int n293 = ~n292 & ~n7;
int n294 = n292 & n7;
int n295 = ~n294 & ~n293;
int n296 = n239 & n221;
int n297 = n296 & ~n249;
int n298 = n297 & n273;
int n299 = ~n298 & ~n8;
int n300 = n298 & n8;
int n301 = ~n300 & ~n299;
int n302 = n270 & ~n249;
int n303 = ~n211 & ~n210;
int n304 = n303 & n185;
int n305 = n304 & n302;
int n306 = ~n305 & ~n10;
int n307 = n305 & n10;
int n308 = ~n307 & ~n306;
int n309 = n278 & ~n249;
int n310 = n309 & n304;
int n311 = ~n310 & ~n11;
int n312 = n310 & n11;
int n313 = ~n312 & ~n311;
int n314 = n284 & ~n249;
int n315 = n314 & n304;
int n316 = ~n315 & ~n12;
int n317 = n315 & n12;
int n318 = ~n317 & ~n316;
int n319 = n304 & n297;
int n320 = ~n319 & ~n14;
int n321 = n319 & n14;
int n322 = ~n321 & ~n320;
int n323 = ~n154 & ~n94;
int n324 = n323 & ~n70;
int n325 = n324 & ~n224;
int n326 = n325 & ~n211;
int n327 = n326 & ~n183;
int n328 = n327 & ~n210;
int n329 = n328 & ~n184;
int n330 = ~n329 & ~n3;
int n331 = n330 & ~n33;
int n332 = n330 & n33;
int n333 = n273 & n250;
int n334 = n333 & n95;
int n335 = n334 & ~n40;
int n336 = n273 & n225;
int n337 = n336 & n257;
int n338 = n337 & ~n40;
int n339 = ~n338 & ~n335;
int n340 = n273 & n155;
int n341 = n340 & n221;
int n342 = n341 & ~n40;
int n343 = n340 & n232;
int n344 = n343 & ~n40;
int n345 = ~n344 & ~n342;
int n346 = n213 & n155;
int n347 = n346 & n95;
int n348 = n347 & ~n40;
int n349 = n225 & n213;
int n350 = n349 & n221;
int n351 = n350 & ~n40;
int n352 = ~n351 & ~n348;
int n353 = n349 & n232;
int n354 = n353 & ~n40;
int n355 = n239 & n213;
int n356 = n355 & n95;
int n357 = n356 & ~n40;
int n358 = ~n357 & ~n354;
int n359 = n358 & n352;
int n360 = n359 & n345;
int n361 = n360 & n339;
int n362 = n361 & n332;
int n363 = n304 & n225;
int n364 = n363 & n95;
int n365 = n364 & n36;
int n366 = n336 & n95;
int n367 = n366 & n36;
int n368 = n346 & n257;
int n369 = n368 & ~n249;
int n370 = n250 & n213;
int n371 = n370 & n221;
int n372 = n371 & ~n249;
int n373 = ~n372 & ~n369;
int n374 = n304 & n250;
int n375 = n374 & n95;
int n376 = n375 & ~n249;
int n377 = n304 & n239;
int n378 = n377 & n221;
int n379 = n378 & ~n249;
int n380 = ~n379 & ~n376;
int n381 = n370 & n232;
int n382 = n381 & ~n249;
int n383 = n273 & n239;
int n384 = n383 & n221;
int n385 = n384 & ~n249;
int n386 = ~n385 & ~n382;
int n387 = n304 & n155;
int n388 = n387 & n221;
int n389 = n388 & ~n249;
int n390 = n387 & n232;
int n391 = n390 & ~n249;
int n392 = ~n391 & ~n389;
int n393 = n392 & n386;
int n394 = n393 & n380;
int n395 = n394 & n373;
int n396 = n395 & ~n367;
int n397 = n396 & ~n365;
int n398 = n397 & n362;
int n399 = n303 & n272;
int n400 = n399 & n225;
int n401 = n400 & n232;
int n402 = n401 & n36;
int n403 = n400 & n221;
int n404 = n403 & n36;
int n405 = n399 & n155;
int n406 = n405 & n95;
int n407 = n406 & n36;
int n408 = ~n407 & ~n404;
int n409 = n408 & ~n402;
int n410 = n409 & n398;
int n411 = n211 & ~n210;
int n412 = n411 & n272;
int n413 = n412 & n225;
int n414 = n413 & n95;
int n415 = n414 & n36;
int n416 = n184 & ~n183;
int n417 = n416 & n303;
int n418 = n417 & n225;
int n419 = n418 & n95;
int n420 = n419 & n36;
int n421 = n399 & n239;
int n422 = n421 & n95;
int n423 = n422 & n36;
int n424 = ~n423 & ~n420;
int n425 = n424 & ~n415;
int n426 = n425 & n410;
int n427 = ~n426 & ~n331;
int n428 = n395 & n361;
int n429 = n32 & n17;
int n430 = n429 & ~n428;
int n431 = n430 & ~n206;
int n432 = ~n430 & n206;
int n433 = ~n432 & ~n431;
int n434 = ~n33 & n3;
int n435 = ~n434 & n433;
int n436 = n32 & n26;
int n437 = n436 & ~n428;
int n438 = ~n437 & ~n179;
int n439 = n437 & n179;
int n440 = ~n439 & ~n438;
int n441 = ~n440 & ~n434;
int n442 = n32 & n28;
int n443 = n442 & ~n428;
int n444 = ~n443 & ~n66;
int n445 = n443 & n66;
int n446 = ~n445 & ~n444;
int n447 = ~n446 & ~n434;
int n448 = n32 & n29;
int n449 = n448 & ~n428;
int n450 = ~n449 & ~n90;
int n451 = n449 & n90;
int n452 = ~n451 & ~n450;
int n453 = ~n452 & ~n434;
int n454 = n32 & n19;
int n455 = n454 & ~n428;
int n456 = ~n455 & ~n150;
int n457 = n455 & n150;
int n458 = ~n457 & ~n456;
int n459 = ~n458 & ~n434;
int n460 = n30 & n21;
int n461 = ~n460 & n3;
int n462 = ~n30 & n3;
int n463 = ~n462 & ~n196;
int n464 = ~n354 & n352;
int n465 = n464 & ~n357;
int n466 = n465 & ~n342;
int n467 = n466 & ~n344;
int n468 = n467 & ~n335;
int n469 = n468 & ~n338;
int n470 = ~n469 & ~n3;
int n471 = ~n470 & n463;
int n472 = n470 & ~n463;
int n473 = ~n472 & ~n471;
int n474 = ~n473 & n461;
int n475 = n473 & ~n461;
int n476 = ~n475 & ~n474;
int n477 = n31 & n22;
int n478 = ~n477 & n3;
int n479 = ~n31 & n3;
int n480 = ~n116 & n57;
int n481 = n116 & ~n57;
int n482 = ~n481 & ~n480;
int n483 = ~n482 & ~n479;
int n484 = ~n389 & n386;
int n485 = n484 & ~n391;
int n486 = n485 & ~n376;
int n487 = n486 & ~n379;
int n488 = n487 & ~n369;
int n489 = n488 & ~n372;
int n490 = ~n489 & ~n3;
int n491 = ~n490 & n483;
int n492 = n490 & ~n483;
int n493 = ~n492 & ~n491;
int n494 = ~n493 & n478;
int n495 = n493 & ~n478;
int n496 = ~n495 & ~n494;
int n497 = n32 & n27;
int n498 = n497 & ~n428;
int n499 = ~n498 & ~n119;
int n500 = n498 & n119;
int n501 = ~n500 & ~n499;
int n502 = ~n501 & ~n124;
int n503 = n501 & n124;
int n504 = ~n503 & ~n502;
int n505 = ~n504 & ~n434;
po[0] = n217;
po[1] = n231;
po[2] = n238;
po[3] = n245;
po[4] = n256;
po[5] = n263;
po[6] = n269;
po[7] = n277;
po[8] = n283;
po[9] = n289;
po[10] = n295;
po[11] = n301;
po[12] = n308;
po[13] = n313;
po[14] = n318;
po[15] = n322;
po[16] = n427;
po[17] = n435;
po[18] = n441;
po[19] = n447;
po[20] = n453;
po[21] = n459;
po[22] = n476;
po[23] = n496;
po[24] = n505;
}
...@@ -2,9 +2,19 @@ src/ ...@@ -2,9 +2,19 @@ src/
The latest version of the BSD Learner. The latest version of the BSD Learner.
1. Use BSD_Learner to design your own circuit. 1. For AIGs, modify and run write_vec.h
Edit top.h: Modify:
Line 1 your own module name.
Execute in the terminal:
bash write_vec.sh
2. Use BSD_Learner to design your own circuit.
Modify top.h:
Line 1: modify input bitwidth; Line 1: modify input bitwidth;
Line 2: modify output bitwidth; Line 2: modify output bitwidth;
......
extern const int parameter_input_bit_width = 33+5; //输入bit有几位,写在+6前面。+6是为了防止一些bug的冗余设计。 extern const int parameter_input_bit_width = 33+5; //输入bit有几位,写在+6前面。+6是为了防止一些bug的冗余设计。
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"io_generator_function.h" #include"c1908_vec.h"
//#include"io_generator_function.h"
int parameter_search_iterations = 1000; //最大设计次数 int parameter_search_iterations = 1000; //最大设计次数
int parameter_test_ios = 100; //测试要求多少样本 int parameter_test_ios = 1024; //测试要求多少样本
extern const int parameter_max_samples = int(parameter_test_ios*20); //BSD每一个节点最多进行多少次采样 extern const int parameter_max_samples = int(parameter_test_ios*16); //BSD每一个节点最多进行多少次采样
bool* io_generator_function(bool input_data[parameter_input_bit_width],int which_demo_function, bool* output_data) { bool* io_generator_function(bool input_data[parameter_input_bit_width], bool* output_data) {
int i,j; int i,j;
...@@ -18,7 +19,23 @@ bool* io_generator_function(bool input_data[parameter_input_bit_width],int which ...@@ -18,7 +19,23 @@ bool* io_generator_function(bool input_data[parameter_input_bit_width],int which
for(i=0;i<parameter_output_bit_width;i++){ for(i=0;i<parameter_output_bit_width;i++){
output_data[i] = output_data_temp[i]; output_data[i] = output_data_temp[i];
} }
delete output_data_temp; delete [] output_data_temp;
return output_data;
}
int* io_generator_function_vec(int input_data[parameter_input_bit_width], int* output_data) {
int i,j;
int* output_data_temp = new int [100];
io_generator_outer_vec(input_data,output_data_temp);
//io_generator_single_function_1(input_data,output_data_temp);
for(i=0;i<parameter_output_bit_width;i++){
output_data[i] = output_data_temp[i];
}
delete [] output_data_temp;
return output_data; return output_data;
} }
module_name="c1908"
vim -c "open io_generator/${module_name}.h" \
-c "1d"\
-c "1d"\
-c ":$"\
-c "d"
cp io_generator/${module_name}.h ${module_name}_vec.h
vim -c "open ${module_name}_vec.h" \
-c "1d" \
-c "1d" \
-c "1,$ s/io_generator_outer/io_generator_outer_vec"
vim -c "open ${module_name}_vec.h" \
-c "1,$ s/vec_vec/vec" \
-c "1,$ s/bool/int/g" \
-c "1,$ s/!/\~/g" \
-c "1,$ s/&&/and/g" \
-c "1,$ s/and/\&/g" \
-c "1,$ s/false/0/g" \
-c "1,$ s/true/-1/g" \
...@@ -2,5 +2,6 @@ export PATH=/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/bin:/lustre ...@@ -2,5 +2,6 @@ export PATH=/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/bin:/lustre
export LIBRARY_PATH=/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/lib export LIBRARY_PATH=/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/lib
export LD_LIBRARY_PATH=/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/lib export LD_LIBRARY_PATH=/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/lib
rm rtl/* rm rtl/*
#bash write_vec.sh
g++ BSD.cpp -O3 -std=c++11 -fopenmp -pg g++ BSD.cpp -O3 -std=c++11 -fopenmp -pg
./a.out ./a.out
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