Commit f447e0e0 by chengshuyao

PI PO width adjust

parent e1ffb20a
......@@ -32,15 +32,15 @@ using namespace std;
//电路的parameter Circuit_parameter
int circuit_index = 9999; //电路编号
int parameter_max_orders = 8;
extern const int parameter_max_orders = 8;
//算法的parameter Algorithm_parameter
extern const int parameter_num_threads = 100; //线程数
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
int parameter_max_BDD_width = 40000; //BSD每一层最多多少个节点
int parameter_early_stop_split_nodes= 1000000; //BSD每一层最多多少个节点
//全局变量
......@@ -132,7 +132,9 @@ int main(int argc,char* argv[]){
//search_order();
//int* start_order_a = new int [parameter_input_bit_width];
//int area_a = search_order(10,output_partition_set_a,0,start_order_a);
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);
//search_partition(parameter_input_bit_width,start_order);
};
......@@ -519,8 +521,11 @@ int search_order(int search_iterations,bool* output_partition_set,int start_orde
// feature_variable[variable_order[j]] = 9999999;
//}
if (i<parameter_max_orders)
if (i<parameter_max_orders){
//parameter_max_samples = int(parameter_max_samples/10); //BSD每一个节点最多进行多少次采样
reward = BSD_execute(start_order_depth,variable_order,partition_depth,partition_parts,0,output_partition_set);
//parameter_max_samples *= 10; //BSD每一个节点最多进行多少次采样
}
//else if (i<parameter_max_orders){
// reward = BSD_execute(0,variable_order,partition_depth,partition_parts,0,output_partition_set);
//}
......
......@@ -81,13 +81,13 @@ public:
double* amount_turn ;
bool ** simplify_list ;
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);
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);
int io_generator_single_vec(int input_data[parameter_input_bit_width],int which_bit_output);
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);
bool io_generator_single(bool* input_data,int which_bit_output);
int io_generator_single_vec(int* input_data,int which_bit_output);
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,int amount,int* most_influence,bool** mask_input_data);
int next_bit_layer(int depth,int order_num);
int next_bit_layer_0(int depth);
int next_bit_layer_1(int depth);
......@@ -240,7 +240,7 @@ int BDD_class::BSD_samples_sort_each_layer(){
// 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,int which_bit_output){
bool output_bit;
bool* output_bits = new bool [parameter_output_bit_width];
......@@ -263,7 +263,7 @@ bool BDD_class::io_generator_single(bool input_data[parameter_input_bit_width],i
// 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,int which_bit_output){
//cout<<"Debug 3"<<endl;
int output_bit;
......@@ -981,7 +981,7 @@ int BDD_class::BDD_infer(BDD_node** BDD,int* most_influence){
return 0;
};
bool BDD_class::cal_infer_result(bool input_data[parameter_input_bit_width],int which_root_node,bool neg){
bool BDD_class::cal_infer_result(bool* input_data,int which_root_node,bool neg){
bool infer_result = 0;
int i;
int position = which_root_node;
......@@ -1133,7 +1133,7 @@ int BDD_class::BDD_FULL_PROCESS(){
max_group = zj ;
else
max_group = zj - 1;
max_move_length = max(20,int((parameter_input_bit_width/(1+zj))-1)) ;
max_move_length = max(20,int((parameter_input_bit_width/(1+zj))-3)) ;
cout<<"######################################################################"<<endl;
cout<<"Switch Times "<<zj<<endl;
......@@ -1148,7 +1148,7 @@ int BDD_class::BDD_FULL_PROCESS(){
int i = (start_i + si)%total_BDD_depth;
cout<<"Switch bit: "<<i<<" "<<endl;
bool optimize=0;
int move_length = min(total_BDD_depth-i-max_group-1,max_move_length);
int move_length = min(total_BDD_depth-i-max_group-3,max_move_length);
for(int zi=0;zi<=move_length;zi++){
for(int zk=0;zk<=min(max_group,move_length-1);zk++){
BSD_switch_layer(i+zi+min(max_group,move_length-1)-zk);
......@@ -1182,8 +1182,9 @@ int BDD_class::BDD_FULL_PROCESS(){
cout<<"Start infer"<<endl;
BDD_infer(BDD,most_influence);
print_circuit(BDD,most_influence);
delete [] test_input_data;
if(circuit_accuracy==1)
print_circuit(BDD,most_influence);
delete [] test_input_data;
for (int vi=0;vi<parameter_input_bit_width;vi++){
BSD_variable_order[0][vi] = most_influence[vi];
}
......
......@@ -4,7 +4,7 @@ int BDD_class::next_bit_layer_single(int depth,int which_node_this_layer){
int i,j,k;
int zz;
int zi;
bool should_not_be_unfold[parameter_input_bit_width] = {0};
bool* should_not_be_unfold = new bool [parameter_input_bit_width];
for (zz=0;zz<parameter_input_bit_width;zz++){
amount_turn[zz] = 0;
}
......@@ -17,7 +17,7 @@ int BDD_class::next_bit_layer_single(int depth,int which_node_this_layer){
}
int BSD_samples_influence = 1;
int which_node_this_layer_sample = 0;
int which_node_this_layer_array[BSD_samples_influence];
int* which_node_this_layer_array = new int [BSD_samples_influence];
for (zz=0;zz<10;zz++){
if(depth < parameter_multi_output_index){
break;
......@@ -111,6 +111,8 @@ int BDD_class::next_bit_layer_single(int depth,int which_node_this_layer){
}
delete [] should_not_be_unfold;
delete [] which_node_this_layer_array;
return most_influence_next;
};
......@@ -151,7 +153,7 @@ int BDD_class::next_bit_layer_1(int depth){
}
else{
cout<<"BSD_samples"<<BSD_samples<<endl;
bool this_bit_most_influence[parameter_input_bit_width] = {0};
bool* this_bit_most_influence = new bool [parameter_input_bit_width];
for(int i=0;i<100;i++){
int which_node_this_layer;
if(BDD_width_each_layer[depth] < 100){
......@@ -343,7 +345,7 @@ int BDD_class::next_bit_layer_0(int depth){
int i,j,k;
int zz;
int zi;
bool should_not_be_unfold[parameter_input_bit_width] = {0};
bool* should_not_be_unfold = new bool [parameter_input_bit_width];
random_device rd;
mt19937 gen(rd());
......
......@@ -18,7 +18,7 @@ int BDD_class::set_random_input_data(bool** mask_input_data){
}
return 0;
};
int BDD_class::mask_random_input_data(int depth,bool mask[parameter_input_bit_width],int amount,int* most_influence,bool** mask_input_data){
int BDD_class::mask_random_input_data(int depth,bool* mask,int amount,int* most_influence,bool** mask_input_data){
int i,j;
//#pragma omp parallel for
for (i=0;i<amount;i++){
......
extern const int parameter_input_bit_width = 33+5; //输入bit有几位,写在+6前面。+6是为了防止一些bug的冗余设计。
extern const int parameter_output_bit_width = 25; //输出bit有几位
#define INPUT_AIG
#include"io_generator/c1908.h"
#include "c1908_vec.h"
#define INPUT_AIG
//#include"io_generator_function.h"
int parameter_search_iterations = 400; //最大设计次数
int parameter_test_ios = 1000; //测试要求多少样本
extern const int parameter_max_samples = int(parameter_test_ios*10); //BSD每一个节点最多进行多少次采样
extern const int parameter_input_bit_width = PI_WIDTH + 2 ;
extern const int parameter_output_bit_width = PO_WIDTH ;
//int parameter_input_bit_width = 80+5; //输入bit有几位,写在+6前面。+6是为了防止一些bug的冗余设计。
//int parameter_output_bit_width = 65; //输出bit有几位
//#include"io_generator_tmp.h"
extern const int parameter_search_iterations = 400; //最大设计次数
extern const int parameter_test_ios = 10000; //测试要求多少样本
extern const int parameter_max_samples = int(parameter_test_ios*1); //BSD每一个节点最多进行多少次采样
bool* io_generator_function(bool input_data[parameter_input_bit_width], bool* output_data) {
bool* io_generator_function(bool* input_data, bool* output_data) {
int i,j;
......@@ -26,7 +35,7 @@ bool* io_generator_function(bool input_data[parameter_input_bit_width], bool* ou
}
#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, int* output_data) {
int i,j;
......
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