mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-30 23:18:20 +00:00
* Implement Nuphar execution provider Nuphar execution provider is a TVM-based compilation provider. It has shown great speedups for RNN models using Scan. This PR is mainly for a preview of the shared codegen library for other TVM-based providers. * Fix submodules * Fix TVM submodule * Update Nuphar to latest and resolve confliction * Remove stale files caused by merge -X theirs * Revert heap buffer change to not introduce onnxruntime_framework into onnxruntime_perf_test * Fix bad merge * Merge from Nuphar * Fix warning treated as error, revert some unnecessary changes * Revert some more test changes * Some more test revert or comments to make review easier New tests could be added later * One more revert of unnecessary changes * More change revert. Test could be added back later.
76 lines
3 KiB
C++
76 lines
3 KiB
C++
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
#pragma once
|
|
#include "core/codegen/common/dispatcher.h"
|
|
|
|
// TODO rename this file to creator_base
|
|
namespace onnxruntime {
|
|
namespace codegen {
|
|
|
|
// It is a base class for TVM Op IR builder, weight layout builder, TVM scheduler
|
|
// CreatorBase is a template class of compiler pass
|
|
// for 1) TVM IR builder
|
|
// 2) Weight layout transformer
|
|
// 3) TVM Scheduler, etc.
|
|
// CreatorBase is similor to OpXXCreate in llvm IR builder
|
|
|
|
template <typename INPUT_TYPE,
|
|
typename NODE_TYPE,
|
|
typename CONTEXT_TYPE,
|
|
typename OUTPUT_TYPE,
|
|
typename RETURN_TYPE>
|
|
class CreatorBase {
|
|
public:
|
|
CreatorBase(const std::string& name)
|
|
: name_(name) {}
|
|
|
|
virtual ~CreatorBase() = default;
|
|
|
|
virtual RETURN_TYPE Evaluate(INPUT_TYPE,
|
|
NODE_TYPE,
|
|
CONTEXT_TYPE,
|
|
OUTPUT_TYPE) = 0;
|
|
|
|
const std::string& Name() const {
|
|
return name_;
|
|
}
|
|
|
|
protected:
|
|
std::string name_;
|
|
ORT_DISALLOW_COPY_ASSIGNMENT_AND_MOVE(CreatorBase);
|
|
};
|
|
|
|
// macro to stringize
|
|
#define STRINGIZE_NX(OP) #OP
|
|
#define STRINGIZE(OP) STRINGIZE_NX(OP)
|
|
|
|
// macro returns class name
|
|
#define CREATOR_CLASS(OP, POSTFIX) \
|
|
OP##POSTFIX
|
|
|
|
// macro returns class name as string
|
|
#define CREATOR_STRING(OP, POSTFIX) \
|
|
STRINGIZE(CREATOR_CLASS(OP, POSTFIX))
|
|
|
|
// macro returns class constructor name
|
|
#define CREATOR_CLASS_FUNC(OP, POSTFIX) \
|
|
OP##POSTFIX()
|
|
|
|
// macro declares a creator class inheriting the template class CreatorBase
|
|
// with corresponding template parameters
|
|
#define DECLARE_CREATOR_CLASS(OP, POSTFIX, INPUT, NODE, CONTEXT, OUTPUT, RETURN) \
|
|
class CREATOR_CLASS(OP, POSTFIX) : public onnxruntime::codegen::CreatorBase<INPUT, NODE, CONTEXT, OUTPUT, RETURN> { \
|
|
public: \
|
|
CREATOR_CLASS_FUNC(OP, POSTFIX) : CreatorBase(CREATOR_STRING(OP, POSTFIX)) {} \
|
|
RETURN Evaluate(INPUT, \
|
|
NODE, \
|
|
CONTEXT, \
|
|
OUTPUT) override; \
|
|
\
|
|
private: \
|
|
ORT_DISALLOW_COPY_ASSIGNMENT_AND_MOVE(CREATOR_CLASS(OP, POSTFIX)); \
|
|
};
|
|
|
|
} // namespace codegen
|
|
} // namespace onnxruntime
|