MCPcopy Create free account
hub / github.com/Oneflow-Inc/oneflow / ConcatSplitPartDataContent

Function ConcatSplitPartDataContent

oneflow/core/kernel/boxing_kernel.cpp:128–168  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

126static char* GetMutDptr(Blob* blob) { return blob->mut_dptr<char>(); }
127
128void ConcatSplitPartDataContent(ep::Stream* stream, const DataContentDesc& in_desc,
129 const DataContentDesc& out_desc, int32_t part_id,
130 int32_t part_num) {
131 size_t one_elem_size = in_desc.OneElemSize();
132 BalancedSplitter bs(in_desc.TotalElemNum(), part_num);
133 Range range = bs.At(part_id);
134 int64_t in_idx = range.begin();
135 int64_t in_elem_num = 0;
136 const char* in_ptr = nullptr;
137 int64_t out_idx = range.begin();
138 int64_t out_elem_num = 0;
139 char* out_ptr = nullptr;
140
141 while (in_elem_num > 0 || out_elem_num > 0 || in_idx < range.end() || out_idx < range.end()) {
142 if (in_elem_num == 0) {
143 std::tie(in_elem_num, in_ptr) =
144 in_desc.CalcContinuousElemNumStartFrom<const char, GetConstDptr>(in_idx);
145 in_elem_num = std::min(in_elem_num, range.end() - in_idx);
146 if (in_elem_num == 0) { break; }
147 in_idx += in_elem_num;
148 }
149 if (out_elem_num == 0) {
150 std::tie(out_elem_num, out_ptr) =
151 out_desc.CalcContinuousElemNumStartFrom<char, GetMutDptr>(out_idx);
152 out_elem_num = std::min(out_elem_num, range.end() - out_idx);
153 if (out_elem_num == 0) { break; }
154 out_idx += out_elem_num;
155 }
156 int64_t copy_elem_num = std::min(in_elem_num, out_elem_num);
157 size_t copy_size = copy_elem_num * one_elem_size;
158 Memcpy<DeviceType::kCPU>(stream, out_ptr, in_ptr, copy_size);
159 in_elem_num -= copy_elem_num;
160 out_elem_num -= copy_elem_num;
161 in_ptr += copy_size;
162 out_ptr += copy_size;
163 }
164 CHECK_EQ(in_elem_num, 0);
165 CHECK_EQ(out_elem_num, 0);
166 CHECK_EQ(in_idx, range.end());
167 CHECK_EQ(out_idx, range.end());
168}
169
170void ConcatSplitDataContent(ep::Stream* stream,
171 const std::function<Blob*(const std::string&)>& BnInOp2Blob,

Callers 2

FOR_RANGEFunction · 0.85
ConcatSplitDataContentFunction · 0.85

Calls 5

OneElemSizeMethod · 0.80
TotalElemNumMethod · 0.80
AtMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected