@@ -17,44 +17,25 @@ namespace cv
1717{
1818namespace cann
1919{
20- struct AclAttribute
21- {
22- virtual ~AclAttribute () = default ;
23- virtual void addAttr (aclopAttr* opAttr) = 0;
24- };
25-
26- #define DEFINE_ATTR_DECLEAR (FUNC, TYPE ) \
27- class Acl ##FUNC##Attribute : public AclAttribute \
28- { \
29- const char * name; \
30- TYPE value; \
31- \
32- public: \
33- Acl##FUNC##Attribute(const char * _name, TYPE _value) : name(_name), value(_value){}; \
34- void addAttr (aclopAttr* opAttr) CV_OVERRIDE; \
35- }
36-
37- #define DEFINE_ATTR_LIST_DECLEAR (FUNC, TYPE ) \
38- class AclList ##FUNC##Attribute : public AclAttribute \
39- { \
40- const char * name; \
41- TYPE value; \
42- int num; \
43- \
44- public: \
45- AclList##FUNC##Attribute(const char * _name, int _num, TYPE _value) \
46- : name(_name), value(_value), num(_num){}; \
47- void addAttr (aclopAttr* opAttr) CV_OVERRIDE; \
48- }
49-
50- DEFINE_ATTR_DECLEAR (Float, float );
51- DEFINE_ATTR_DECLEAR (String, const char *);
52- DEFINE_ATTR_DECLEAR (Int, int );
53- DEFINE_ATTR_DECLEAR (Bool, bool );
54- DEFINE_ATTR_LIST_DECLEAR (Int, int64_t *);
55-
56- #undef DEFINE_ATTR_DECLEAR
57- #undef DEFINE_ATTR_LIST_DECLEAR
20+ void aclrtMallocWarpper (void ** data, size_t size);
21+ void aclrtFreeWarpper (void * data);
22+ void aclrtMemcpyWarpper (std::shared_ptr<uchar>& dst, size_t offset, const void * src, size_t size,
23+ AscendStream& stream);
24+ void aclrtMemcpyWarpper (void * dst, const std::shared_ptr<uchar>& src, size_t offset, size_t size,
25+ AscendStream& stream);
26+ void aclrtMemcpyWarpper (std::shared_ptr<uchar>& dst, size_t dstOffset,
27+ const std::shared_ptr<uchar>& src, size_t srcOffset, size_t size,
28+ AscendStream& stream);
29+ void aclrtMemcpy2dWarpper (std::shared_ptr<uchar>& dst, size_t offset, size_t dpitch,
30+ const void * src, size_t spitch, size_t width, size_t length,
31+ AscendStream& stream);
32+ void aclrtMemcpy2dWarpper (void * dst, size_t dpitch, const std::shared_ptr<uchar>& src,
33+ size_t offset, size_t spitch, size_t width, size_t length,
34+ AscendStream& stream);
35+ void aclrtMemsetWarpper (std::shared_ptr<uchar>& ptr, int32_t value, size_t count,
36+ AscendStream& stream);
37+ std::shared_ptr<uchar> mallocAndUpload (const void * data, size_t size, AscendStream& stream,
38+ AscendMat::Allocator* allocator);
5839
5940class AscendStream ::Impl
6041{
@@ -66,6 +47,7 @@ class AscendStream::Impl
6647 explicit Impl (aclrtStream stream);
6748 void AddTensorHolder (const std::shared_ptr<uchar>& tensorData);
6849};
50+
6951class AscendEvent ::Impl
7052{
7153public:
@@ -76,58 +58,72 @@ class AscendEvent::Impl
7658 explicit Impl (aclrtEvent event);
7759 ~Impl ();
7860};
61+
7962struct AscendTensor
8063{
81- std::string name;
64+ const char * name;
8265 std::shared_ptr<uchar> data;
8366 size_t dataSize;
8467 std::vector<int64_t > dims;
8568 aclDataType dtype;
8669 aclFormat format;
8770 AscendTensor (){};
8871 AscendTensor (std::shared_ptr<uchar> _data, size_t _dataSize, int64_t * _dims, size_t _dimSize,
89- aclDataType _dtype, std::string _name = " " , aclFormat _format = ACL_FORMAT_ND);
72+ aclDataType _dtype, const char * _name = " " , aclFormat _format = ACL_FORMAT_ND);
9073 AscendTensor (std::shared_ptr<uchar> _data, size_t _dataSize, std::vector<int64_t >& _dims,
91- aclDataType _dtype, std::string _name = " " , aclFormat _format = ACL_FORMAT_ND)
74+ aclDataType _dtype, const char * _name = " " , aclFormat _format = ACL_FORMAT_ND)
9275 : name(_name), data(_data), dataSize(_dataSize), dims(_dims), dtype(_dtype),
9376 format (_format){};
94- AscendTensor (const AscendMat& ascendMat, std::string _name = " " , aclFormat format = ACL_FORMAT_ND);
77+ AscendTensor (const AscendMat& ascendMat, const char * _name = " " ,
78+ aclFormat format = ACL_FORMAT_ND);
9579};
96- void aclrtMallocWarpper (void ** data, size_t size);
97- void aclrtFreeWarpper (void * data);
9880
99- void aclrtMemcpyWarpper (std::shared_ptr<uchar>& dst, size_t offset, const void * src, size_t size,
100- AscendStream& stream);
101- void aclrtMemcpyWarpper (void * dst, const std::shared_ptr<uchar>& src, size_t offset, size_t size,
102- AscendStream& stream);
103- void aclrtMemcpyWarpper (std::shared_ptr<uchar>& dst, size_t dstOffset,
104- const std::shared_ptr<uchar>& src, size_t srcOffset, size_t size,
105- AscendStream& stream);
106- void aclrtMemcpy2dWarpper (std::shared_ptr<uchar>& dst, size_t offset, size_t dpitch,
107- const void * src, size_t spitch, size_t width, size_t length,
108- AscendStream& stream);
109- void aclrtMemcpy2dWarpper (void * dst, size_t dpitch, const std::shared_ptr<uchar>& src,
110- size_t offset, size_t spitch, size_t width, size_t length,
111- AscendStream& stream);
112- void aclrtMemsetWarpper (std::shared_ptr<uchar>& ptr, int32_t value, size_t count,
113- AscendStream& stream);
81+ class OperatorRunner
82+ {
83+ private:
84+ std::vector<aclDataBuffer*> inputBuffers_;
85+ std::vector<aclDataBuffer*> outputBuffers_;
86+ std::vector<aclTensorDesc*> inputDesc_;
87+ std::vector<aclTensorDesc*> outputDesc_;
88+ aclopAttr* opAttr_;
89+ bool opAttrInit;
90+ std::string op;
91+
92+ std::set<std::shared_ptr<uchar>> holder;
93+
94+ OperatorRunner& addInput (AscendTensor& mat);
95+ OperatorRunner& addOutput (AscendTensor& mat);
96+
97+ public:
98+ OperatorRunner () : opAttrInit(false ) {}
99+ virtual ~OperatorRunner () { reset (); }
100+ OperatorRunner& setOp (const char * op);
101+ OperatorRunner& addInput (const AscendMat& mat);
102+ OperatorRunner& addOutput (AscendMat& mat);
103+ OperatorRunner& addAttr (float value, const char * name);
104+ OperatorRunner& addAttr (const char * value, const char * name);
105+ OperatorRunner& addAttr (int value, const char * name);
106+ OperatorRunner& addAttr (bool value, const char * name);
107+ OperatorRunner& addAttr (const int64_t * value, int size, const char * name);
108+ OperatorRunner& addInput (const AscendMat& mat, const char * name);
109+ OperatorRunner& addInput (const Scalar& sc, int type, const char * name);
110+ template <typename T>
111+ OperatorRunner& addInput (const T* value, size_t size, aclDataType type, AscendStream& stream,
112+ const char * name)
113+ {
114+ size_t dataSize = size * sizeof (T);
115+ std::shared_ptr<uchar> axisPtr =
116+ mallocAndUpload (value, dataSize, stream, AscendMat::defaultAllocator ());
117+
118+ int64_t dims[] = {(int64_t )size};
119+ AscendTensor tensor (axisPtr, dataSize, dims, 1 , type, name);
120+ return addInput (tensor);
121+ }
122+ OperatorRunner& addOutput (AscendMat& mat, const char * name);
123+ OperatorRunner& reset ();
124+ OperatorRunner& run (AscendStream& stream);
125+ };
114126
115- static std::vector<AclAttribute*> emptyattr;
116- void callAscendOperator (const char * op, std::vector<AscendTensor>& srcs,
117- std::vector<AscendTensor>& dsts, AscendStream& stream,
118- std::vector<AclAttribute*>& attrs = emptyattr);
119- void callAscendOperator (const AscendMat& src, AscendMat& dst, const char * op, AscendStream& stream,
120- std::vector<AclAttribute*>& attrs = emptyattr);
121- void callAscendOperator (const AscendMat& src1, const AscendMat& src2, AscendMat& dst, const char * op,
122- AscendStream& stream, std::vector<AclAttribute*>& attrs = emptyattr);
123- void callAscendOperator (const AscendMat* srcs, size_t srcCount, AscendMat& dst, const char * op,
124- AscendStream& stream, std::vector<AclAttribute*>& attrs = emptyattr);
125- void callAscendOperator (const AscendMat& src, const Scalar& sc, bool inv, AscendMat& dst, const char * op,
126- AscendStream& stream, std::vector<AclAttribute*>& attrs = emptyattr);
127- void callAscendOperator (const AscendMat& src, AscendMat* dsts, const size_t dstCount, const char * op,
128- AscendStream& stream, std::vector<AclAttribute*>& attrs = emptyattr);
129- std::shared_ptr<uchar> mallocAndUpload (void * data, size_t size, AscendStream& stream,
130- AscendMat::Allocator* allocator = AscendMat::defaultAllocator());
131127} // namespace cann
132128} // namespace cv
133129
0 commit comments