namespace internal

// structs

template <typename DT>
struct dataTypeConverter

template <>
struct maxMinValue <double>

template <>
struct maxMinValue <float>

template <typename DT>
struct maxMinValue

// unions

template <typename DT>
union conv

template <>
union conv <float>

template <>
union conv <double>

// global variables

const int NUMS

computingDistance

#include "xf_data_analytics/clustering/kmeansPredict.hpp"
template <
    typename DT,
    int Dim,
    int Kcluster,
    int uramDepth,
    int KU,
    int DV
    >
void computingDistance (
    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 <DT> distStrm [KU],
    hls::stream <bool>& eDistStrm
    )

computingDistance calculates distance of each sample and all 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)

  • ceil(Dim/DV)
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
endSampleStrm the end flag of sample stream
centers an array stored centers
dims the number of dimensions
kcluster the number of clusters
distStrm distance streams
eDistStrm the end flag of distance stream

minDist

#include "xf_data_analytics/clustering/kmeansPredict.hpp"
template <
    typename DT,
    int Dim,
    int Kcluster,
    int KU
    >
void minDist (
    hls::stream <DT> distStrm [KU],
    hls::stream <bool>& eDistStrm,
    const int kcluster,
    hls::stream <ap_uint <32>>& tagStrm,
    hls::stream <bool>& eTagStrm
    )

minDist calculates the cluster index according to the minimum distance of each sample and all 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)

  • ceil(Dim/DV)
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.
distStrm distance streams
eDistStrm the end flag of distance stream
kcluster the number of clusters
tagStrm tag stream, label a cluster ID for each sample
eTagStrm end flag of tag stream

closestCenter

#include "xf_data_analytics/clustering/kmeansPredict.hpp"
template <
    typename DT,
    int Dim,
    int Kcluster,
    int uramDepth,
    int KU,
    int DV
    >
void closestCenter (
    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>& eTagStrm
    )

closetCenters computes the cluster index according to the minimum distance of each sample and all 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)

  • ceil(Dim/DV)
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
endSampleStrm the end flag of sample stream
centers an array stored centers
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

kMeansPredictImp

#include "xf_data_analytics/clustering/kmeansPredict.hpp"
template <
    typename DT,
    int Dim,
    int Kcluster,
    int uramDepth,
    int KU,
    int DV
    >
void kMeansPredictImp (
    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.

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)

  • ceil(Dim/DV)
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.