Commit c37f5e7c by chengshuyao

Debug uint32_t

parent 9218bf8c
...@@ -37,7 +37,7 @@ extern const int parameter_max_orders = 8; ...@@ -37,7 +37,7 @@ 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 = 64; //线程数
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每一层最多多少个节点 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
...@@ -106,6 +106,10 @@ int main(int argc,char* argv[]){ ...@@ -106,6 +106,10 @@ int main(int argc,char* argv[]){
default_partition_set = new bool [parameter_output_bit_width]; default_partition_set = new bool [parameter_output_bit_width];
for(int i=0;i<parameter_output_bit_width;i++) for(int i=0;i<parameter_output_bit_width;i++)
default_partition_set[i] = 1; default_partition_set[i] = 1;
//for(int i=0;i<parameter_output_bit_width;i++)
// default_partition_set[0] = 1;
//io generator来自真值表,不来自写好的文件 //io generator来自真值表,不来自写好的文件
//char* truth_table_name = new char [100]; //char* truth_table_name = new char [100];
//int truth_table_input_width; //int truth_table_input_width;
...@@ -135,6 +139,7 @@ int main(int argc,char* argv[]){ ...@@ -135,6 +139,7 @@ int main(int argc,char* argv[]){
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);
}; };
...@@ -294,10 +299,11 @@ int BSD_execute(int variable_order_number,int** variable_order, int partition_de ...@@ -294,10 +299,11 @@ int BSD_execute(int variable_order_number,int** variable_order, int partition_de
int search_reward(BSD_features BSD_features_0){ int search_reward(BSD_features BSD_features_0){
int reward = (1000000*double(1-BSD_features_0.accuracy)); int reward = (1000000*double(1-BSD_features_0.accuracy));
if(BSD_features_0.accuracy <1)
reward += 1000*(parameter_input_bit_width-BSD_features_0.BSD_depth);
reward += BSD_features_0.BSD_area; reward += BSD_features_0.BSD_area;
if(BSD_features_0.accuracy <1)
reward = int(1.2*reward);
cout<<"BSD accuracy: "<< BSD_features_0.accuracy <<endl;
cout<<"BSD area: "<< BSD_features_0.BSD_area <<endl;
//reward += int(BSD_features_0.feature_area/100) ; //reward += int(BSD_features_0.feature_area/100) ;
return reward; return reward;
...@@ -449,6 +455,7 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -449,6 +455,7 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
int vv = order_num; int vv = order_num;
if(i<parameter_max_orders){ if(i<parameter_max_orders){
vv=0; vv=0;
}else if (i==search_iterations){
} }
else{ else{
best_area_depth = best_area_depths[vv]; best_area_depth = best_area_depths[vv];
...@@ -646,7 +653,7 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -646,7 +653,7 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
parameter_early_stop_split_nodes = int(best_reward_max*4); parameter_early_stop_split_nodes = int(best_reward_max*4);
if((i>=10) && (best_reward_max < 1.001*best_reward)) if((i>=10) && (best_reward_max < 1.005*best_reward))
break; break;
} }
...@@ -683,16 +690,16 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde ...@@ -683,16 +690,16 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
//area = BSD_execute(parameter_input_bit_width,best_variable_order,10000,best_partition_parts,best_order_num,output_partition_set); //area = BSD_execute(parameter_input_bit_width,best_variable_order,10000,best_partition_parts,best_order_num,output_partition_set);
delete [] best_BDD_split_nodes ; // delete [] best_BDD_split_nodes ;
delete [] best_areas ; // delete [] best_areas ;
delete [] best_rewards ; // delete [] best_rewards ;
delete [] best_area_depths; // delete [] best_area_depths;
for (int vi=0;vi<parameter_max_orders;vi++){ // for (int vi=0;vi<parameter_max_orders;vi++){
delete [] variable_order[vi]; // delete [] variable_order[vi];
delete [] best_variable_order[vi]; // delete [] best_variable_order[vi];
} // }
delete [] variable_order; // delete [] variable_order;
delete [] best_variable_order; // delete [] best_variable_order;
return area; return area;
}; };
...@@ -83,9 +83,9 @@ public: ...@@ -83,9 +83,9 @@ public:
bool ** simplify_list ; bool ** simplify_list ;
bool cal_infer_result(bool* input_data,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,bool* output_data); bool* io_generator(bool* input_data,bool* output_data);
int* io_generator_vec(int* input_data,int* output_data); uint32_t* io_generator_vec(uint32_t* input_data,int* output_data);
bool io_generator_single(bool* input_data,int which_bit_output); bool io_generator_single(bool* input_data,int which_bit_output);
int io_generator_single_vec(int* input_data,int which_bit_output); uint32_t io_generator_single_vec(uint32_t* 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,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);
...@@ -216,14 +216,15 @@ public: ...@@ -216,14 +216,15 @@ public:
}; };
int BDD_class::BSD_samples_train_each_layer(){ int BDD_class::BSD_samples_train_each_layer(){
int BSD_samples_train; int BSD_samples_train;
if(total_finish_weight/(pow(2.0,20)*how_many_start_nodes) > 0.9999999999){ if(total_finish_weight/((pow(2.0,20)*how_many_start_nodes)) > 0.9999999999){
BSD_samples_train = 10; BSD_samples_train = 10;
if(total_finish_weight/(pow(2.0,20)*how_many_start_nodes) > 1){ if(total_finish_weight/((pow(2.0,20)*how_many_start_nodes)) > 1){
BSD_samples_train = 2; BSD_samples_train = 2;
} }
}else{ }else{
BSD_samples_train = max(4,min(int(total_sample_max * (1-total_finish_weight/(pow(2.0,20)*how_many_start_nodes))),parameter_max_samples)); BSD_samples_train = max(4,min(int(total_sample_max * (1-total_finish_weight/(pow(2.0,20)*how_many_start_nodes))),parameter_max_samples));
} }
cout<<"BSD train samples: "<<BSD_samples_train<<endl;
return BSD_samples_train; return BSD_samples_train;
} }
int BDD_class::BSD_samples_sort_each_layer(){ int BDD_class::BSD_samples_sort_each_layer(){
...@@ -263,12 +264,12 @@ bool BDD_class::io_generator_single(bool* input_data,int which_bit_output){ ...@@ -263,12 +264,12 @@ bool BDD_class::io_generator_single(bool* input_data,int which_bit_output){
// return output_bits; // return output_bits;
//}; //};
int BDD_class::io_generator_single_vec(int* input_data,int which_bit_output){ uint32_t BDD_class::io_generator_single_vec(uint32_t* input_data,int which_bit_output){
//cout<<"Debug 3"<<endl; //cout<<"Debug 3"<<endl;
int output_bit; uint32_t output_bit;
//cout<<"Debug 3"<<endl; //cout<<"Debug 3"<<endl;
int* output_bits = new int [parameter_output_bit_width]; uint32_t* output_bits = new uint32_t [parameter_output_bit_width];
//cout<<"Debug 3"<<endl; //cout<<"Debug 3"<<endl;
output_bits = io_generator_function_vec(input_data,output_bits); output_bits = io_generator_function_vec(input_data,output_bits);
if (output_partition_set[which_bit_output]==1) if (output_partition_set[which_bit_output]==1)
...@@ -518,8 +519,8 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int ...@@ -518,8 +519,8 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
vec_input_left[kk] = new bool [32]; vec_input_left[kk] = new bool [32];
vec_input_right[kk] = new bool [32]; vec_input_right[kk] = new bool [32];
} }
int* vec_input_left_int = new int [parameter_input_bit_width]; uint32_t* vec_input_left_int = new uint32_t [parameter_input_bit_width];
int* vec_input_right_int = new int [parameter_input_bit_width]; uint32_t* vec_input_right_int = new uint32_t [parameter_input_bit_width];
int j = int(vec_length*zk/BSD_samples); int j = int(vec_length*zk/BSD_samples);
for(int kk=0;kk<32;kk++){ for(int kk=0;kk<32;kk++){
if(kk<vec_length){ if(kk<vec_length){
...@@ -546,21 +547,21 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int ...@@ -546,21 +547,21 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
// cout<<" "; // cout<<" ";
//cout<<"Debug 0"<<endl; //cout<<"Debug 0"<<endl;
for(int kk=0;kk<parameter_input_bit_width;kk++){ for(int kk=0;kk<parameter_input_bit_width;kk++){
vec_input_left_int[kk] = cvt_bit_to_number(vec_input_left[kk],vec_length); vec_input_left_int[kk] = cvt_bit_to_number_unsigned(vec_input_left[kk],32);
vec_input_right_int[kk] = cvt_bit_to_number(vec_input_right[kk],vec_length); vec_input_right_int[kk] = cvt_bit_to_number_unsigned(vec_input_right[kk],32);
} }
// cout<<hex<<vec_input_left_int[0]<<" input"<<endl; // cout<<hex<<vec_input_left_int[0]<<" input"<<endl;
//cout<<"Debug 1"<<endl; //cout<<"Debug 1"<<endl;
int vec_output_left_int ; uint32_t vec_output_left_int ;
int vec_output_right_int ; uint32_t vec_output_right_int ;
vec_output_left_int = io_generator_single_vec(vec_input_left_int ,BDD[i][j].which_bit_output); 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); vec_output_right_int = io_generator_single_vec(vec_input_right_int,BDD[i][j].which_bit_output);
//cout<<"Debug 2"<<endl; //cout<<"Debug 2"<<endl;
bool* vec_output_left = new bool [32]; bool* vec_output_left = new bool [32];
bool* vec_output_right = new bool [32]; bool* vec_output_right = new bool [32];
// cout<<"output "<<hex<<vec_output_left_int<<" "; // cout<<"output "<<hex<<vec_output_left_int<<" ";
cvt_number_to_bit(vec_output_left,vec_output_left_int,32); cvt_number_to_bit_unsigned(vec_output_left,vec_output_left_int,32);
cvt_number_to_bit(vec_output_right,vec_output_right_int,32); cvt_number_to_bit_unsigned(vec_output_right,vec_output_right_int,32);
// for(int kk=0;kk<32;kk++){ // for(int kk=0;kk<32;kk++){
// cout<<vec_output_left[31-kk]; // cout<<vec_output_left[31-kk];
// } // }
...@@ -571,8 +572,8 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int ...@@ -571,8 +572,8 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
long zj= vec_length*zk+kk; long zj= vec_length*zk+kk;
int j = int(zj/BSD_samples); int j = int(zj/BSD_samples);
int zi = int(zj%BSD_samples); int zi = int(zj%BSD_samples);
right_mask_output_data_all[zj] = vec_output_right[31-kk]; right_mask_output_data_all[zj] = vec_output_right[kk];
left_mask_output_data_all [zj] = vec_output_left [31-kk]; left_mask_output_data_all [zj] = vec_output_left [kk];
//bool* test_vec_input_right = new bool [parameter_input_bit_width]; //bool* test_vec_input_right = new bool [parameter_input_bit_width];
//bool* test_vec_input_left = 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++){ //for(int jj=0;jj<parameter_input_bit_width;jj++){
...@@ -1172,6 +1173,8 @@ int BDD_class::BDD_FULL_PROCESS(){ ...@@ -1172,6 +1173,8 @@ int BDD_class::BDD_FULL_PROCESS(){
} }
if((optimize_time < 2) && (zj>4)) if((optimize_time < 2) && (zj>4))
break; break;
if((optimize_time > 10) )
zj-=1;
} }
} }
gettimeofday(&switch_finish_time,NULL); gettimeofday(&switch_finish_time,NULL);
......
...@@ -96,7 +96,7 @@ int cvt_bit_to_number(bool input_data[], int k){ ...@@ -96,7 +96,7 @@ int cvt_bit_to_number(bool input_data[], int k){
// return output_bits; // return output_bits;
//}; //};
long cvt_bit_to_number_unsigned(bool input_data[], int k){ uint32_t cvt_bit_to_number_unsigned(bool input_data[], int k){
uint32_t output_number = 0; uint32_t output_number = 0;
int i; int i;
......
...@@ -5,7 +5,7 @@ int BDD_class::print_circuit(BDD_node** BDD,int* most_influence){ ...@@ -5,7 +5,7 @@ int BDD_class::print_circuit(BDD_node** BDD,int* most_influence){
char output_file_name[100]; char output_file_name[100];
//sprintf(output_file_name,"rtl/module_output_bit_%d.v",which_bit_output); //sprintf(output_file_name,"rtl/module_output_bit_%d.v",which_bit_output);
sprintf(output_file_name,"rtl/function_%d.v",circuit_index); sprintf(output_file_name,"rtl/function_%d_id_%d.v",circuit_index,BDD_id);
// string output_file_name << output_file_name_begin << which_bit_output << output_file_name_end; // string output_file_name << output_file_name_begin << which_bit_output << output_file_name_end;
...@@ -140,8 +140,10 @@ int BDD_class::print_circuit(BDD_node** BDD,int* most_influence){ ...@@ -140,8 +140,10 @@ int BDD_class::print_circuit(BDD_node** BDD,int* most_influence){
if(partition_depth == total_BDD_depth){ if(partition_depth == total_BDD_depth){
for (i=0;i<total_BDD_depth+1;i++){ for (i=0;i<total_BDD_depth+1;i++){
output_module_file << "wire ["<<setw(6)<<BDD_width_each_layer[i]-1<<":0] l_"<<i<<";"<<endl; if(BDD_width_each_layer[i]>0)
output_module_file << "wire ["<<setw(6)<<BDD_width_each_layer[i]-1<<":0] l_"<<i<<";"<<endl;
} }
cout<<endl; cout<<endl;
for (i=0;i<partition_into_how_many_parts;i++){ for (i=0;i<partition_into_how_many_parts;i++){
output_module_file << "wire ["<<setw(6)<<partition_start_node_numbers[i]-1<<":0] part_"<<i<<";"<<endl; output_module_file << "wire ["<<setw(6)<<partition_start_node_numbers[i]-1<<":0] part_"<<i<<";"<<endl;
...@@ -213,9 +215,13 @@ if(partition_depth == total_BDD_depth){ ...@@ -213,9 +215,13 @@ if(partition_depth == total_BDD_depth){
for (i=0;i<BDD_width_each_layer[total_BDD_depth];i++){ for (i=0;i<BDD_width_each_layer[total_BDD_depth];i++){
output_module_file << "assign l_"<<total_BDD_depth<<"["<<setw(6)<<i<<"] = part_"<<BDD[total_BDD_depth][i].switch_to_which_BDD<<"["<<setw(6)<<BDD[total_BDD_depth][i].switch_to_which_node<<"];"<<endl; output_module_file << "assign l_"<<total_BDD_depth<<"["<<setw(6)<<i<<"] = part_"<<BDD[total_BDD_depth][i].switch_to_which_BDD<<"["<<setw(6)<<BDD[total_BDD_depth][i].switch_to_which_node<<"];"<<endl;
} }
}else{ }
else{
for (i=0;i<total_BDD_depth+1;i++){ for (i=0;i<total_BDD_depth+1;i++){
output_module_file << "wire ["<<setw(6)<<BDD_width_each_layer[i]-1<<":0] l_"<<i<<";"<<endl; if(BDD_width_each_layer[i]>0)
output_module_file << "wire ["<<setw(6)<<BDD_width_each_layer[i]-1<<":0] l_"<<i<<";"<<endl;
} }
output_module_file <<endl<< "assign o ["<<setw(6)<<how_many_start_nodes-1<<":0] = l_0["<<setw(6)<<how_many_start_nodes-1<<":0];"<<endl<<endl; output_module_file <<endl<< "assign o ["<<setw(6)<<how_many_start_nodes-1<<":0] = l_0["<<setw(6)<<how_many_start_nodes-1<<":0];"<<endl<<endl;
for (i=0;i<total_BDD_depth+1;i++){ for (i=0;i<total_BDD_depth+1;i++){
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
extern const int parameter_input_bit_width = PI_WIDTH + 5 ; extern const int parameter_input_bit_width = PI_WIDTH + 5 ;
extern const int parameter_output_bit_width = PO_WIDTH ; extern const int parameter_output_bit_width = PO_WIDTH ;
extern const int parameter_train_output_bit_width = 1 ;
//int parameter_input_bit_width = 80+5; //输入bit有几位,写在+6前面。+6是为了防止一些bug的冗余设计。 //int parameter_input_bit_width = 80+5; //输入bit有几位,写在+6前面。+6是为了防止一些bug的冗余设计。
...@@ -15,8 +16,8 @@ extern const int parameter_output_bit_width = PO_WIDTH ; ...@@ -15,8 +16,8 @@ extern const int parameter_output_bit_width = PO_WIDTH ;
//#include"io_generator_tmp.h" //#include"io_generator_tmp.h"
extern const int parameter_search_iterations = 400; //最大设计次数 extern const int parameter_search_iterations = 400; //最大设计次数
extern const int parameter_test_ios = 100; //测试要求多少样本 extern const int parameter_test_ios = 1000; //测试要求多少样本
extern const int parameter_max_samples = int(parameter_test_ios*40/32)*32; //BSD每一个节点最多进行多少次采样 extern const int parameter_max_samples = int(parameter_test_ios*10/32)*32; //BSD每一个节点最多进行多少次采样
bool* io_generator_function(bool* input_data, bool* output_data) { bool* io_generator_function(bool* input_data, bool* output_data) {
...@@ -35,11 +36,11 @@ bool* io_generator_function(bool* input_data, bool* output_data) { ...@@ -35,11 +36,11 @@ bool* io_generator_function(bool* input_data, bool* output_data) {
} }
#ifdef INPUT_AIG #ifdef INPUT_AIG
int* io_generator_function_vec(int* input_data, int* output_data) { uint32_t* io_generator_function_vec(uint32_t* input_data, uint32_t* output_data) {
int i,j; int i,j;
int* output_data_temp = new int [parameter_output_bit_width]; uint32_t* output_data_temp = new uint32_t [parameter_output_bit_width];
io_generator_outer_vec(input_data,output_data_temp); io_generator_outer_vec(input_data,output_data_temp);
//io_generator_single_function_1(input_data,output_data_temp); //io_generator_single_function_1(input_data,output_data_temp);
......
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