Commit d12d03bc by chengshuyao

Debug memory errors with -fsanitize

parent a21e2bfa
......@@ -171,14 +171,14 @@ public:
int order_num;
BDD_class(){
most_influence = new int [parameter_input_bit_width];
most_influence = new int [parameter_input_bit_width+1];
BDD_width_each_layer = new int [parameter_input_bit_width+1];
mask_output_data = new bool [parameter_max_samples*2];
hash_simplify_list = new int [parameter_max_BDD_width];
BDD_mask_this = new BDD_node_mask[parameter_max_BDD_width];
BDD_mask_next = new BDD_node_mask[parameter_max_BDD_width];
has_been_unfold = new bool[parameter_input_bit_width+1];
amount_turn = new double [parameter_input_bit_width];
amount_turn = new double [parameter_input_bit_width+1];
test_input_data = new bool[parameter_input_bit_width];
left_son_mask = new bool [parameter_input_bit_width];
right_son_mask = new bool [parameter_input_bit_width];
......@@ -199,10 +199,6 @@ public:
start_node_index = new node_index [parameter_output_bit_width];
start_node_index_string = new char [parameter_output_bit_width+1];
mask_input_data = new bool*[parameter_max_samples*2];
simplify_list = new bool*[parameter_max_BDD_width];
BDD = new BDD_node*[1+parameter_input_bit_width];
amount_turn_output_data = new bool* [parameter_input_bit_width+1];
arr2d_new(mask_input_data, parameter_max_samples*2);
arr2d_new(simplify_list, parameter_max_BDD_width);
arr2d_new(BDD, 1+parameter_input_bit_width);
......@@ -210,37 +206,38 @@ public:
};
~BDD_class(){
//delete [] split_nodes_each_layer ;
//delete [] accuracy_each_layer ;
//delete [] BSD_variable_order ;
//delete [] BDD_split_nodes_each_layer ;
//delete [] output_partition_set ;
//delete [] start_node_index ;
//delete [] start_node_index_string ;
arr_delete (split_nodes_each_layer );
arr_delete (accuracy_each_layer );
arr_delete (BSD_variable_order );
arr_delete (BDD_split_nodes_each_layer );
arr_delete (output_partition_set );
//arr_delete (start_node_index );
arr_delete (start_node_index_string );
arr_delete (start_node_index_string );
//arr_delete (most_influence) ;
//delete [] BDD_width_each_layer ;
//delete [] mask_input_data ;
//delete [] mask_output_data ;
//delete [] simplify_list ;
//delete [] hash_simplify_list ;
//delete [] BDD ;
//delete [] BDD_mask_this ;
//delete [] BDD_mask_next ;
//delete [] has_been_unfold ;
//delete [] amount_turn_output_data ;
//delete [] amount_turn ;
//delete [] test_input_data ;
//delete [] left_son_mask ;
//delete [] right_son_mask ;
//delete [] left_mask_output_data ;
//delete [] right_mask_output_data ;
//delete [] left_mask_output_data_all ;
//delete [] right_mask_output_data_all ;
//delete [] all_one_left_list ;
//delete [] all_zero_left_list ;
//delete [] all_one_right_list ;
//delete [] all_zero_right_list ;
arr_delete (most_influence ) ;
arr_delete ( BDD_width_each_layer ) ;
arr_delete ( mask_output_data ) ;
arr_delete ( hash_simplify_list ) ;
arr_delete ( BDD_mask_this ) ;
arr_delete ( BDD_mask_next ) ;
arr_delete ( has_been_unfold ) ;
arr_delete ( amount_turn ) ;
arr_delete ( test_input_data ) ;
arr_delete ( left_son_mask ) ;
arr_delete ( right_son_mask ) ;
arr_delete ( left_mask_output_data ) ;
arr_delete ( right_mask_output_data ) ;
arr_delete ( left_mask_output_data_all ) ;
arr_delete ( right_mask_output_data_all ) ;
arr_delete ( all_one_left_list ) ;
arr_delete ( all_zero_left_list ) ;
arr_delete ( all_one_right_list ) ;
arr_delete ( all_zero_right_list ) ;
arr2d_delete(mask_input_data, parameter_max_samples*2);
arr2d_delete(simplify_list, parameter_max_BDD_width);
arr2d_delete(BDD, 1+parameter_input_bit_width);
arr2d_delete(amount_turn_output_data, 1+parameter_input_bit_width);
};
......@@ -809,8 +806,8 @@ int BDD_class::train_BDD(int start_depth, int how_many_start_nodes, BDD_node* st
//cout<<"all zero right"<<all_zero_right_list[j] <<endl;
//cout<<"all one right"<<all_one_right_list[j] <<endl;
}
//arr_delete( left_mask_output_data_tmp );
//arr_delete( right_mask_output_data_tmp);
arr_delete( left_mask_output_data_tmp );
arr_delete( right_mask_output_data_tmp);
}
cout<<"Finish all one all zero compare "<<endl;
......@@ -1092,8 +1089,8 @@ int BDD_class::train_BDD(int start_depth, int how_many_start_nodes, BDD_node* st
cout<<"######################################################################"<<endl;
}
//arr_delete( root_nodes_leafs);
//arr_delete( leaf_nodes_roots);
arr_delete( root_nodes_leafs);
arr_delete( leaf_nodes_roots);
return 0;
};
......@@ -1115,7 +1112,7 @@ int BDD_class::BDD_infer(){
bool infer_output_data;
for (int j=0;j<parameter_input_bit_width;j++){
int zi = 0;
long randint;
long randint=0;
zi = j%30;
if(zi == 0){
randint = gen();
......
......@@ -12,7 +12,7 @@ extern const int parameter_max_orders = 1;
extern const int parameter_multi_output_index = 0; //BSD从第几层开始化简,前面若干层展开序确定
extern const int parameter_max_BDD_width = 320000; //BSD每一层最多多少个节点
int parameter_early_stop_depth = parameter_input_bit_width; //BSD到第几层终止,输出此时的不准确BSD
int parameter_early_stop_split_nodes= 1000000; //BSD每一层最多多少个节点
int parameter_early_stop_split_nodes= 10000000; //BSD每一层最多多少个节点
//全局变量
int GLOBAL_which_demo_function;
......@@ -500,6 +500,7 @@ int search_partition(int start_node_number=default_start_node_number,int start_n
arr_delete( area_parts );
arr_delete( best_area_parts );
return 0;
};
int BSD_execute(int start_node_number, node_index* start_node_index,int variable_order_number, int* variable_order){
......@@ -551,6 +552,7 @@ int BSD_execute(int start_node_number, node_index* start_node_index,int variable
}
int reward = search_reward(BSD_features_0);
arr_delete(BDD_class_main.start_nodes) ;
return reward;
};
......@@ -570,9 +572,10 @@ int search_reward(BSD_features BSD_features_0){
int search_order(int start_node_number = default_start_node_number, int start_node_depth = 0, node_index* start_node_index = default_start_node_index,int search_iterations = parameter_search_iterations, int* start_order = default_start_order){
multi_variable_order = new int* [parameter_max_orders];
arr2d_new(multi_variable_order,parameter_max_orders);
//multi_variable_order = new int* [parameter_max_orders];
for (int vi=0;vi<parameter_max_orders;vi++){
multi_variable_order[vi] = new int [parameter_input_bit_width];
multi_variable_order[vi] = new int [parameter_input_bit_width+1];
for (int vj=0;vj<parameter_input_bit_width;vj++)
multi_variable_order[vi][vj]=0;
}
......@@ -597,7 +600,7 @@ int search_order(int start_node_number = default_start_node_number, int start_no
//best_variable_order = new int* [parameter_max_orders];
arr2d_new(best_variable_order,parameter_max_orders);
for (int vi=0;vi<parameter_max_orders;vi++){
best_variable_order[vi] = new int [parameter_input_bit_width];
best_variable_order[vi] = new int [parameter_input_bit_width+1];
for (int vj=0;vj<parameter_input_bit_width;vj++)
best_variable_order[vi][vj]=0;
}
......@@ -655,7 +658,7 @@ int search_order(int start_node_number = default_start_node_number, int start_no
}
}
else{
for(int vi=0;vi<best_area_depth;vi++){
for(int vi=0;vi<max(best_area_depth,parameter_input_bit_width);vi++){
multi_variable_order[vj][vi] = best_variable_order[vj][vi];
cout<<multi_variable_order[vj][vi]<<" ";
}
......@@ -808,6 +811,7 @@ int search_order(int start_node_number = default_start_node_number, int start_no
}
function_top_file << "endmodule"<<endl;
function_top_file.close();
arr_delete(start_node_index_string);
#endif
bool accept=0;
......@@ -957,6 +961,7 @@ int search_order(int start_node_number = default_start_node_number, int start_no
arr_delete( best_rewards) ;
arr_delete( best_area_depths);
arr2d_delete (multi_variable_order,parameter_max_orders);
arr2d_delete(best_variable_order,parameter_max_orders);
//arr2d_delete (best_variable_order,1);
//delete [] best_variable_order[0];
//for(int i=0;i<parameter_input_bit_width;i++)
......
......@@ -353,11 +353,11 @@ int BDD_class::next_bit_layer_0(int depth){
int i,j,k;
int zz;
int zi;
bool* should_not_be_unfold = new bool [parameter_input_bit_width];
bool* should_not_be_unfold = new bool [parameter_input_bit_width+1];
random_device rd;
mt19937 gen(rd());
for (zz=0;zz<parameter_input_bit_width;zz++){
for (zz=0;zz<parameter_input_bit_width+1;zz++){
amount_turn[zz] = 0;
should_not_be_unfold[zz] = 0;
}
......@@ -409,13 +409,14 @@ int BDD_class::next_bit_layer_0(int depth){
}else{
//#pragma omp parallel for
for(int j=0;j<BSD_samples_influence;j++){
bool amount_turn_input_data_ij[parameter_input_bit_width];
bool* amount_turn_input_data_ij = new bool [parameter_input_bit_width+1];
for(int k=0;k<parameter_input_bit_width;k++){
amount_turn_input_data_ij[k] = mask_input_data[j][k];
}
amount_turn_input_data_ij[i] = !amount_turn_input_data_ij[i];
bool amount_turn_output_data_ij = io_generator_single(amount_turn_input_data_ij,BDD[depth][which_node_this_layer_array[j]].which_bit_output);
amount_turn_output_data[i][j] = amount_turn_output_data_ij;
arr_delete(amount_turn_input_data_ij);
}
}
}
......@@ -479,6 +480,7 @@ int BDD_class::next_bit_layer_0(int depth){
has_been_unfold[most_influence_next] = 1;
double amount_turn_max_divide_average = amount_turn_static[most_influence_next]/amount_turn_average;
double amount_turn_max_ratio = amount_turn[most_influence_next]/(zz+1);
arr_delete( should_not_be_unfold);
//USE_THIS:BEST
//if((depth<parameter_input_bit_width-2) ){
// if((amount_turn_max_divide_average < 4) || (amount_turn_max_ratio < 0.3) || ((amount_turn_max_ratio>0.8)&&((amount_turn_max_ratio<0.999)))){
......
#include "head.h"
#include "io_generator/c3540.h" //io_generator中需要包含对PI_WIDTH,PO_WIDTH的全局定义,如: extern const int PI_WIDTH = 36;
#include "io_generator_vec/c3540_vec.h" //如果有对应Verilog, 可以在aag_to_rtl里面直接生成2个文件
#include "io_generator/c432.h" //io_generator中需要包含对PI_WIDTH,PO_WIDTH的全局定义,如: extern const int PI_WIDTH = 36;
#include "io_generator_vec/c432_vec.h" //如果有对应Verilog, 可以在aag_to_rtl里面直接生成2个文件
//#include "io_generator/ip-cores/combinational_circuits/c_lod.h"
//#include "io_generator/ip-cores/combinational_circuits_vec/c_lod_vec.h"
//#include "io_generator/ip-cores/combinational_circuits/c_prefix_arbiter_base.h"
//#include "io_generator/ip-cores/combinational_circuits_vec/c_prefix_arbiter_base_vec.h"
#define INPUT_AIG //io_generator是否可以用uint按位操作进行加速,也即是否包含_vec后缀的另一个io_generator
//#define SINGLE_BITS //io_generator是否包含每一个bit单独的io_generator_o{x}
#define SINGLE_BITS //io_generator是否包含每一个bit单独的io_generator_o{x}
#define SEARCH_PARTITION //BSD算法搜索partition策略
#define ACCURACY_FIRST //精度优先算法: 慢且面积冗余大,在精度是瓶颈时使用,不作为默认选项。
//#define SEARCH_PARTITION //BSD算法搜索partition策略
//#define ACCURACY_FIRST //精度优先算法: 慢且面积冗余大,在精度是瓶颈时使用,不作为默认选项。
extern const int parameter_input_bit_width = PI_WIDTH +5 ;
int parameter_output_bit_width = PO_WIDTH;
extern const int parameter_search_iterations = 10; //最大设计次数
extern const int parameter_test_ios = 1000000; //测试要求多少样本
extern const int parameter_max_samples = 100000; //BSD每一个节点最多进行多少次采样,至少为64
extern const int parameter_test_ios = 10000; //测试要求多少样本
extern const int parameter_max_samples = 10000; //BSD每一个节点最多进行多少次采样,至少为64
extern const double parameter_early_stop_accuracy = 1; //允许的错误率,如果完全不允许,设为1;
//没有特殊需要不要设到<1,会慢一些。
//0.5以下无意义,建议至少设到0.8吧.
......
export PATH=/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/bin:/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin/gcc
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 PATH=/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/bin:/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin/gcc
#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 ASAN_OPTIONS=halt_on_error=0:detect_leaks=1:malloc_context_size=15:log_path=./asan.log
rm rtl/*
#bash write_vec.sh
g++ BSD.cpp -O3 -std=c++11 -fopenmp
#g++ -fno-omit-frame-pointer -fsanitize=address -g BSD.cpp -O3 -std=c++11 -fopenmp
g++ BSD.cpp -O3 -std=c++11 -fopenmp
./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