Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
BSD
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
chengshuyao
BSD
Commits
c433861a
Commit
c433861a
authored
Dec 30, 2025
by
chengshuyao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Debug long vec inputs
parent
8425b9be
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
100 additions
and
62 deletions
+100
-62
src/BSD.h
+9
-8
src/BSD_top.h
+21
-9
src/next_layer_bit.h
+26
-12
src/sample.h
+39
-0
src/tool_function.h
+1
-30
src/top.h
+4
-3
No files found.
src/BSD.h
View file @
c433861a
...
...
@@ -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])){
...
...
src/BSD_top.h
View file @
c433861a
...
...
@@ -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
;
}
...
...
src/next_layer_bit.h
View file @
c433861a
...
...
@@ -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
;
}
...
...
src/sample.h
0 → 100644
View file @
c433861a
// 修改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
;
};
src/tool_function.h
View file @
c433861a
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
...
...
src/top.h
View file @
c433861a
#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/c
1908
_vec.h" //如果有对应Verilog, 可以在aag_to_rtl里面直接生成2个文件
//#include "io_generator_vec/c
432
_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
=
100000
0
;
//测试要求多少样本
extern
const
int
parameter_max_samples
=
1000
0
;
//BSD每一个节点最多进行多少次采样,至少为64
extern
const
double
parameter_early_stop_accuracy
=
1
;
//允许的错误率,如果完全不允许,设为1;
//没有特殊需要不要设到<1,会慢一些。
//0.5以下无意义,建议至少设到0.8吧.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment