Commit c433861a by chengshuyao

Debug long vec inputs

parent 8425b9be
......@@ -1113,20 +1113,21 @@ int BDD_class::BDD_infer(){
bool* test_input_data = new bool [parameter_input_bit_width];
bool test_output_data;
bool infer_output_data;
for (int j=0;j<parameter_input_bit_width;j++){
int zi = 0;
long randint=0;
zi = j%30;
if(zi == 0){
randint = gen();
}
test_input_data[j] = bool((int(randint >> (zi)))%2);
for (int j=0;j<parameter_input_bit_width;j++){
//int zi = 0;
//zi = j%30;
//if(zi == 0){
// randint = gen();
//}
//test_input_data[j] = bool((int(randint >> (zi)))%2);
test_input_data[j] = test_input_bits[long(zj)*long(parameter_input_bit_width)+j];
}
for(int j=0;j<start_depth;j++){
test_input_data[most_influence[j]] = BDD[start_depth][test_bit].mask[most_influence[j]];
}
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);
error_all[zj] = (test_output_data != infer_output_data);
/////if((zj<1000) && (error_all[zj])){
......
......@@ -95,6 +95,8 @@ int BSD_execute(int start_node_number, node_index* start_node_index,int variable
bool * test_input_bits;
bool * train_input_bits = new bool [long(parameter_max_samples)*long(parameter_input_bit_width)];
class BSD_features{
......@@ -177,6 +179,16 @@ void set_default(){
lineCount ++;
}
}
random_device rd;
mt19937 gen(rd());
test_input_bits = new bool [long(parameter_test_ios)*long(parameter_input_bit_width)];
#pragma omp parallel for
for (long j=0;j<long(parameter_test_ios)*long(parameter_input_bit_width)/31;j++){
long randint = gen();
for (int zi=0;zi<31;zi++)
test_input_bits[j] = bool((int(randint >> (zi)))%2);
}
cout<<"Finish default setup";
//io generator来自真值表,不来自写好的文件
//char* truth_table_name = new char [100];
//int truth_table_input_width;
......@@ -667,16 +679,16 @@ double search_order(int start_node_number = default_start_node_number, int start
if(i==0){
for(int vi=0;vi<best_area_depth;vi++){
multi_variable_order[vj][vi] = start_order[vi];
cout<<multi_variable_order[vj][vi]<<" ";
//cout<<multi_variable_order[vj][vi]<<" ";
}
}
else{
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]<<" ";
//cout<<multi_variable_order[vj][vi]<<" ";
}
}
cout<<endl;
//cout<<endl;
}
cout<<endl;
......@@ -892,10 +904,10 @@ double search_order(int start_node_number = default_start_node_number, int start
best_partition_parts = partition_parts;
for(int vi=0;vi<parameter_input_bit_width;vi++){
best_variable_order[replace_order][vi] = multi_variable_order[order_num][vi];
cout<<best_variable_order[replace_order][vi]<<" ";
//cout<<best_variable_order[replace_order][vi]<<" ";
best_BDD_split_nodes[vi] = BSD_features_0.BSD_area_layers[vi];
}
cout<<endl;
//cout<<endl;
}
best_reward_max = 0;
best_order_num = 0;
......@@ -924,10 +936,10 @@ double search_order(int start_node_number = default_start_node_number, int start
best_partition_parts = partition_parts;
for(int vi=0;vi<parameter_input_bit_width;vi++){
best_variable_order[replace_order][vi] = multi_variable_order[order_num][vi];
cout<<best_variable_order[replace_order][vi]<<" ";
//cout<<best_variable_order[replace_order][vi]<<" ";
best_BDD_split_nodes[vi] = BSD_features_0.BSD_area_layers[vi];
}
cout<<endl;
//cout<<endl;
best_reward_max = 0;
best_order_num = 0;
for(int zi=0;zi<parameter_max_orders;zi++){
......@@ -970,10 +982,10 @@ double search_order(int start_node_number = default_start_node_number, int start
}
cout<<"Best Order: ";
for (int vj=0;vj<parameter_input_bit_width;vj++){
cout<<best_variable_order[best_order_num][vj];
//cout<<best_variable_order[best_order_num][vj];
//cout<<start_order[vj]<<" ";
}
cout<<endl;
//cout<<endl;
//cout<<"Best Design Area: "<<BSD_features_0.BSD_area<<endl;
cout<<endl;
}
......
......@@ -47,36 +47,49 @@ int BDD_class::next_bit_layer_0(int depth){
int which_node_this_layer = 0;
int which_node_this_layer_sample = 0;
int which_node_this_layer_array[BSD_samples_influence];
//#pragma omp parallel for
//#pragma omp parallel for
for (int i=0;i<BSD_samples_influence;i++){
int which_node_this_layer = gen()%BDD_width_each_layer[depth];
//for (j=0;j<parameter_input_bit_width;j++){
// int zi = 0;
// long randint;
// zi = j%30;
// if(zi == 0){
// randint = gen();
// }
// if(depth == 0){
// mask_input_data[i][j] = bool((randint >> (zi))%2);
// }
// else{
// if(has_been_unfold[j]){
// mask_input_data[i][j] = BDD_mask_this[which_node_this_layer].mask[j];
// }else{
// mask_input_data[i][j] = bool((randint >> (zi))%2);
// }
//
// }
//}
for (j=0;j<parameter_input_bit_width;j++){
int zi = 0;
long randint;
zi = j%30;
if(zi == 0){
randint = gen();
}
if(depth == 0){
mask_input_data[i][j] = bool((randint >> (zi))%2);
mask_input_data[i][j] = train_input_bits[i*parameter_input_bit_width+j];
}
else{
if(has_been_unfold[j]){
mask_input_data[i][j] = BDD_mask_this[which_node_this_layer].mask[j];
}else{
mask_input_data[i][j] = bool((randint >> (zi))%2);
mask_input_data[i][j] = train_input_bits[i*parameter_input_bit_width+j];
}
}
}
}
which_node_this_layer_array[i] = which_node_this_layer;
}
#pragma omp parallel for
for (i=0;i<parameter_input_bit_width+1;i++){
if(has_been_unfold[i] || should_not_be_unfold[i]){
}else{
#pragma omp parallel for
for(int j=0;j<BSD_samples_influence;j++){
bool* amount_turn_input_data_ij = new bool [parameter_input_bit_width+1];
for(int k=0;k<parameter_input_bit_width;k++){
......@@ -109,7 +122,8 @@ int BDD_class::next_bit_layer_0(int depth){
//else
// amount_turn[i] = 0;
if((amount_turn[i] > 40) && ((zz*BSD_samples_influence-amount_turn[i])>40)){
//if((amount_turn[i] > 1) && ((zz*BSD_samples_influence-amount_turn[i])>1)){
if((amount_turn[i] > 4) ){
finish_influence_sample = 1;
}
......
// 修改BSD的采样函数:给mask_input_data[BSD_samples-1:0][parameter_input_bit_width-1:0]赋值。
// 目前的赋值是均匀随机函数。
int BDD_class::set_random_input_data(bool** mask_input_data){
int i,j;
random_device rd;
mt19937 gen(rd());
#pragma omp parallel for
for (long j=0;j<long(BSD_samples)*long(parameter_input_bit_width)/31;j++){
long randint = gen();
for (int zi=0;zi<31;zi++)
train_input_bits[j] = bool((int(randint >> (zi)))%2);
}
for (int i=0;i<BSD_samples;i++){
//对于特定的case,可以直接加到文件里面:sample_input.set
if(i<parameter_io_file_lines){
for(int j=0;j<parameter_input_bit_width;j++){
mask_input_data[i][j] = file_inputs[i][j];
}
}else{
long randint;
for(int j=0;j<parameter_input_bit_width;j++){
//int zj = i*parameter_input_bit_width + j;
//int zi = 0;
////下面是采样分布函数,目前是均匀随机
//zi = j%30;
//if(zi == 0){
// randint = gen();
//}
//mask_input_data[i][j] = bool((randint >> (zi))%2);
mask_input_data[i][j] = train_input_bits[i*parameter_input_bit_width+j];
}
}
}
return 0;
};
int BDD_class::set_random_input_data(bool** mask_input_data){
int i,j;
random_device rd;
mt19937 gen(rd());
//#pragma omp parallel for
// for (int zj=0;zj<BSD_samples*parameter_input_bit_width;zj++){
// int i = int(zj/parameter_input_bit_width);
// int j = int(zj%parameter_input_bit_width);
for (int i=0;i<BSD_samples;i++){
if(i<parameter_io_file_lines){
for(int j=0;j<parameter_input_bit_width;j++){
mask_input_data[i][j] = file_inputs[i][j];
}
}else{
for(int j=0;j<parameter_input_bit_width;j++){
int zj = i*parameter_input_bit_width + j;
int zi = 0;
long randint;
zi = j%30;
if(zi == 0){
randint = gen();
}
mask_input_data[i][j] = bool((randint >> (zi))%2);
}
}
}
return 0;
};
#include "sample.h"
int BDD_class::mask_random_input_data(int depth,bool* mask,int amount,bool** mask_input_data){
int i,j;
//#pragma omp parallel for
......
#include "head.h"
//#include "io_generator/c432.h" //io_generator中需要包含对PI_WIDTH,PO_WIDTH的全局定义,如: extern const int PI_WIDTH = 36;
#include "io_generator/rob_bsd.h" //io_generator中需要包含对PI_WIDTH,PO_WIDTH的全局定义,如: extern const int PI_WIDTH = 36;
//#include "io_generator_vec/c1908_vec.h" //如果有对应Verilog, 可以在aag_to_rtl里面直接生成2个文件
//#include "io_generator_vec/c432_vec.h" //如果有对应Verilog, 可以在aag_to_rtl里面直接生成2个文件
//#define INPUT_AIG //io_generator是否可以用uint按位操作进行加速,也即是否包含_vec后缀的另一个io_generator
//#define SINGLE_BITS //io_generator是否包含每一个bit单独的io_generator_o{x}
......@@ -16,8 +17,8 @@ int parameter_output_bit_width = PO_WIDTH;
extern const int parameter_search_iterations = 10; //最大设计次数
extern const int parameter_test_ios = 100000; //测试要求多少样本
extern const int parameter_max_samples = 1000; //BSD每一个节点最多进行多少次采样,至少为64
extern const int parameter_test_ios = 1000000; //测试要求多少样本
extern const int parameter_max_samples = 10000; //BSD每一个节点最多进行多少次采样,至少为64
extern const double parameter_early_stop_accuracy = 1; //允许的错误率,如果完全不允许,设为1;
//没有特殊需要不要设到<1,会慢一些。
//0.5以下无意义,建议至少设到0.8吧.
......
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