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

Function DataConsistencyCheck

oneflow/core/framework/consistency_check.cpp:153–186  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

151} // namespace
152
153Maybe<void> DataConsistencyCheck(const void* buffer_ptr, size_t buffer_size,
154 Symbol<ParallelDesc> placement) {
155 if (!placement->containing_current_rank() || placement->parallel_num() == 1) {
156 return Maybe<void>::Ok();
157 }
158
159 const auto& rank_group = JUST(RankGroup::New(placement));
160
161 std::vector<char> recv_buffer(buffer_size);
162 char* recv_ptr = recv_buffer.data();
163
164 TransportToken transport_token = JUST(TransportToken::NewTransportToken(kTransportTokenTypeData));
165 NaiveAsyncTransportCtx ctx(
166 transport_token,
167 [&](void** buffer, std::size_t* size, std::function<void()>* Cb) -> Maybe<void> {
168 *buffer = const_cast<void*>(buffer_ptr);
169 *size = buffer_size;
170 *Cb = [] {};
171 return Maybe<void>::Ok();
172 },
173 [&](void** buffer, std::size_t* size, std::function<void()>* Cb) -> Maybe<void> {
174 *buffer = recv_ptr;
175 *size = buffer_size;
176 *Cb = [] {};
177 return Maybe<void>::Ok();
178 });
179 JUST(TransportUtil::SendToNextRankInRing(rank_group, transport_token, &ctx));
180 JUST(TransportUtil::ReceiveFromPrevRankInRing(rank_group, transport_token, &ctx));
181 JUST_MSG(ctx.WaitDone(), kAsymmetricCodeErrorMsg);
182 CHECK_OR_RETURN(std::memcmp(buffer_ptr, reinterpret_cast<const void*>(recv_ptr), buffer_size)
183 == 0)
184 << Error::RuntimeError() << "Each rank must have same input sequence or numpy array";
185 return Maybe<void>::Ok();
186}
187
188namespace {
189

Callers 1

MakeGlobalTensorFromDataFunction · 0.85

Calls 5

WaitDoneMethod · 0.80
NewFunction · 0.70
parallel_numMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected