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

Function acquire_sync_buffer

compute/host/host_buffer.cpp:314–352  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

312
313template <auto backend_name, typename backend_queue_type, typename shared_buffer_type>
314static inline bool acquire_sync_buffer(const compute_queue* cqueue_, const backend_queue_type* rqueue, const compute_device& dev,
315 aligned_ptr<uint8_t>& buffer, shared_buffer_type* shared_buffer_ptr,
316 bool& shared_object_state, const size_t& buffer_size,
317 const COMPUTE_MEMORY_FLAG& flags) {
318 if (!shared_buffer_ptr || !buffer) {
319 return false;
320 }
321 if (!shared_object_state) {
322 // -> buffer has already been acquired for use with Host-Compute
323 return true;
324 }
325
326 if (needs_sync_to_host(flags)) {
327 const auto cqueue = (cqueue_ != nullptr ? cqueue_ : dev.context->get_device_default_queue(dev));
328#if defined(FLOOR_DEBUG)
329 // validate host queue
330 if (const auto hst_queue = dynamic_cast<const host_queue*>(cqueue); hst_queue == nullptr) {
331 log_error("specified host queue is not a Host-Compute queue");
332 return false;
333 }
334#endif
335
336 const auto comp_rqueue = (rqueue != nullptr ? (const compute_queue*)rqueue :
337 compute_memory::get_default_queue_for_memory(*shared_buffer_ptr));
338
339 // full sync
340 cqueue->finish();
341 comp_rqueue->finish();
342
343 // read/copy shared buffer data to host memory
344 shared_buffer_ptr->read(*comp_rqueue, buffer.get(), buffer_size, 0);
345
346 // finish read
347 comp_rqueue->finish();
348 }
349
350 shared_object_state = false;
351 return true;
352}
353
354template <auto backend_name, typename backend_queue_type, typename shared_buffer_type>
355static inline bool release_sync_buffer(const compute_queue* cqueue_, const backend_queue_type* rqueue, const compute_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