MCPcopy Create free account
hub / github.com/a2flo/floor / acquire_sync_buffer

Function acquire_sync_buffer

src/device/host/host_buffer.cpp:245–283  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

243
244template <auto backend_name, typename backend_queue_type, typename shared_buffer_type>
245static inline bool acquire_sync_buffer(const device_queue* cqueue_, const backend_queue_type* rqueue, const device& dev,
246 aligned_ptr<uint8_t>& buffer, shared_buffer_type* shared_buffer_ptr,
247 bool& shared_object_state, const size_t& buffer_size,
248 const MEMORY_FLAG& flags) {
249 if (!shared_buffer_ptr || !buffer) {
250 return false;
251 }
252 if (!shared_object_state) {
253 // -> buffer has already been acquired for use with Host-Compute
254 return true;
255 }
256
257 if (needs_sync_to_host(flags)) {
258 const auto cqueue = (cqueue_ != nullptr ? cqueue_ : dev.context->get_device_default_queue(dev));
259#if defined(FLOOR_DEBUG)
260 // validate host queue
261 if (const auto hst_queue = dynamic_cast<const host_queue*>(cqueue); hst_queue == nullptr) {
262 log_error("specified host queue is not a Host-Compute queue");
263 return false;
264 }
265#endif
266
267 const auto comp_rqueue = (rqueue != nullptr ? (const device_queue*)rqueue :
268 device_memory::get_default_queue_for_memory(*shared_buffer_ptr));
269
270 // full sync
271 cqueue->finish();
272 comp_rqueue->finish();
273
274 // read/copy shared buffer data to host memory
275 shared_buffer_ptr->read(*comp_rqueue, buffer.get(), buffer_size, 0);
276
277 // finish read
278 comp_rqueue->finish();
279 }
280
281 shared_object_state = false;
282 return true;
283}
284
285template <auto backend_name, typename backend_queue_type, typename shared_buffer_type>
286static inline bool release_sync_buffer(const device_queue* cqueue_, const backend_queue_type* rqueue, const device& dev,

Callers

nothing calls this directly

Calls 5

needs_sync_to_hostFunction · 0.70
finishMethod · 0.45
readMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected