Commit c37f5e7c by chengshuyao

Debug uint32_t

parent 9218bf8c
......@@ -37,7 +37,7 @@ extern const int parameter_max_orders = 8;
//算法的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_max_BDD_width = 40000; //BSD每一层最多多少个节点
int parameter_early_stop_depth = parameter_input_bit_width; //BSD到第几层终止,输出此时的不准确BSD
......@@ -106,6 +106,10 @@ int main(int argc,char* argv[]){
default_partition_set = new bool [parameter_output_bit_width];
for(int i=0;i<parameter_output_bit_width;i++)
default_partition_set[i] = 1;
//for(int i=0;i<parameter_output_bit_width;i++)
// default_partition_set[0] = 1;
//io generator来自真值表,不来自写好的文件
//char* truth_table_name = new char [100];
//int truth_table_input_width;
......@@ -135,6 +139,7 @@ int main(int argc,char* argv[]){
int* start_order = new int [parameter_input_bit_width];
int area_a = search_order(parameter_search_iterations,default_partition_set,0,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
int search_reward(BSD_features BSD_features_0){
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;
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) ;
return reward;
......@@ -449,6 +455,7 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
int vv = order_num;
if(i<parameter_max_orders){
vv=0;
}else if (i==search_iterations){
}
else{
best_area_depth = best_area_depths[vv];
......@@ -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);
if((i>=10) && (best_reward_max < 1.001*best_reward))
if((i>=10) && (best_reward_max < 1.005*best_reward))
break;
}
......@@ -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);
delete [] best_BDD_split_nodes ;
delete [] best_areas ;
delete [] best_rewards ;
delete [] best_area_depths;
for (int vi=0;vi<parameter_max_orders;vi++){
delete [] variable_order[vi];
delete [] best_variable_order[vi];
}
delete [] variable_order;
delete [] best_variable_order;
// delete [] best_BDD_split_nodes ;
// delete [] best_areas ;
// delete [] best_rewards ;
// delete [] best_area_depths;
// for (int vi=0;vi<parameter_max_orders;vi++){
// delete [] variable_order[vi];
// delete [] best_variable_order[vi];
// }
// delete [] variable_order;
// delete [] best_variable_order;
return area;
};
......@@ -83,9 +83,9 @@ public:
bool ** simplify_list ;
bool cal_infer_result(bool* input_data,int which_root_node,bool neg);
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);
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 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);
......@@ -216,14 +216,15 @@ public:
};
int BDD_class::BSD_samples_train_each_layer(){
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;
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;
}
}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));
}
cout<<"BSD train samples: "<<BSD_samples_train<<endl;
return BSD_samples_train;
}
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){
// 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;
int output_bit;
uint32_t output_bit;
//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;
output_bits = io_generator_function_vec(input_data,output_bits);
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
vec_input_left[kk] = new bool [32];
vec_input_right[kk] = new bool [32];
}
int* vec_input_left_int = new int [parameter_input_bit_width];
int* vec_input_right_int = new int [parameter_input_bit_width];
uint32_t* vec_input_left_int = new uint32_t [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);
for(int kk=0;kk<32;kk++){
if(kk<vec_length){
......@@ -546,21 +547,21 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
// cout<<" ";
//cout<<"Debug 0"<<endl;
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_right_int[kk] = cvt_bit_to_number(vec_input_right[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_unsigned(vec_input_right[kk],32);
}
// cout<<hex<<vec_input_left_int[0]<<" input"<<endl;
//cout<<"Debug 1"<<endl;
int vec_output_left_int ;
int vec_output_right_int ;
uint32_t vec_output_left_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_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);
cvt_number_to_bit_unsigned(vec_output_left,vec_output_left_int,32);
cvt_number_to_bit_unsigned(vec_output_right,vec_output_right_int,32);
// for(int kk=0;kk<32;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
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];
right_mask_output_data_all[zj] = vec_output_right[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_left = new bool [parameter_input_bit_width];
//for(int jj=0;jj<parameter_input_bit_width;jj++){
......@@ -1172,6 +1173,8 @@ int BDD_class::BDD_FULL_PROCESS(){
}
if((optimize_time < 2) && (zj>4))
break;
if((optimize_time > 10) )
zj-=1;
}
}
gettimeofday(&switch_finish_time,NULL);
......
......@@ -96,7 +96,7 @@ int cvt_bit_to_number(bool input_data[], int k){
// 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;
int i;
......
......@@ -5,7 +5,7 @@ int BDD_class::print_circuit(BDD_node** BDD,int* most_influence){
char output_file_name[100];
//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;
......@@ -140,8 +140,10 @@ int BDD_class::print_circuit(BDD_node** BDD,int* most_influence){
if(partition_depth == total_BDD_depth){
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;
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;
......@@ -213,9 +215,13 @@ if(partition_depth == total_BDD_depth){
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;
}
}else{
}
else{
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;
for (i=0;i<total_BDD_depth+1;i++){
......
......@@ -4,6 +4,7 @@
extern const int parameter_input_bit_width = PI_WIDTH + 5 ;
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的冗余设计。
......@@ -15,8 +16,8 @@ extern const int parameter_output_bit_width = PO_WIDTH ;
//#include"io_generator_tmp.h"
extern const int parameter_search_iterations = 400; //最大设计次数
extern const int parameter_test_ios = 100; //测试要求多少样本
extern const int parameter_max_samples = int(parameter_test_ios*40/32)*32; //BSD每一个节点最多进行多少次采样
extern const int parameter_test_ios = 1000; //测试要求多少样本
extern const int parameter_max_samples = int(parameter_test_ios*10/32)*32; //BSD每一个节点最多进行多少次采样
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
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* 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_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