forked from mindspore-Ecosystem/mindspore
support to codegen new nnacl kernelBase
This commit is contained in:
parent
51c0c3e97a
commit
03bc64d006
|
@ -10,6 +10,12 @@ function(__install_micro_wrapper)
|
||||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||||
install(DIRECTORY ${NNACL_DIR}/fp32 DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
install(DIRECTORY ${NNACL_DIR}/fp32 DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||||
|
install(DIRECTORY ${NNACL_DIR}/kernel DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||||
|
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||||
|
install(DIRECTORY ${NNACL_DIR}/infer DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||||
|
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||||
|
install(DIRECTORY ${NNACL_DIR}/experimental DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||||
|
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||||
install(DIRECTORY ${NNACL_DIR}/intrinsics DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
install(DIRECTORY ${NNACL_DIR}/intrinsics DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||||
install(DIRECTORY ${MICRO_DIR}/coder/wrapper DESTINATION ${CODEGEN_ROOT_DIR}/include
|
install(DIRECTORY ${MICRO_DIR}/coder/wrapper DESTINATION ${CODEGEN_ROOT_DIR}/include
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "nnacl/pooling_parameter.h"
|
#include "nnacl/pooling_parameter.h"
|
||||||
|
|
||||||
namespace mindspore::lite::micro::nnacl {
|
namespace mindspore::lite::micro::nnacl {
|
||||||
|
int NNaclFp32Serializer::count = 0;
|
||||||
void NNaclFp32Serializer::CodeStruct(const std::string &name, const PoolingParameter &pooling_parameter) {
|
void NNaclFp32Serializer::CodeStruct(const std::string &name, const PoolingParameter &pooling_parameter) {
|
||||||
CodeBaseStruct("PoolingParameter", name,
|
CodeBaseStruct("PoolingParameter", name,
|
||||||
// Primitive parameter
|
// Primitive parameter
|
||||||
|
@ -166,4 +167,28 @@ void NNaclFp32Serializer::CodeStruct(const std::string &name, const GroupNormPar
|
||||||
CodeBaseStruct("GroupNormParameter", name, gn_param.op_parameter_, gn_param.epsilon_, gn_param.num_groups_,
|
CodeBaseStruct("GroupNormParameter", name, gn_param.op_parameter_, gn_param.epsilon_, gn_param.num_groups_,
|
||||||
gn_param.channel_, gn_param.unit_, gn_param.batch_, gn_param.affine_);
|
gn_param.channel_, gn_param.unit_, gn_param.batch_, gn_param.affine_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NNaclFp32Serializer::CodeStruct(const std::string &name, const OpParameter &op_param) {
|
||||||
|
CodeBaseStruct<false>("OpParameter", name, op_param.name_, op_param.type_, op_param.thread_num_, op_param.quant_type_,
|
||||||
|
op_param.is_train_session_, op_param.is_zero_shape_);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NNaclFp32Serializer::CodeArrayStruct(const std::string &name, TensorC *tensorC, std::vector<Tensor *> tensor) {
|
||||||
|
std::vector<std::string> tensor_names;
|
||||||
|
int size = tensor.size();
|
||||||
|
for (int i = 0; i < size; ++i) {
|
||||||
|
std::string tensor_name = "tensor" + std::to_string(count++);
|
||||||
|
CodeBaseStruct<false>("TensorC", name, tensor_name, tensorC[i].is_ready_, tensorC[i].data_type_, tensorC[i].format_,
|
||||||
|
tensor[i], tensorC[i].shape_size_, ToString(tensorC[i].shape_));
|
||||||
|
tensor_names.emplace_back(tensor_name);
|
||||||
|
}
|
||||||
|
code << " TensorC"
|
||||||
|
<< " " << name << "[" << std::to_string(size) << "]"
|
||||||
|
<< " = {";
|
||||||
|
for (int i = 0; i < size - 1; ++i) {
|
||||||
|
code << tensor_names[i] << ", ";
|
||||||
|
}
|
||||||
|
code << tensor_names[size - 1];
|
||||||
|
code << "};\n";
|
||||||
|
}
|
||||||
} // namespace mindspore::lite::micro::nnacl
|
} // namespace mindspore::lite::micro::nnacl
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#define MINDSPORE_LITE_TOOLS_CONVERTER_MICRO_CODER_OPCODERS_SERIALIZERS_NNACL_SERIALIZER_NNACL_FP32_SERIALIZER_H_
|
#define MINDSPORE_LITE_TOOLS_CONVERTER_MICRO_CODER_OPCODERS_SERIALIZERS_NNACL_SERIALIZER_NNACL_FP32_SERIALIZER_H_
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <vector>
|
||||||
#include "coder/opcoders/serializers/serializer.h"
|
#include "coder/opcoders/serializers/serializer.h"
|
||||||
#include "nnacl/batchnorm_parameter.h"
|
#include "nnacl/batchnorm_parameter.h"
|
||||||
#include "nnacl/fp32/arithmetic_fp32.h"
|
#include "nnacl/fp32/arithmetic_fp32.h"
|
||||||
|
@ -35,6 +36,7 @@
|
||||||
#include "wrapper/fp32/dequant_int8_to_fp32_wrapper.h"
|
#include "wrapper/fp32/dequant_int8_to_fp32_wrapper.h"
|
||||||
#include "nnacl/fp32/exp_fp32.h"
|
#include "nnacl/fp32/exp_fp32.h"
|
||||||
#include "nnacl/fp32/strided_slice_fp32.h"
|
#include "nnacl/fp32/strided_slice_fp32.h"
|
||||||
|
#include "nnacl/tensor_c.h"
|
||||||
#include "wrapper/fp32/arithmetic_fp32_wrapper.h"
|
#include "wrapper/fp32/arithmetic_fp32_wrapper.h"
|
||||||
#include "wrapper/base/affine_wrapper.h"
|
#include "wrapper/base/affine_wrapper.h"
|
||||||
#include "wrapper/fp32/conv_winograd_fp32_wrapper.h"
|
#include "wrapper/fp32/conv_winograd_fp32_wrapper.h"
|
||||||
|
@ -63,6 +65,11 @@ class NNaclFp32Serializer : public Serializer {
|
||||||
void CodeStruct(const std::string &name, const SpliceWrapperParam &splice_param);
|
void CodeStruct(const std::string &name, const SpliceWrapperParam &splice_param);
|
||||||
void CodeStruct(const std::string &name, const TransFuncStr trans_func_str);
|
void CodeStruct(const std::string &name, const TransFuncStr trans_func_str);
|
||||||
void CodeStruct(const std::string &name, const GroupNormParameter &gn_param);
|
void CodeStruct(const std::string &name, const GroupNormParameter &gn_param);
|
||||||
|
void CodeStruct(const std::string &name, const OpParameter &op_param);
|
||||||
|
void CodeArrayStruct(const std::string &name, TensorC *tensorC, std::vector<Tensor *> tensor);
|
||||||
|
|
||||||
|
private:
|
||||||
|
static int count;
|
||||||
};
|
};
|
||||||
} // namespace mindspore::lite::micro::nnacl
|
} // namespace mindspore::lite::micro::nnacl
|
||||||
#endif // MINDSPORE_LITE_MICRO_CODER_OPCODERS_SERIALIZERS_NNACL_FP32_ERIALIZER_H_
|
#endif // MINDSPORE_LITE_MICRO_CODER_OPCODERS_SERIALIZERS_NNACL_FP32_ERIALIZER_H_
|
||||||
|
|
|
@ -93,6 +93,23 @@ class Serializer {
|
||||||
code << "}\n";
|
code << "}\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Code function call to generated code with return variable
|
||||||
|
* First parameter is the function name, the rest are the parameters of the function
|
||||||
|
* example:
|
||||||
|
* CodeFunctionWithCheck("int op", "function", "foo", "bar", "foobar", 42);
|
||||||
|
* the code above would produce:
|
||||||
|
* """
|
||||||
|
* int op = function("foo", "bar", "foobar", 42)
|
||||||
|
* """
|
||||||
|
*/
|
||||||
|
template <typename... PARAMETERS>
|
||||||
|
void CodeFunctionWithRet(const std::string &ret, const std::string &func_name, PARAMETERS... parameters) {
|
||||||
|
code << " " << ret << " = " << func_name << "(";
|
||||||
|
GenCode(parameters...);
|
||||||
|
code << ");\n";
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* helper function for coding
|
* helper function for coding
|
||||||
* example:
|
* example:
|
||||||
|
|
Loading…
Reference in New Issue