L1 APIs

MLP

The basic components of the FCN are defined in the template class FCN. Frequent used activation functions are also implemented.

namespace mlp

// classes

template <
    typename t_FloatType,
    typename t_XDataType,
    unsigned int t_DdrWidth,
    unsigned int t_XDdrWidth,
    unsigned int t_aColMemWords = 1,
    unsigned int t_aRowMemWords = 1,
    unsigned int t_bColMemWords = 1,
    unsigned int t_maxWSize = 0,
    unsigned int t_maxBSize = 0
    >
class Fcn

relu

#include "mlp/activations.hpp"
template <typename t_DataType>
t_DataType relu (t_DataType x)

relu (rectified linear unit) is a very common activation function in deep neural network

Parameters:

t_DataType is data type
x is the input value

sigmoid

#include "mlp/activations.hpp"
template <typename t_DataType>
t_DataType sigmoid (t_DataType x)

sigmoid function is a very common activation function in MLP

Parameters:

t_DataType is data type
x is the input value

tansig

#include "mlp/activations.hpp"
template <typename t_DataType>
t_DataType tansig (t_DataType x)

tansig function is used as an activation function in some MLPs

Parameters:

t_DataType is data type
x is the input value

CG Solver

Some basic CG components are defined under the namespace cg

namespace cg

// classes

template <typename t_DataType>
class Task

template <typename t_DataType>
class Token

Reverse Time Migration

Here describes the basic components for solving wave equations by explicit FDTD method, and components for RTM. These components are further classified according to the problems’ dimentions e.g. 2D or 3D.

Data Movers

Data movers are implemented for kernel memory communication, dataType conversion and stream datawidth conversion.

namespace rtm

// classes

template <
    int t_MaxDimZ,
    int t_MaxDimY,
    int t_HalfOrder,
    int t_PEZ,
    int t_PEX,
    int t_NumSM
    >
class Domain3D

template <
    typename t_DataType,
    int t_Order,
    int t_MaxDim = 1024,
    int t_MaxB = 40,
    int t_PE = t_Order / 2
    >
class RTM2D

template <
    typename t_Domain,
    typename t_DataType,
    int t_Order,
    int t_MaxDimZ = 128,
    int t_MaxDimY = 128,
    int t_MaxB = 40,
    int t_PEZ = 1,
    int t_PEX = 1
    >
class RTM3D

template <
    typename t_DataType,
    int t_Order,
    int t_MaxDim = 1024,
    int t_PE = 1
    >
class Stencil2D

template <
    typename t_DataType,
    int t_Order,
    int t_MaxDimZ = 128,
    int t_MaxDimY = 128,
    int t_PEZ = 1,
    int t_PEX = 1
    >
class Stencil3D

memSelStream

#include "rtm/dataMover.hpp"
template <
    typename t_InterfaceType,
    typename t_DataType
    >
void memSelStream (
    unsigned int p_n,
    unsigned int p_k,
    t_InterfaceType* p_mem0,
    t_InterfaceType* p_mem1,
    hls::stream <t_DataType>& p_str
    )

memSelStream reads data alternatively from two memory addresses to a stream

Parameters:

t_InterfaceType is the datatype in memory
t_DataType is the datatype in of the stream
p_n is the number of data to be read
p_k is the selection
p_mem0 is the first memory port
p_mem1 is the second memory port
p_str is the output stream

streamSelMem

#include "rtm/dataMover.hpp"
template <
    typename t_InterfaceType,
    typename t_DataType
    >
void streamSelMem (
    unsigned int p_n,
    unsigned int p_k,
    t_InterfaceType* p_mem0,
    t_InterfaceType* p_mem1,
    hls::stream <t_DataType>& p_str
    )

streamSelMem reads write alternatively to two memory addresses from a stream

Parameters:

t_InterfaceType is the datatype in memory
t_DataType is the datatype in of the stream
p_n is the number of data to be read
p_k is the selection
p_mem0 is the first memory port
p_mem1 is the second memory port
p_str is the input stream