Skip to content

Commit 1d79f9c

Browse files
yaroslavessayed
authored andcommitted
fc cs interface update
1 parent 297fce6 commit 1d79f9c

File tree

9 files changed

+233
-122
lines changed

9 files changed

+233
-122
lines changed

include/api/mli_ref_compiler_api.hpp

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -564,13 +564,17 @@ class FullyConnected_CS : public lib_mli::FullyConnected_CS {
564564
public:
565565
/**
566566
* @brief Constructor of the FullyConnected_CS object
567-
*
567+
* @deprecated
568568
*/
569569
FullyConnected_CS(const lib_mli::PlatformDescription pd,
570570
const Tensor<NoBuffer, kFullyConnectedIORank> &in,
571571
const Tensor<NoBuffer, kFullyConnectedWRank> &weights,
572572
const Tensor<NoBuffer, kFullyConnectedIORank> &output_tile_shape);
573573

574+
/**
575+
* @brief Constructor of the FullyConnected_CS object
576+
* @deprecated
577+
*/
574578
FullyConnected_CS(const lib_mli::PlatformDescription pd,
575579
const Tensor<NoBuffer, kFullyConnectedIORank> &in,
576580
const Tensor<NoBuffer, kFullyConnectedWRank> &weights,
@@ -591,23 +595,33 @@ class FullyConnected_CS : public lib_mli::FullyConnected_CS {
591595
* @param cfg [I] FullyConnectedConfig structure
592596
* @param output [I] output TensorIterator (NCo layout)
593597
*/
594-
FullyConnected_CS(const lib_mli::PlatformDescription pd,
598+
FullyConnected_CS(const PlatformDescription pd,
595599
const TensorIterator<NoBuffer, kFullyConnectedIORank, kFullyConnectedIterRank> &input,
596600
const TensorIterator<NoBuffer, kFullyConnectedWRank, kFullyConnectedIterRank> &weights,
597601
const TensorIterator<NoBuffer, kFullyConnectedZPRank, kFullyConnectedIterRank> &weights_zp,
598602
const FullyConnectedConfig &cfg,
599-
const TensorIterator<NoBuffer, kFullyConnectedIORank, kFullyConnectedIterRank> &output) { NOT_IMPLEMENTED_METHOD; };
603+
const TensorIterator<NoBuffer, kFullyConnectedIORank, kFullyConnectedIterRank> &output);
600604

605+
/**
606+
* @deprecated
607+
*/
601608
mli_status EncodeWeights(const Tensor<Buffer, kFullyConnectedWRank> &weights,
602609
Buffer &encoded_weights) override;
603610

611+
612+
mli_status EncodeWeightsAndZeroPts(TensorIterator<Buffer, kFullyConnectedWRank, kFullyConnectedIterRank>& weights,
613+
TensorIterator<Buffer, kFullyConnectedZPRank, kFullyConnectedIterRank>& weights_zp,
614+
Buffer& encoded_weights) override;
615+
604616
unsigned GetEncodedWeightsSize() const override;
605617

618+
/**
619+
* @deprecated
620+
*/
606621
mli_status EncodeWtsZeroPts(const Tensor<Buffer, kFullyConnectedZPRank> &wtszeropts,
607622
Buffer &encoded_wtszeropts) override;
608623

609624
unsigned GetEncodedWtsZeroPtsSize() const override;
610-
611625
unsigned GetInputBufferSize() const override;
612626
unsigned GetOutputBufferSize() const override;
613627
unsigned GetWeightsBufferSize() const override;
@@ -619,24 +633,22 @@ class FullyConnected_CS : public lib_mli::FullyConnected_CS {
619633
const OffsetBuffer &wtszeropts,
620634
const OffsetBuffer &ctrl_buffer) override;
621635

636+
mli_status AttachBufferOffsets(const OffsetBuffer& input,
637+
const OffsetBuffer& output,
638+
const OffsetBuffer& weights_and_zeropts,
639+
const OffsetBuffer& ctrl_buffer) override;
640+
622641
mli_status GetKernelPrivateData(void* kernel_private_data_buffer) override;
623642
unsigned GetKernelPrivateDataSize() const override;
624643
unsigned GetRuntimeObjectSize() const override;
625644

626645
private:
627-
lib_mli::PlatformDescription m_pd;
646+
PlatformDescription m_pd;
628647
Tensor<OffsetBuffer, kFullyConnectedIORank> m_in;
629648
Tensor<OffsetBuffer, kFullyConnectedWRank> m_weights;
630649
Tensor<OffsetBuffer, kFullyConnectedZPRank> m_wtszp;
631650
Tensor<OffsetBuffer, kFullyConnectedIORank> m_output;
632-
633651
OffsetBuffer m_weights_zp;
634-
635-
uint32_t m_input_buffer_size;
636-
uint32_t m_weights_buffer_size;
637-
uint32_t m_wtszp_buffer_size;
638-
uint32_t m_output_buffer_size;
639-
640652
};
641653

642654
class TableBuiltin_CS : public lib_mli::TableBuiltin_CS {

include/mli_compiler_api.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,7 @@ class FullyConnected_CS : public CompilerGenericInterface {
626626

627627
/**
628628
* @brief Method to encode the weights (coefficients).
629+
* @deprecated
629630
* TODO: add description using conv2d_cs as a starting point
630631
*/
631632
virtual mli_status EncodeWeights(const Tensor<Buffer, kFullyConnectedWRank> &weights,
@@ -649,6 +650,7 @@ class FullyConnected_CS : public CompilerGenericInterface {
649650
Buffer &encoded_weights)
650651
{ NOT_IMPLEMENTED_METHOD;
651652
return MLI_STATUS_OK; };
653+
652654
/**
653655
* @brief Method to query the size of the encoded weights buffer
654656
*
@@ -657,10 +659,11 @@ class FullyConnected_CS : public CompilerGenericInterface {
657659

658660
/**
659661
* @brief Method to encode weights zero-points
660-
*
662+
* @deprecated
661663
*/
662664
virtual mli_status EncodeWtsZeroPts(const Tensor<Buffer, kFullyConnectedZPRank> &wtszeropts,
663665
Buffer &encoded_wtszeropts) = 0;
666+
664667
/**
665668
* @brief Method to query the size of the encoded weights zero-points buffer
666669
*
@@ -671,15 +674,13 @@ class FullyConnected_CS : public CompilerGenericInterface {
671674
* @brief Methods to get buffer sizes
672675
* TODO: add description using conv2d_cs as a starting point
673676
*/
674-
675677
virtual unsigned GetInputBufferSize() const = 0;
676678
virtual unsigned GetOutputBufferSize() const = 0;
677679
virtual unsigned GetWeightsBufferSize() const = 0;
678680
virtual unsigned GetZeroPointBufferSize() const = 0;
679-
/**
680681

682+
/**
681683
* @brief Methods to set buffer offsets
682-
*
683684
*/
684685
virtual mli_status AttachBufferOffsets(const Tensor<OffsetBuffer, kFullyConnectedIORank> &input,
685686
const Tensor<OffsetBuffer, kFullyConnectedIORank> &output,

include/mli_kernels_factory.hpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,17 +586,49 @@ class KernelsFactory {
586586
set_default_align<kDepthwiseIORank>(output_align);
587587
}
588588

589+
/**
590+
* @deprecated
591+
*/
589592
virtual lib_mli::FullyConnected_CS* FullyConnected_CS(void *kernel_buffer,
590593
const Tensor<NoBuffer, 2> in,
591594
const Tensor<NoBuffer, 2> weights,
592595
const Tensor<NoBuffer, 2> output_tile_shape) { return nullptr; }
593596

597+
/**
598+
* @deprecated
599+
*/
594600
virtual lib_mli::FullyConnected_CS* FullyConnected_CS(void *kernel_buffer,
595601
const Tensor<NoBuffer, 2> in,
596602
const Tensor<NoBuffer, 2> weights,
597603
const Tensor<NoBuffer, 1> wtszp,
598604
const Tensor<NoBuffer, 2> output_tile_shape) { return nullptr; }
599605

606+
/**
607+
* @brief Fully Connected kernel Compiler Support interface factory
608+
* method
609+
*
610+
* @param kernel_buffer [I] Pointer to the pre-allocated memory to store
611+
* kernel Compiler Support object
612+
* @param input [I] TensorIterator object containing input Tensor shape and
613+
* memory strides and IteratorCfg
614+
* @param weights [I] TensorIterator object containing weights Tensor shape
615+
* and memory strides and IteratorCfg
616+
* @param weights_zp [I] TensorIterator object containing weight zp(s) array
617+
* @param cfg [I] Kernel configuration structure
618+
* @param output [I] TensorIterator object containing output Tensor shape
619+
* and memory strides and IteratorCfg
620+
*
621+
* @return Fully Connected kernel Compiler Support interface object
622+
*/
623+
virtual lib_mli::FullyConnected_CS* FullyConnected_CS(void* kernel_buffer,
624+
const TensorIterator<NoBuffer, kFullyConnectedIORank, kFullyConnectedIterRank>& input,
625+
const TensorIterator<NoBuffer, kFullyConnectedWRank, kFullyConnectedIterRank>& weights,
626+
const TensorIterator<NoBuffer, kFullyConnectedZPRank, kFullyConnectedIterRank>& weights_zp,
627+
const FullyConnectedConfig& cfg,
628+
const TensorIterator<NoBuffer, kFullyConnectedIORank, kFullyConnectedIterRank>& output) {
629+
return nullptr;
630+
}
631+
600632
/**
601633
* @brief FullyConnected kernel Compiler Support interface
602634
* to get the Alignment Restrictions in Input Tensor.

include/mli_kernels_factory_ref.hpp

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -383,32 +383,53 @@ class KernelsFactory : public lib_mli::KernelsFactory {
383383
return new(kernel_buffer) lib_ref::DepthwiseConv2d_CS(m_pd, input, input_zp, weights, weights_zp, cfg, output);
384384
}
385385

386-
uint32_t FullyConnected_CS_GetSize() const override { return sizeof(lib_ref:: FullyConnected_CS); }
386+
uint32_t FullyConnected_CS_GetSize() const override { return sizeof(lib_ref::FullyConnected_CS); }
387387

388-
lib_mli:: FullyConnected_CS* FullyConnected_CS(void *kernel_buffer,
389-
const Tensor<NoBuffer, 2> in,
390-
const Tensor<NoBuffer, 2> weights,
391-
const Tensor<NoBuffer, 2> output_tile_shape) override {
388+
/**
389+
* @deprecated
390+
*/
391+
lib_mli::FullyConnected_CS* FullyConnected_CS(void *kernel_buffer,
392+
const Tensor<NoBuffer, 2> in,
393+
const Tensor<NoBuffer, 2> weights,
394+
const Tensor<NoBuffer, 2> output_tile_shape) override {
392395
/**
393396
* The MLI classes need to be 32 bit aligned
394397
*/
395398
assert(kernel_buffer != nullptr);
396399
assert(((size_t) kernel_buffer % kMliAlignment) == 0);
397400
return new(kernel_buffer) lib_ref::FullyConnected_CS(m_pd, in, weights, output_tile_shape);
398401
}
399-
lib_mli:: FullyConnected_CS* FullyConnected_CS(void *kernel_buffer,
400-
const Tensor<NoBuffer, 2> in,
401-
const Tensor<NoBuffer, 2> weights,
402-
const Tensor<NoBuffer, 1> wtszp,
403-
const Tensor<NoBuffer, 2> output_tile_shape) override {
402+
403+
/**
404+
* @deprecated
405+
*/
406+
lib_mli::FullyConnected_CS* FullyConnected_CS(void *kernel_buffer,
407+
const Tensor<NoBuffer, 2> in,
408+
const Tensor<NoBuffer, 2> weights,
409+
const Tensor<NoBuffer, 1> wtszp,
410+
const Tensor<NoBuffer, 2> output_tile_shape) override {
404411
/**
405-
* The MLI classes need to be 32 bit aligned
406-
*/
412+
* The MLI classes need to be 32 bit aligned
413+
*/
407414
assert(kernel_buffer != nullptr);
408415
assert(((size_t) kernel_buffer % kMliAlignment) == 0);
409416
return new(kernel_buffer) lib_ref::FullyConnected_CS(m_pd, in, weights, wtszp, output_tile_shape);
410417
}
411418

419+
lib_mli::FullyConnected_CS* FullyConnected_CS(void* kernel_buffer,
420+
const TensorIterator<NoBuffer, kFullyConnectedIORank, kFullyConnectedIterRank>& input,
421+
const TensorIterator<NoBuffer, kFullyConnectedWRank, kFullyConnectedIterRank>& weights,
422+
const TensorIterator<NoBuffer, kFullyConnectedZPRank, kFullyConnectedIterRank>& weights_zp,
423+
const FullyConnectedConfig& cfg,
424+
const TensorIterator<NoBuffer, kFullyConnectedIORank, kFullyConnectedIterRank>& output) override {
425+
/**
426+
* The MLI classes need to be 32 bit aligned
427+
*/
428+
assert(kernel_buffer != nullptr);
429+
assert(((size_t) kernel_buffer % kMliAlignment) == 0);
430+
return new(kernel_buffer) lib_ref::FullyConnected_CS(m_pd, input, weights, weights_zp, cfg, output);
431+
}
432+
412433
uint32_t TableBuiltin_CS_GetSize() const override { return 0;/*return sizeof(lib_ref::TableBuiltin_CS);*/ }
413434

414435
lib_mli::TableBuiltin_CS* TableBuiltin_CS(void *kernel_buffer,

include/mli_service_functions.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
namespace snps_arc::metaware::mli::service {
2323

24+
// TODO: return bytes instead of number of elements (bytes = number of elements * size of element)
2425
template<typename buf_T, unsigned tensorRank>
2526
inline const unsigned GetBufferSize(const Tensor<buf_T, tensorRank>& tensor) {
2627

@@ -36,6 +37,7 @@ inline const unsigned GetBufferSize(const Tensor<buf_T, tensorRank>& tensor) {
3637
return ret_val;
3738
}
3839

40+
// TODO: return bytes instead of number of elements (bytes = number of elements * size of element)
3941
inline const unsigned GetBufferSize(int rank, const uint32_t* shape,
4042
const int32_t* stride) {
4143
unsigned ret_val = 0;
@@ -46,6 +48,7 @@ inline const unsigned GetBufferSize(int rank, const uint32_t* shape,
4648
return ret_val;
4749
}
4850

51+
// TODO: return bytes instead of number of elements (bytes = number of elements * size of element)
4952
inline const unsigned GetBufferSize(int rank, const uint32_t* shape) {
5053
unsigned ret_val = 0;
5154
int32_t stride = 1;
@@ -143,7 +146,7 @@ mli_status EncodeWeightsAndZeroPts(const Tensor<Buffer, weights_rank>& weights,
143146
encoded.write(i, w_buf.template read<int8_t>(i));
144147
}
145148
for (uint32_t i = 0; i < wzp_buf.get_size(); ++i) {
146-
encoded.write(i, wzp_buf.template read<int8_t>(i));
149+
encoded.write(w_buf.get_size() + i, wzp_buf.template read<int8_t>(i));
147150
}
148151
return MLI_STATUS_OK;
149152
}

include/mli_types.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,13 @@ class OffsetBuffer {
337337
elem_size_ = elem_size;
338338
}
339339

340+
OffsetBuffer(const OffsetBuffer& buf, uint32_t rel_offset) {
341+
*this = buf;
342+
assert(size_ >= rel_offset);
343+
offset_ += rel_offset;
344+
size_ -= rel_offset;
345+
}
346+
340347
uint32_t get_size() const {
341348
return size_;
342349
}

0 commit comments

Comments
 (0)