Hardware Functions in xf::data_analytics::classification
¶
decisionTreePredict¶
#include "xf_data_analytics/classification/decision_tree_predict.hpp"
template < typename MType, unsigned int WD, unsigned int MAX_FEA_NUM, unsigned int MAX_TREE_DEPTH = 20, unsigned MAX_CAT_BITS = 8 > void decisionTreePredict ( hls::stream <ap_uint <WD>> dstrm_batch [MAX_FEA_NUM], hls::stream <bool>& estrm_batch, hls::stream <ap_uint <512>>& treeStrm, hls::stream <bool>& treeTag, hls::stream <ap_uint <MAX_CAT_BITS>>& predictionsStrm, hls::stream <bool>& predictionsTag )
decisionTreePredict, Top function of Decision Tree Predict.
This function first loads decision tree (the corresponding function : getTree) from treeStrm Then, read sample one by one from dstrm_batch, and output its category id into predictionsStrm streams
Note that the treeStrm is a 512-bit stream, and each 512 bits include two nodes. In each 512-bit confirm the range(0,71) is node[i].nodeInfo and range(256,327) is node[i+1].nodeInfo the range(192,255) is node[i].threshold and range(448,511) is node[i+1].threshold For detailed info of Node struct, can refer “decision_tree.hpp” Samples in input sample stream should be converted into ap_uint<WD> from MType
Parameters:
MType | The data type of sample |
WD | The width of data type MType, can get by sizeof(MType) |
MAX_FEA_NUM | The max feature num function can support |
MAX_TREE_DEPTH | The max tree depth function can support |
MAX_CAT_BITS | The category max bit number |
dstrm_batch | Input data streams of ap_uint<WD> |
estrm_batch | End flag stream for input data |
treeStrm | Decision tree streams |
treeTag | End flag stream for decision tree nodes |
predictionsStrm | Output data streams |
predictionsTagStrm | End flag stream for output |
axiVarColToStreams¶
#include "xf_data_analytics/classification/decision_tree_train.hpp"
template < int _BurstLen = 32, int _WAxi = 512, int _WData = 64 > void axiVarColToStreams ( ap_uint <_WAxi>* ddr, const ap_uint <32> offset, const ap_uint <32> rows, ap_uint <32> cols, hls::stream <ap_uint <_WData>> dataStrm [_WAxi/_WData], hls::stream <bool>& eDataStrm )
Loading table from AXI master to stream. Table should be row based storage of identical datawidth.
Parameters:
_BurstLen | burst length of AXI buffer, default is 32. |
_WAxi | width of AXI port, must be multiple of datawidth, default is 512. |
_WData | datawith, default is 64. |
ddr | input AXI port |
offset | offset(in _WAxi bits) to load table. |
rows | Row number of table |
cols | Column number of table Output streams of _WAxi/_WData channels end flag of output stream. |
naiveBayesTrain¶
#include "xf_data_analytics/classification/naive_bayes.hpp"
template < int DT_WIDTH = 32, int WL = 3, typename DT = unsigned int > void naiveBayesTrain ( const int num_of_class, const int num_of_term, hls::stream <ap_uint <64>> i_data_strm [1<< WL], hls::stream <bool> i_e_strm [1<< WL], hls::stream <int>& o_terms_strm, hls::stream <ap_uint <64>> o_data0_strm [1<< WL], hls::stream <ap_uint <64>> o_data1_strm [1<< WL] )
naiveBayesTrain, top function of multinomial Naive Bayes Training.
This function will firstly load train dataset from the i_data_strm, then counte the frequency for each hit term. After scaning all sample, the likehood probability matrix and prior probability will be output from two independent stream
Parameters:
DT_WIDTH | the width of type DT, in bits |
WL | the width of bit to enable dispatcher, only 3 is supported so far |
DT | the data type of internal counter for terms, can be 32/64-bit integer, float or double |
num_of_class | the number of class in sample dataset, should be exactly same with real dataset |
num_of_term | the number of terms, must be larger than the number of feature, and num_of_class * num_of_term <= (1 << (20-WL)) must be satisfied. |
i_data_strm | input data stream of ap_uint<64> in multiple channel |
i_e_strm | end flag stream for each input data channel |
o_terms_strm | the output number of statistic feature |
o_data0_strm | the output likehood matrix |
o_data1_strm | the output prior probablity vector |
naiveBayesPredict¶
#include "xf_data_analytics/classification/naive_bayes.hpp"
template < int CH_NM, int GRP_NM > void naiveBayesPredict ( const int num_of_class, const int num_of_term, hls::stream <ap_uint <64>>& i_theta_strm, hls::stream <ap_uint <64>>& i_prior_strm, hls::stream <ap_uint <32>> i_data_strm [CH_NM], hls::stream <bool>& i_e_strm, hls::stream <ap_uint <10>>& o_class_strm, hls::stream <bool>& o_e_strm )
naiveBayesPredict, top function of multinomial Naive Bayes Prediction
The function will firstly load the train model into on-chip memory, and calculate the classfication results for each sample using argmax function.
Parameters:
CH_NM | the number of channel for input sample data, should be power of 2 |
GRP_NM | the unroll factor for handling the classes simultaneously, must be power of 2 in 1~256 |
num_of_term | the number of class, should be exactly same with the input dataset |
num_of_term | the number of feature, should be exactly same with the input dataset |
i_theta_strm | the input likehood probability stream, [num_of_class][num_of_term] |
i_prior_strm | the input prior probability stream, [num_of_class] |
i_data_strm | the input of test data stream |
i_e_strm | end flag stream for i_data_strm |
o_class_strm | the prediction result for each input sample |
o_e_strm | end flag stream for o_class_strm |
svmPredict¶
#include "xf_data_analytics/classification/svm_predict.hpp"
template < typename MType, unsigned WD, unsigned StreamN, unsigned SampleDepth > void svmPredict ( const int cols, hls::stream <MType> sample_strm [StreamN], hls::stream <bool>& e_sample_strm, hls::stream <ap_uint <512>>& weight_strm, hls::stream <bool>& eTag, hls::stream <ap_uint <1>>& predictionsStrm, hls::stream <bool>& predictionsTag )
svmPredict, Top function of svm Predict.
This function first loads weight (the corresponding function : getWeight) from weight_strm Then, read sample from sample_strm, and output its classification id into predictionsStrm streams
Parameters:
MType | The data type of sample |
WD | The width of data type MType, can get by sizeof(MType) |
StreamN | The stream number of input sample stream vector |
SampleDepth | stream depth number of one input sample |
cols | colum number of input data sample |
sample_strm | Input data streams of MType |
e_sample_strm | End flag stream for input data |
weight_strm | weight streams |
eTag | End flag stream for weight streams |
predictionsStrm | Output data streams |
predictionsTagStrm | End flag stream for output |
Hardware Functions in xf::data_analytics::clustering
¶
kMeansPredict¶
#include "xf_data_analytics/clustering/kmeansPredict.hpp"
template < typename DT, int Dim, int Kcluster, int uramDepth, int KU, int DV > void kMeansPredict ( hls::stream <ap_uint <sizeof (DT)*8>> sampleStrm [DV], hls::stream <bool>& endSampleStrm, ap_uint <sizeof (DT)*8*DV> centers [KU][uramDepth], const int dims, const int kcluster, hls::stream <ap_uint <32>>& tagStrm, hls::stream <bool>& endTagStrm )
kMeansPredict predicts cluster index for each sample. In order to achive to acceleration, please make sure partition 1-dim of centers.
Parameters:
DT | data type, supporting float and double |
Dim | the maximum number of dimensions,dynamic number of dimension should be not greater than the maximum. |
Kcluster | the maximum number of cluster,dynamic number of cluster should be not greater than the maximum. |
uramDepth | the depth of uram where centers are stored. uramDepth should be not less than ceiling(Kcluster/KU)
|
KU | unroll factor of Kcluster, KU centers are took part in calculating distances concurrently with one sample. After Kcluster/KU+1 times at most, ouput the minimum distance of a sample and Kcluster centers. |
DV | unroll factor of Dim, DV elements in a center are took part in calculating distances concurrently with one sample. |
sampleStrm | input sample streams, a sample needs ceiling(dims/DV) times to read. |
endSampleStrm | the end flag of sample stream. |
centers | an array stored centers, user should partition dim=1 in its defination. |
dims | the number of dimensions. |
kcluster | the number of clusters. |
tagStrm | tag stream, label a cluster ID for each sample. |
endTagStrm | end flag of tag stream. |
Hardware Functions in xf::data_analytics::regression
¶
decisionTreePredict¶
#include "xf_data_analytics/regression/decision_tree_predict.hpp"
template < typename MType, unsigned int WD, unsigned int MAX_FEA_NUM, unsigned int MAX_TREE_DEPTH = 10 > void decisionTreePredict ( hls::stream <ap_uint <WD>> dstrm_batch [MAX_FEA_NUM], hls::stream <bool>& estrm_batch, hls::stream <ap_uint <512>>& treeStrm, hls::stream <bool>& treeTag, hls::stream <MType>& predictionsStrm, hls::stream <bool>& predictionsTag )
decisionTreePredict, Top function of Decision Tree Predict.
This function first loads decision tree (the corresponding function : getTree) from treeStrm Then, read sample one by one from dstrm_batch, and output its category id into predictionsStrm streams
Note that the treeStrm is a 512-bit stream, and each 512 bits include two nodes. In each 512-bit confirm the range(0,71) is node[i].nodeInfo and range(256,327) is node[i+1].nodeInfo the range(72,135) is node[i].regValue and range(328,391) is node[i+1].regValue the range(192,255) is node[i].threshold and range(448,511) is node[i+1].threshold For detailed info of NodeR struct, can refer “decision_tree_L1.hpp” Samples in input sample stream should be converted into ap_uint<WD> from MType
Parameters:
MType | The data type of sample |
WD | The width of data type MType, can get by sizeof(MType) |
MAX_FEA_NUM | The max feature num function can support |
MAX_TREE_DEPTH | The max tree depth function can support |
dstrm_batch | Input data streams of ap_uint<WD> |
estrm_batch | End flag stream for input data |
treeStrm | Decision tree streams |
treeTag | End flag stream for decision tree nodes |
predictionsStrm | Output regression value streams |
predictionsTagStrm | End flag stream for output |
Hardware Functions in xf::data_analytics::text
¶
editDistance¶
#include "xf_data_analytics/text/editDistance.hpp"
template < int N, int M, int BITS > void editDistance ( hls::stream <ap_uint <BITS>>& len1_strm, hls::stream <ap_uint <64>>& query_strm, hls::stream <ap_uint <BITS>>& len2_strm, hls::stream <ap_uint <64>>& input_strm, hls::stream <ap_uint <BITS>>& max_ed_strm, hls::stream <bool>& i_e_strm, hls::stream <bool>& o_e_strm, hls::stream <bool>& o_match_strm )
Levenshtein distance implementation.
Parameters:
N | maximum length of query string. |
M | maximum length of input stream string, N must be less than M. |
BITS | data width of internal edit distance in bits. |
len1_strm | length of the query string in bytes. |
query_strm | the query string folded into mutiple 8B elements. |
len2_strm | length of each input string in bytes. |
input_strm | input strings to compute edit distance against the given query string, which is folded into multiple 8B elements. |
max_ed_strm | the maximum threshold of edit distance. |
i_e_strm | end flag of input_strm and max_ed_strm. |
o_e_strm | end flag of output matched stream. |
o_match_strm | only the calculated ED less than threshold in max_ed_strm will be TRUE. |
regexVM¶
#include "xf_data_analytics/text/regexVM.hpp"
template <int STACK_SIZE> void regexVM ( ap_uint <32>* bitSetBuff, ap_uint <64>* instrBuff, ap_uint <32>* msgBuff, unsigned int lenMsg, ap_uint <2>& match, ap_uint <16>* offsetBuff )
Implementation for regular expression VM (1 instruction per iteration).
Parameters:
STACK_SIZE | Size of internal stack. |
bitSetBuff | Bit set map for character class. |
instrBuff | Instruction buffer. |
msgBuff | Message buffer as input string. |
lenMsg | Length of input string. |
match | Flag to indicate whether the input string is matched or not, 0 for mismatch, 1 for match, 2 for stack overflow. |
offsetBuff | Offset address for each capturing group. |
regexVM_opt¶
#include "xf_data_analytics/text/regexVM.hpp"
template <int STACK_SIZE> void regexVM_opt ( ap_uint <32>* bitSetBuff, ap_uint <64>* instrBuff, ap_uint <32>* msgBuff, unsigned int lenMsg, ap_uint <2>& match, ap_uint <16>* offsetBuff )
Implementation for regular expression VM (2 instructions per iteration).
Parameters:
STACK_SIZE | Size of internal stack. |
bitSetBuff | Bit set map for cclass. |
instrBuff | Instruction buffer. |
msgBuff | Message buffer as input string. |
lenMsg | Length of input string. |
match | Flag to indicate whether the input string is matched or not, 0 for mismatch, 1 for match, 2 for stack overflow. |
offsetBuff | Offset address for each capturing group. |
Hardware Functions in xf::data_analytics::dataframe
¶
csvParser¶
#include "xf_data_analytics/dataframe/csv_parser.hpp"
template <int PU_NUM = 8> void csvParser ( ap_uint <128>* csv_buf, ap_uint <8>* schema, hls::stream <Object>& o_obj_strm )
read one standard CSV file from DDR and parse into object stream with schma defination
Parameters:
PU_NUM | number of CSV parse core, only support 2/4/8 |
csv_buf | buffer of CSV file |
schema | name, data type and is_filter flag for each column |
o_obj_strm | output object stream for selected columns |
jsonParser¶
#include "xf_data_analytics/dataframe/json_parser.hpp"
template < int PU_NUM = 4, int COL_NUM = 16 > void jsonParser ( ap_uint <128>* json_buf, ap_uint <8>* schema, hls::stream <Object>& o_obj_strm )
read one standard JSON file from DDR and parse into object stream with schma defination
Parameters:
PU_NUM | number of JSON parse core, only support 2/4/8 |
COL_NUM | number of maximum column, should be power of 2 |
json_buf | buffer of JSON file |
schema | name, data type and is_filter flag for each column |
o_obj_strm | output object stream for selected columns |
readFromDataFrame¶
#include "xf_data_analytics/dataframe/read_from_dataframe.hpp"
void readFromDataFrame ( int field_type [17], ap_uint <64>* ddr_buff, hls::stream <Object>& obj_strm )
read the data frame format data from DDR and pack into object streams
Parameters:
field_type | the data type of each field id (may obtained from schema) |
ddr_buff | the ddr that saves data |
obj_strm | output Object stream |
writeToDataFrame¶
#include "xf_data_analytics/dataframe/write_to_dataframe.hpp"
void writeToDataFrame ( hls::stream <Object>& obj_strm, ap_uint <64>* ddr_buff )
write object stream data to DDR
all field_id in each json line is unique maximum supported field_id number is 16
Parameters:
obj_strm | input stream data with type Object Struct |
ddr_buff | DDR buffer to save parserd data in DataFrame format |
Software C Functions¶
xf_re_compile¶
#include "xf_data_analytics/text/xf_re_compile.h"
int xf_re_compile ( const char* pattern, unsigned int* bitset, uint64_t* instructions, unsigned int* instr_num, unsigned int* cclass_num, unsigned int* cpgp_nm, uint8_t* cpgp_name_val, uint32_t* cpgp_name_oft )
Software compiler for pre-compiling input regular expression.
Parameters:
pattern | Input regular expression. |
bitset | Bit set map for each character class. |
instructions | Compiled instruction list derived from input pattern. |
instr_num | Number of instructions. |
cclass_num | Number of character classes. |
cpgp_nm | Number of capturing groups. |
cpgp_name_val | Buffer of every name of each capturing group. |
cpgp_name_oft | Starting offset addresses for the name of each capturing group. |