@@ -572,13 +572,17 @@ _idtr_copy_reshape(SHARPY::Transceiver *tc, int64_t iNSzs, void *iGShapeDescr,
572572
573573namespace {
574574
575+ // /
576+ // / An util class of multi-dimensional index
577+ // /
575578class id {
576579public:
577580 id (size_t dims) : _values(dims) {}
578581 id (size_t dims, int64_t *value) : _values(value, value + dims) {}
579582 id (const std::vector<int64_t > &values) : _values(values) {}
580583 id (const std::vector<int64_t > &&values) : _values(std::move(values)) {}
581584
585+ // / Permute this id by axes and return a new id
582586 id permute (std::vector<int64_t > axes) const {
583587 std::vector<int64_t > new_values (_values.size ());
584588 for (size_t i = 0 ; i < _values.size (); i++) {
@@ -590,6 +594,7 @@ class id {
590594 int64_t operator [](size_t i) const { return _values[i]; }
591595 int64_t &operator [](size_t i) { return _values[i]; }
592596
597+ // / Subtract another id from this id and return a new id
593598 id operator -(const id &rhs) const {
594599 std::vector<int64_t > new_values (_values.size ());
595600 for (size_t i = 0 ; i < _values.size (); i++) {
@@ -598,6 +603,7 @@ class id {
598603 return id (std::move (new_values));
599604 }
600605
606+ // / Subtract another id from this id and return a new id
601607 id operator -(const int64_t *rhs) const {
602608 std::vector<int64_t > new_values (_values.size ());
603609 for (size_t i = 0 ; i < _values.size (); i++) {
@@ -606,6 +612,10 @@ class id {
606612 return id (std::move (new_values));
607613 }
608614
615+ // / Increase the last dimension value of this id which bounds by shape
616+ // /
617+ // / Example:
618+ // / In shape (2,2) : (0,0)->(0,1)->(1,0)->(1,1)->(0,0)
609619 void next (const int64_t *shape) {
610620 size_t i = _values.size ();
611621 while (i--) {
@@ -623,15 +633,20 @@ class id {
623633 std::vector<int64_t > _values;
624634};
625635
636+ // /
637+ // / An wrapper template class for distribute multi-dimensional array
638+ // /
626639template <typename T> class ndarray {
627640public:
628641 ndarray (int64_t nDims, int64_t *gShape , int64_t *gOffsets , void *lData,
629642 int64_t *lShape, int64_t *lStrides)
630643 : _nDims(nDims), _gShape(gShape ), _gOffsets(gOffsets ), _lData((T *)lData),
631644 _lShape (lShape), _lStrides(lStrides) {}
632645
646+ // / Return the first global index of local data
633647 id firstLocalIndex () const { return id (_nDims, _gOffsets); }
634648
649+ // / Interate all global indices in local data
635650 void localIndices (const std::function<void (const id &)> &callback) const {
636651 size_t size = lSize ();
637652 id idx = firstLocalIndex ();
@@ -641,6 +656,7 @@ template <typename T> class ndarray {
641656 }
642657 }
643658
659+ // / Interate all global indices of the array
644660 void globalIndices (const std::function<void (const id &)> &callback) const {
645661 size_t size = gSize ();
646662 id idx (_nDims);
@@ -660,6 +676,7 @@ template <typename T> class ndarray {
660676 return offset;
661677 }
662678
679+ // / Using global index to access its data
663680 T &operator [](const id &idx) { return _lData[getLocalDataOffset (idx)]; }
664681 T operator [](const id &idx) const { return _lData[getLocalDataOffset (idx)]; }
665682
0 commit comments