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
05b122a1
Commit
05b122a1
authored
Jul 18, 2025
by
chengshuyao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
set ifdef for AIGs and others
parent
7889538b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
42 additions
and
33 deletions
+42
-33
src/BSD.h
+37
-31
src/readme.md
+1
-1
src/top.h
+4
-1
No files found.
src/BSD.h
View file @
05b122a1
...
@@ -203,14 +203,6 @@ bool* BDD_class::io_generator(bool input_data[parameter_input_bit_width],bool* o
...
@@ -203,14 +203,6 @@ bool* BDD_class::io_generator(bool input_data[parameter_input_bit_width],bool* o
//io_read_times += 1;
//io_read_times += 1;
return
output_bits
;
return
output_bits
;
};
};
int
*
BDD_class
::
io_generator_vec
(
int
input_data
[
parameter_input_bit_width
],
int
*
output_bits
){
//bool* output_bits = new bool [parameter_output_bit_width];
//cout<<"Debug 4"<<endl;
output_bits
=
io_generator_function_vec
(
input_data
,
output_bits
);
//cout<<"Debug 5"<<endl;
//io_read_times += 1;
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
[
parameter_input_bit_width
],
int
which_bit_output
){
...
@@ -221,6 +213,16 @@ bool BDD_class::io_generator_single(bool input_data[parameter_input_bit_width],i
...
@@ -221,6 +213,16 @@ bool BDD_class::io_generator_single(bool input_data[parameter_input_bit_width],i
delete
[]
output_bits
;
delete
[]
output_bits
;
return
output_bit
;
return
output_bit
;
};
};
#ifdef INPUT_AIG
int
*
BDD_class
::
io_generator_vec
(
int
input_data
[
parameter_input_bit_width
],
int
*
output_bits
){
//bool* output_bits = new bool [parameter_output_bit_width];
//cout<<"Debug 4"<<endl;
output_bits
=
io_generator_function_vec
(
input_data
,
output_bits
);
//cout<<"Debug 5"<<endl;
//io_read_times += 1;
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
[
parameter_input_bit_width
],
int
which_bit_output
){
//cout<<"Debug 3"<<endl;
//cout<<"Debug 3"<<endl;
...
@@ -234,7 +236,7 @@ int BDD_class::io_generator_single_vec(int input_data[parameter_input_bit_width]
...
@@ -234,7 +236,7 @@ int BDD_class::io_generator_single_vec(int input_data[parameter_input_bit_width]
delete
[]
output_bits
;
delete
[]
output_bits
;
return
output_bit
;
return
output_bit
;
};
};
#endif
int
BDD_class
::
train_BDD
(
BDD_node
**
BDD
,
int
*
most_influence
,
int
start_depth
,
int
how_many_start_nodes
,
BDD_node
*
start_nodes
){
int
BDD_class
::
train_BDD
(
BDD_node
**
BDD
,
int
*
most_influence
,
int
start_depth
,
int
how_many_start_nodes
,
BDD_node
*
start_nodes
){
...
@@ -463,28 +465,7 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
...
@@ -463,28 +465,7 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
cout
<<
"The input bit is: x"
<<
most_influence
[
i
]
<<
endl
;
cout
<<
"The input bit is: x"
<<
most_influence
[
i
]
<<
endl
;
cout
<<
"BSD width at this layer: "
<<
BDD_width_each_layer
[
i
]
<<
endl
;
cout
<<
"BSD width at this layer: "
<<
BDD_width_each_layer
[
i
]
<<
endl
;
set_random_input_data
(
mask_input_data
);
set_random_input_data
(
mask_input_data
);
// #pragma omp parallel for
#ifdef INPUT_AIG
// for(long zj=0;zj<BDD_width_each_layer[i]*BSD_samples;zj++){
// int j = int(zj/BSD_samples);
// int zi = int(zj%BSD_samples);
// bool mask_input_data_left [parameter_input_bit_width];
// bool mask_input_data_right[parameter_input_bit_width];
// for (int jj=0;jj<parameter_input_bit_width;jj++){
// mask_input_data_left [jj] = mask_input_data[zi][jj];
// mask_input_data_right[jj] = mask_input_data[zi][jj];
// }
// for (int jj=0;jj<i;jj++){
// mask_input_data_left [most_influence[jj]] = BDD_mask_this[j].mask[most_influence[jj]];
// mask_input_data_right[most_influence[jj]] = BDD_mask_this[j].mask[most_influence[jj]];
// }
// mask_input_data_left [most_influence[i]] = 0;
// mask_input_data_right[most_influence[i]] = 1;
// bool left_mask_output_data_b = io_generator_single(mask_input_data_left ,BDD[i][j].which_bit_output);
// bool right_mask_output_data_b = io_generator_single(mask_input_data_right,BDD[i][j].which_bit_output);
// right_mask_output_data_all[zj] = right_mask_output_data_b;
// left_mask_output_data_all [zj] = left_mask_output_data_b;
//
// }
int
vec_length
=
31
;
int
vec_length
=
31
;
#pragma omp parallel for
#pragma omp parallel for
for
(
long
zk
=
0
;
zk
<
int
(
BDD_width_each_layer
[
i
]
*
int
(
BSD_samples
/
vec_length
));
zk
++
){
for
(
long
zk
=
0
;
zk
<
int
(
BDD_width_each_layer
[
i
]
*
int
(
BSD_samples
/
vec_length
));
zk
++
){
...
@@ -567,6 +548,31 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
...
@@ -567,6 +548,31 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
delete
[]
vec_output_right
;
delete
[]
vec_output_right
;
}
}
#else
#pragma omp parallel for
for
(
long
zj
=
0
;
zj
<
BDD_width_each_layer
[
i
]
*
BSD_samples
;
zj
++
){
int
j
=
int
(
zj
/
BSD_samples
);
int
zi
=
int
(
zj
%
BSD_samples
);
bool
mask_input_data_left
[
parameter_input_bit_width
];
bool
mask_input_data_right
[
parameter_input_bit_width
];
for
(
int
jj
=
0
;
jj
<
parameter_input_bit_width
;
jj
++
){
mask_input_data_left
[
jj
]
=
mask_input_data
[
zi
][
jj
];
mask_input_data_right
[
jj
]
=
mask_input_data
[
zi
][
jj
];
}
for
(
int
jj
=
0
;
jj
<
i
;
jj
++
){
mask_input_data_left
[
most_influence
[
jj
]]
=
BDD_mask_this
[
j
].
mask
[
most_influence
[
jj
]];
mask_input_data_right
[
most_influence
[
jj
]]
=
BDD_mask_this
[
j
].
mask
[
most_influence
[
jj
]];
}
mask_input_data_left
[
most_influence
[
i
]]
=
0
;
mask_input_data_right
[
most_influence
[
i
]]
=
1
;
bool
left_mask_output_data_b
=
io_generator_single
(
mask_input_data_left
,
BDD
[
i
][
j
].
which_bit_output
);
bool
right_mask_output_data_b
=
io_generator_single
(
mask_input_data_right
,
BDD
[
i
][
j
].
which_bit_output
);
right_mask_output_data_all
[
zj
]
=
right_mask_output_data_b
;
left_mask_output_data_all
[
zj
]
=
left_mask_output_data_b
;
}
#endif
for
(
int
j
=
0
;
j
<
BDD_width_each_layer
[
i
];
j
++
){
for
(
int
j
=
0
;
j
<
BDD_width_each_layer
[
i
];
j
++
){
BDD
[
i
][
j
].
this_layer_bit_expansion
=
most_influence
[
i
];
BDD
[
i
][
j
].
this_layer_bit_expansion
=
most_influence
[
i
];
...
...
src/readme.md
View file @
05b122a1
...
@@ -20,5 +20,5 @@ The latest version of the BSD Learner.
...
@@ -20,5 +20,5 @@ The latest version of the BSD Learner.
Line 2: modify output bitwidth;
Line 2: modify output bitwidth;
Line 3: include your own io_generator file.
Line 3: include your own io_generator file.
If it is a AIG, #define INPUT_AIG, otherwise do not define it.
src/top.h
View file @
05b122a1
...
@@ -2,10 +2,11 @@ extern const int parameter_input_bit_width = 33+5; //输入bit有几位,写在
...
@@ -2,10 +2,11 @@ extern const int parameter_input_bit_width = 33+5; //输入bit有几位,写在
extern
const
int
parameter_output_bit_width
=
25
;
//输出bit有几位
extern
const
int
parameter_output_bit_width
=
25
;
//输出bit有几位
#include"io_generator/c1908.h"
#include"io_generator/c1908.h"
#include"c1908_vec.h"
#include"c1908_vec.h"
//#define INPUT_AIG
//#include"io_generator_function.h"
//#include"io_generator_function.h"
int
parameter_search_iterations
=
1000
;
//最大设计次数
int
parameter_search_iterations
=
1000
;
//最大设计次数
int
parameter_test_ios
=
10
24
;
//测试要求多少样本
int
parameter_test_ios
=
10
00
;
//测试要求多少样本
extern
const
int
parameter_max_samples
=
int
(
parameter_test_ios
*
16
);
//BSD每一个节点最多进行多少次采样
extern
const
int
parameter_max_samples
=
int
(
parameter_test_ios
*
16
);
//BSD每一个节点最多进行多少次采样
bool
*
io_generator_function
(
bool
input_data
[
parameter_input_bit_width
],
bool
*
output_data
)
{
bool
*
io_generator_function
(
bool
input_data
[
parameter_input_bit_width
],
bool
*
output_data
)
{
...
@@ -24,6 +25,7 @@ bool* io_generator_function(bool input_data[parameter_input_bit_width], bool* ou
...
@@ -24,6 +25,7 @@ bool* io_generator_function(bool input_data[parameter_input_bit_width], bool* ou
return
output_data
;
return
output_data
;
}
}
#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
[
parameter_input_bit_width
],
int
*
output_data
)
{
...
@@ -39,3 +41,4 @@ int* io_generator_function_vec(int input_data[parameter_input_bit_width], int* o
...
@@ -39,3 +41,4 @@ int* io_generator_function_vec(int input_data[parameter_input_bit_width], int* o
return
output_data
;
return
output_data
;
}
}
#endif
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