diff options
Diffstat (limited to 'compiler/souschef/include/souschef')
-rw-r--r-- | compiler/souschef/include/souschef/Data/Explicit.h | 56 | ||||
-rw-r--r-- | compiler/souschef/include/souschef/Data/Gaussian.h | 63 | ||||
-rw-r--r-- | compiler/souschef/include/souschef/DataChef.def | 19 | ||||
-rw-r--r-- | compiler/souschef/include/souschef/Dims.h | 1 |
4 files changed, 120 insertions, 19 deletions
diff --git a/compiler/souschef/include/souschef/Data/Explicit.h b/compiler/souschef/include/souschef/Data/Explicit.h index 6e5ee819e..434d0ec2c 100644 --- a/compiler/souschef/include/souschef/Data/Explicit.h +++ b/compiler/souschef/include/souschef/Data/Explicit.h @@ -59,6 +59,27 @@ private: std::vector<T> _values; }; +template <> class ExplicitDataChef<std::string> final : public DataChef +{ +public: + ExplicitDataChef() + { + // DO NOTHING + } + +public: + std::vector<uint8_t> generate(int32_t count) const override; + +public: + void insert(const std::string &value) { _values.emplace_back(value); } + +private: + void write_value(std::vector<uint8_t> &res, int32_t value) const; + +private: + std::vector<std::string> _values; +}; + template <typename T> struct ExplicitDataChefFactory : public DataChefFactory { std::unique_ptr<DataChef> create(const Arguments &args) const @@ -75,6 +96,41 @@ template <typename T> struct ExplicitDataChefFactory : public DataChefFactory } }; +class ExplicitFloat16DataChef final : public DataChef +{ +public: + ExplicitFloat16DataChef() + { + // DO NOTHING + } + +public: + std::vector<uint8_t> generate(int32_t count) const override; + +public: + void insert(const float &value) { _values.emplace_back(value); } + +private: + // NOTE store values in float but will convert to uint16_t in generate() + std::vector<float> _values; +}; + +struct ExplicitFloat16DataChefFactory : public DataChefFactory +{ + std::unique_ptr<DataChef> create(const Arguments &args) const + { + std::unique_ptr<ExplicitFloat16DataChef> res{new ExplicitFloat16DataChef}; + + for (uint32_t n = 0; n < args.count(); ++n) + { + auto const value = to_number<float>(args.value(n)); + res->insert(value); + } + + return std::move(res); + } +}; + } // namespace souschef #endif // __SOUSCHEF_DATA_EXPLICIT_H__ diff --git a/compiler/souschef/include/souschef/Data/Gaussian.h b/compiler/souschef/include/souschef/Data/Gaussian.h index 75570e0b8..801bff8e9 100644 --- a/compiler/souschef/include/souschef/Data/Gaussian.h +++ b/compiler/souschef/include/souschef/Data/Gaussian.h @@ -41,6 +41,22 @@ private: float _stddev; }; +class GaussianFloat16DataChef final : public DataChef +{ +public: + GaussianFloat16DataChef(float mean, float stddev) : _mean{mean}, _stddev{stddev} + { + // DO NOTHING + } + +public: + std::vector<uint8_t> generate(int32_t count) const override; + +private: + float _mean; + float _stddev; +}; + class GaussianInt32DataChef final : public DataChef { public: @@ -57,6 +73,22 @@ private: float _stddev; }; +class GaussianInt16DataChef final : public DataChef +{ +public: + GaussianInt16DataChef(float mean, float stddev) : _mean{mean}, _stddev{stddev} + { + // DO NOTHING + } + +public: + std::vector<uint8_t> generate(int32_t count) const override; + +private: + float _mean; + float _stddev; +}; + class GaussianUint8DataChef final : public DataChef { public: @@ -73,6 +105,22 @@ private: float _stddev; }; +class GaussianInt8DataChef final : public DataChef +{ +public: + GaussianInt8DataChef(float mean, float stddev) : _mean{mean}, _stddev{stddev} + { + // DO NOTHING + } + +public: + std::vector<uint8_t> generate(int32_t count) const override; + +private: + float _mean; + float _stddev; +}; + struct GaussianFloat32DataChefFactory : public DataChefFactory { std::unique_ptr<DataChef> create(const Arguments &args) const; @@ -83,11 +131,26 @@ struct GaussianInt32DataChefFactory : public DataChefFactory std::unique_ptr<DataChef> create(const Arguments &args) const; }; +struct GaussianInt16DataChefFactory : public DataChefFactory +{ + std::unique_ptr<DataChef> create(const Arguments &args) const; +}; + struct GaussianUint8DataChefFactory : public DataChefFactory { std::unique_ptr<DataChef> create(const Arguments &args) const; }; +struct GaussianFloat16DataChefFactory : public DataChefFactory +{ + std::unique_ptr<DataChef> create(const Arguments &args) const; +}; + +struct GaussianInt8DataChefFactory : public DataChefFactory +{ + std::unique_ptr<DataChef> create(const Arguments &args) const; +}; + } // namespace souschef #endif // __SOUSCHEF_DATA_GAUSSIAN_H__ diff --git a/compiler/souschef/include/souschef/DataChef.def b/compiler/souschef/include/souschef/DataChef.def deleted file mode 100644 index 28901db18..000000000 --- a/compiler/souschef/include/souschef/DataChef.def +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef DATA_CHEF -#error "Define DATA_CHEF first" -#endif // DATA_CHEF - -// DATA_CHEF(TYPE, NAME, FACTORY_CLASS) -// "TYPE" SHOULD BE an enum tag of tflchef::TensorType -DATA_CHEF(FLOAT32, constant, ConstantDataChefFactory<float>) -DATA_CHEF(BOOL, constant, ConstantDataChefFactory<bool>) -DATA_CHEF(UINT8, constant, ConstantDataChefFactory<uint8_t>) -DATA_CHEF(INT32, constant, ConstantDataChefFactory<int32_t>) -DATA_CHEF(INT64, constant, ConstantDataChefFactory<int64_t>) -DATA_CHEF(INT64, explicit, ExplicitDataChefFactory<int64_t>) -DATA_CHEF(INT32, explicit, ExplicitDataChefFactory<int32_t>) -DATA_CHEF(UINT8, explicit, ExplicitDataChefFactory<uint8_t>) -DATA_CHEF(BOOL, explicit, ExplicitDataChefFactory<bool>) -DATA_CHEF(FLOAT32, explicit, ExplicitDataChefFactory<float>) -DATA_CHEF(FLOAT32, gaussian, GaussianFloat32DataChefFactory) -DATA_CHEF(INT32, gaussian, GaussianInt32DataChefFactory) -DATA_CHEF(UINT8, gaussian, GaussianUint8DataChefFactory) diff --git a/compiler/souschef/include/souschef/Dims.h b/compiler/souschef/include/souschef/Dims.h index 52c64dd47..fabbf3f95 100644 --- a/compiler/souschef/include/souschef/Dims.h +++ b/compiler/souschef/include/souschef/Dims.h @@ -17,6 +17,7 @@ #ifndef __SOUSCHEF_DIMS_H__ #define __SOUSCHEF_DIMS_H__ +#include <cstdint> #include <functional> #include <numeric> #include <vector> |