Skip to content

Commit 6008b95

Browse files
yaroslavJaccovG
authored andcommitted
transposed conv cs interface update
1 parent 2f14677 commit 6008b95

File tree

7 files changed

+205
-82
lines changed

7 files changed

+205
-82
lines changed

include/api/mli_ref_compiler_api.hpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ class TransposeConv2D_CS : public lib_mli::TransposeConv2D_CS {
341341
public:
342342
/**
343343
* @brief Constructor of the TransposeConv2D_CS object
344-
*
344+
* @deprecated
345345
*/
346346
TransposeConv2D_CS(const lib_mli::PlatformDescription pd,
347347
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIOIterRank> &input,
@@ -371,16 +371,34 @@ class TransposeConv2D_CS : public lib_mli::TransposeConv2D_CS {
371371
const TensorIterator<NoBuffer, kTransposeConvWRank, kTransposeConvIterRank> &weights,
372372
const TensorIterator<NoBuffer, kTransposeConvZPRank, kTransposeConvIterRank> &weights_zp,
373373
const TransposeConv2DConfig &cfg,
374-
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIOIterRank> &output) { NOT_IMPLEMENTED_METHOD; };
374+
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIOIterRank> &output);
375375

376+
/**
377+
* @deprecated
378+
*/
376379
mli_status EncodeWeights(Tensor<Buffer, kTransposeConvWRank> &weights, Buffer &encoded_weights,
377380
compression_mode_t mode = compression_mode_t::Uncompressed) override;
378381

382+
mli_status EncodeWeightsAndZeroPts(TensorIterator<Buffer, kTransposeConvWRank, kTransposeConvIterRank>& weights,
383+
TensorIterator<Buffer, kTransposeConvZPRank, kTransposeConvIterRank>& weights_zp,
384+
Buffer& encoded_weights) override;
385+
386+
unsigned GetEncodedWeightsSize() const override;
387+
388+
/**
389+
* @deprecated
390+
*/
379391
mli_status EncodeInpZeroPts(Tensor<Buffer, kTransposeConvZPRank> &inpzeropts,
380392
Buffer &encoded_inpzeropts) override;
381393

394+
mli_status EncodeInpZeroPts(TensorIterator<Buffer, kTransposeConvZPRank, kTransposeConvZPIterRank>& input_zp,
395+
Buffer& encoded_input_zp) override;
396+
382397
unsigned GetEncodedInpZeroPtsSize() const override;
383398

399+
/**
400+
* @deprecated
401+
*/
384402
mli_status EncodeWtsZeroPts(Tensor<Buffer, kTransposeConvZPRank> &wtszeropts,
385403
Buffer &encoded_wtszeropts) override;
386404

@@ -408,6 +426,8 @@ class TransposeConv2D_CS : public lib_mli::TransposeConv2D_CS {
408426
OffsetBuffer m_inpzp_buffer;
409427
OffsetBuffer m_wtszp_buffer;
410428

429+
uint32_t m_weights_buffer_size;
430+
411431
// The axis to represent the quantization granularity (optional for FX type)
412432
int m_inp_quant_axis;
413433
int m_wts_quant_axis;

include/mli_compiler_api.hpp

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1347,6 +1347,7 @@ class TransposeConv2D_CS : public CompilerGenericInterface {
13471347
* specific kernel implementation. This transformation may include
13481348
* compression. The content of the encode_weights buffer is opaque for the
13491349
* user.
1350+
* @deprecated
13501351
*
13511352
* @param weights [I] tensor with the weights
13521353
* @param buffer_t [I] buffer pointer where the encode function can write
@@ -1373,22 +1374,20 @@ class TransposeConv2D_CS : public CompilerGenericInterface {
13731374
*/
13741375
virtual mli_status EncodeWeightsAndZeroPts(TensorIterator<Buffer, kTransposeConvWRank, kTransposeConvIterRank> &weights,
13751376
TensorIterator<Buffer, kTransposeConvZPRank, kTransposeConvIterRank> &weights_zp,
1376-
Buffer &encoded_weights)
1377-
{ NOT_IMPLEMENTED_METHOD;
1378-
return MLI_STATUS_OK; };
1379-
// /**
1380-
// * @brief Method to query the size of the encoded weights buffer
1381-
// *
1382-
// * This function returns the size of the full weights buffer that
1383-
// * is needed by the EncodeWeights method.
1384-
// *
1385-
// * @return Size of encoded weights buffer in bytes
1386-
// */
1387-
// virtual unsigned GetEncodedWeightsSize() const = 0;
1377+
Buffer &encoded_weights) = 0;
1378+
/**
1379+
* @brief Method to query the size of the encoded weights buffer
1380+
*
1381+
* This function returns the size of the full weights buffer that
1382+
* is needed by the EncodeWeights method.
1383+
*
1384+
* @return Size of encoded weights buffer in bytes
1385+
*/
1386+
virtual unsigned GetEncodedWeightsSize() const = 0;
13881387

13891388
/**
13901389
* @brief Method to encode input zero-points (padding values)
1391-
*
1390+
* @deprecated
13921391
* This method will read the input zero-points buffer in a platform
13931392
* independent layout and translate it into a buffer that can be easily read
13941393
* by the platform specific kernel implementation. The content of the
@@ -1412,9 +1411,7 @@ class TransposeConv2D_CS : public CompilerGenericInterface {
14121411
*
14131412
*/
14141413
virtual mli_status EncodeInpZeroPts(TensorIterator<Buffer, kTransposeConvZPRank, kTransposeConvZPIterRank> &input_zp,
1415-
Buffer& encoded_input_zp)
1416-
{ NOT_IMPLEMENTED_METHOD;
1417-
return MLI_STATUS_OK; };
1414+
Buffer& encoded_input_zp) = 0;
14181415

14191416
/**
14201417
* @brief Method to query the size of the encoded input zero-points buffer

include/mli_kernels_factory.hpp

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,7 +1275,7 @@ class KernelsFactory {
12751275
/**
12761276
* @brief Transpose Convolution 2D kernel Compiler Support interface factory
12771277
* method
1278-
*
1278+
* @deprecated
12791279
* @param kernel_buffer [I] Pointer to the pre-allocated memory to store
12801280
* kernel Compiler Support object
12811281
* @param input [I] TensorIterator object containing input Tensor shape and
@@ -1291,11 +1291,38 @@ class KernelsFactory {
12911291
*/
12921292
virtual lib_mli::TransposeConv2D_CS* TransposeConv2D_CS(
12931293
void *kernel_buffer,
1294-
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIOIterRank>& input, // BHWC
1294+
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIOIterRank>& input, // BHWGCi
12951295
const TensorIterator<NoBuffer, kTransposeConvWRank, kTransposeConvWIterRank>& weights, // GHWCiCo
12961296
const TensorIterator<NoBuffer, kTransposeConvZPRank, kTransposeConvZPIterRank>& weights_zp,
12971297
const TransposeConv2DConfig &cfg,
1298-
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIOIterRank>& output) { // BHWC
1298+
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIOIterRank>& output) { // BHWGCo
1299+
return nullptr;
1300+
}
1301+
1302+
/**
1303+
* @brief Transpose Convolution 2D kernel Compiler Support interface factory
1304+
* method
1305+
* @param kernel_buffer [I] Pointer to the pre-allocated memory to store
1306+
* kernel Compiler Support object
1307+
* @param input [I] TensorIterator object containing input Tensor shape and
1308+
* memory strides and IteratorCfg
1309+
* @param input_zp [I] TensorIterator object containing input zp(s) array
1310+
* @param weights [I] TensorIterator object containing weights Tensor shape
1311+
* and memory strides and IteratorCfg
1312+
* @param weights_zp [I] TensorIterator object containing weight zp(s) array
1313+
* @param cfg [I] Kernel configuration structure
1314+
* @param output [I] TensorIterator object containing output Tensor shape
1315+
* and memory strides and IteratorCfg
1316+
*
1317+
* @return Transpose Convolution 2D kernel Compiler Support interface object
1318+
*/
1319+
virtual lib_mli::TransposeConv2D_CS* TransposeConv2D_CS(void* kernel_buffer,
1320+
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIOIterRank>& input, // BHWGCi
1321+
const TensorIterator<NoBuffer, kTransposeConvZPRank, kTransposeConvIterRank>& input_zp,
1322+
const TensorIterator<NoBuffer, kTransposeConvWRank, kTransposeConvWIterRank>& weights, // GHWCiCo
1323+
const TensorIterator<NoBuffer, kTransposeConvZPRank, kTransposeConvZPIterRank>& weights_zp,
1324+
const TransposeConv2DConfig& cfg,
1325+
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIOIterRank>& output) { // BHWGCo
12991326
return nullptr;
13001327
}
13011328

include/mli_kernels_factory_ref.hpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,9 @@ class KernelsFactory : public lib_mli::KernelsFactory {
338338

339339
uint32_t TransposeConv2D_CS_GetSize() const override { return sizeof(lib_ref::TransposeConv2D_CS); }
340340

341+
/**
342+
* @deprecated
343+
*/
341344
lib_mli::TransposeConv2D_CS* TransposeConv2D_CS(
342345
void *kernel_buffer,
343346
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIOIterRank> &input,
@@ -348,6 +351,16 @@ class KernelsFactory : public lib_mli::KernelsFactory {
348351
return new (kernel_buffer)lib_ref::TransposeConv2D_CS(m_pd, input, weights, weights_zp, cfg, output);
349352
}
350353

354+
virtual lib_mli::TransposeConv2D_CS* TransposeConv2D_CS(void* kernel_buffer,
355+
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIOIterRank>& input,
356+
const TensorIterator<NoBuffer, kTransposeConvZPRank, kTransposeConvIterRank>& input_zp,
357+
const TensorIterator<NoBuffer, kTransposeConvWRank, kTransposeConvWIterRank>& weights,
358+
const TensorIterator<NoBuffer, kTransposeConvZPRank, kTransposeConvZPIterRank>& weights_zp,
359+
const TransposeConv2DConfig& cfg,
360+
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIOIterRank>& output) override {
361+
return new (kernel_buffer)lib_ref::TransposeConv2D_CS(m_pd, input, input_zp, weights, weights_zp, cfg, output);
362+
}
363+
351364
uint32_t Permute_CS_GetSize() const override { return sizeof(lib_ref::Permute_CS); }
352365

353366
lib_mli::Permute_CS* Permute_CS(void *kernel_buffer,

include/mli_types.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,11 @@ constexpr unsigned kDepthwiseZPRank = 1; // TODO: remove and use kWZPRank inste
8585
constexpr unsigned kDepthwiseIterRank = 5;
8686

8787
constexpr unsigned kTransposeConvIORank = 5;
88-
constexpr unsigned kTransposeConvIOIterRank = 5;
88+
constexpr unsigned kTransposeConvIOIterRank = 5; // TODO: remove and use kTransposeConvIterRank instead
8989
constexpr unsigned kTransposeConvWRank = 5;
90-
constexpr unsigned kTransposeConvWIterRank = 5;
91-
constexpr unsigned kTransposeConvZPRank = 1; // TODO: remove and use kWZPRank instead
92-
constexpr unsigned kTransposeConvZPIterRank = 5;
90+
constexpr unsigned kTransposeConvWIterRank = 5; // TODO: remove and use kTransposeConvIterRank instead
91+
constexpr unsigned kTransposeConvZPRank = 1; // TODO: remove and use kWZPRank instead
92+
constexpr unsigned kTransposeConvZPIterRank = 5; // TODO: remove and use kTransposeConvIterRank instead
9393
constexpr unsigned kTransposeConvIterRank = 5;
9494

9595
constexpr unsigned kFullyConnectedIORank = 2;

lib/src/kernels/convolution/mli_krn_transpose_conv_compiler.cc

Lines changed: 64 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616

1717
namespace snps_arc::metaware::mli::ref {
1818

19+
/**
20+
* @deprecated
21+
*/
1922
TransposeConv2D_CS::TransposeConv2D_CS(
20-
const lib_mli::PlatformDescription pd,
23+
const PlatformDescription pd,
2124
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIOIterRank> &input,
2225
const TensorIterator<NoBuffer, kTransposeConvWRank, kTransposeConvWIterRank> &weights,
2326
const TensorIterator<NoBuffer, kTransposeConvZPRank, kTransposeConvZPIterRank> &weights_zp,
@@ -29,36 +32,48 @@ TransposeConv2D_CS::TransposeConv2D_CS(
2932
m_output(output),
3033
m_config(cfg),
3134
m_pd(pd) {
35+
DEPRECATED_METHOD
3236
m_inp_quant_axis = kPerTensorQuantDim;
3337
m_wts_quant_axis = kKernelChannelOutDim;
38+
m_weights_buffer_size = service::GetBufferSize(weights.get_tensor());
39+
}
40+
41+
TransposeConv2D_CS::TransposeConv2D_CS(const PlatformDescription pd,
42+
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIterRank>& input,
43+
const TensorIterator<NoBuffer, kTransposeConvZPRank, kTransposeConvIterRank>& input_zp,
44+
const TensorIterator<NoBuffer, kTransposeConvWRank, kTransposeConvIterRank>& weights,
45+
const TensorIterator<NoBuffer, kTransposeConvZPRank, kTransposeConvIterRank>& weights_zp,
46+
const TransposeConv2DConfig& cfg,
47+
const TensorIterator<NoBuffer, kTransposeConvIORank, kTransposeConvIOIterRank>& output)
48+
: m_input(input),
49+
m_weights(weights),
50+
m_weights_zp(weights_zp),
51+
m_output(output),
52+
m_config(cfg),
53+
m_pd(pd) {
54+
m_inp_quant_axis = kPerTensorQuantDim;
55+
m_wts_quant_axis = kKernelChannelOutDim;
56+
m_weights_buffer_size = service::GetBufferSize(weights.get_tensor());
3457
}
3558

3659
unsigned TransposeConv2D_CS::GetKernelPrivateDataSize() const {
3760
return sizeof(TransposeConv2DPrivateData);
3861
}
3962

4063
unsigned TransposeConv2D_CS::GetRuntimeObjectSize() const {
41-
return sizeof(Conv2d);
64+
return sizeof(TransposeConv2D);
4265
}
4366

4467
mli_status TransposeConv2D_CS::GetKernelPrivateData(
4568
void *kernel_private_data_buffer) {
46-
MLI_ASSERT(kernel_private_data_buffer != nullptr);
47-
48-
// Batch checking
49-
MLI_ASSERT(m_input.get_dim(mli::kGroupTensorBatchDim) == 1);
50-
51-
// Channel checking
52-
MLI_ASSERT(m_weights.get_dim(mli::kKernelChannelOutDim) ==
53-
m_output.get_dim(mli::kGroupTensorChannelDim));
54-
55-
MLI_ASSERT(m_weights.get_dim(mli::kKernelChannelInDim) ==
56-
m_input.get_dim(mli::kGroupTensorChannelDim));
5769

58-
// Group checking
59-
MLI_ASSERT(m_weights.get_dim(mli::kKernelGroupDim) == 1);
60-
61-
MLI_ASSERT(m_weights.get_dim(mli::kKernelGroupDim) == 1);
70+
MLI_ASSERT(kernel_private_data_buffer != nullptr);
71+
MLI_ASSERT(m_input.get_dim(kGroupTensorBatchDim) == 1);
72+
MLI_ASSERT(m_weights.get_dim(kKernelChannelOutDim) ==
73+
m_output.get_dim(kGroupTensorChannelDim));
74+
MLI_ASSERT(m_weights.get_dim(kKernelChannelInDim) ==
75+
m_input.get_dim(kGroupTensorChannelDim));
76+
MLI_ASSERT(m_weights.get_dim(kKernelGroupDim) == 1);
6277

6378
TransposeConv2DPrivateData prv_data;
6479
prv_data.input = m_input;
@@ -88,31 +103,60 @@ mli_status TransposeConv2D_CS::AttachBufferOffsets(
88103
return MLI_STATUS_OK;
89104
}
90105

106+
/**
107+
* @deprecated
108+
*/
91109
mli_status TransposeConv2D_CS::EncodeWeights(Tensor<Buffer, kTransposeConvWRank> &weights,
92110
Buffer &encoded_weights,
93111
compression_mode_t mode) {
112+
DEPRECATED_METHOD
94113
return service::EncodeWeights(weights, encoded_weights);
95114
}
96115

116+
mli_status TransposeConv2D_CS::EncodeWeightsAndZeroPts(TensorIterator<Buffer, kTransposeConvWRank, kTransposeConvIterRank>& weights,
117+
TensorIterator<Buffer, kTransposeConvZPRank, kTransposeConvIterRank>& weights_zp,
118+
Buffer& encoded_weights) {
119+
return service::EncodeWeightsAndZeroPts(weights.get_tensor(), weights_zp.get_tensor(), encoded_weights);
120+
};
121+
122+
unsigned TransposeConv2D_CS::GetEncodedWeightsSize() const {
123+
return m_weights_buffer_size;
124+
};
125+
126+
/**
127+
* @deprecated
128+
*/
97129
mli_status TransposeConv2D_CS::EncodeInpZeroPts(Tensor<Buffer, kTransposeConvZPRank> &inpzeropts,
98130
Buffer &encoded_inpzeropts) {
99-
constexpr int channel_axis = mli::kTensorChannelDim;
131+
DEPRECATED_METHOD
132+
constexpr int channel_axis = kTensorChannelDim;
100133
uint32_t channel_length = m_input.get_dim(channel_axis);
101134
return service::EncodeZeroPts<channel_axis>(
102135
inpzeropts, encoded_inpzeropts, m_inp_quant_axis, channel_length);
103136
}
104137

138+
mli_status TransposeConv2D_CS::EncodeInpZeroPts(TensorIterator<Buffer, kTransposeConvZPRank, kTransposeConvZPIterRank>& input_zp,
139+
Buffer& encoded_input_zp) {
140+
constexpr int channel_axis = kTensorChannelDim;
141+
uint32_t channel_length = m_input.get_dim(channel_axis);
142+
return service::EncodeZeroPts<channel_axis>(input_zp.get_tensor(), encoded_input_zp, m_inp_quant_axis, channel_length);
143+
}
144+
145+
/**
146+
* @deprecated
147+
*/
105148
mli_status TransposeConv2D_CS::EncodeWtsZeroPts(Tensor<Buffer, kTransposeConvZPRank> &wtszeropts,
106149
Buffer &encoded_wtszeropts) {
107-
constexpr int channel_axis = mli::kKernelChannelOutDim;
150+
DEPRECATED_METHOD
151+
constexpr int channel_axis = kKernelChannelOutDim;
108152
uint32_t channel_length = m_weights.get_dim(channel_axis);
109153
return service::EncodeZeroPts<channel_axis>(wtszeropts, encoded_wtszeropts,
110154
m_wts_quant_axis, channel_length);
111155
}
112156

113157
unsigned TransposeConv2D_CS::GetEncodedWtsZeroPtsSize() const {
114158
// per-channel quantization
115-
return m_weights.get_dim(mli::kKernelChannelOutDim) ;
159+
return m_weights.get_dim(kKernelChannelOutDim);
116160
}
117161

118162
unsigned TransposeConv2D_CS::GetEncodedInpZeroPtsSize() const {

0 commit comments

Comments
 (0)