будет ли array_view.synchronize_asynch ждать завершения parallel_for_each?

Если у меня естьconcurrency::array_view оперированы вconcurrency::parallel_for_each цикл, я понимаю, что я могу продолжать другие задачи на процессоре во время выполнения цикла:

using namespace Concurrency;

array_view av;
parallel_for_each(extent(number),[=](index idx)
{
  // do some intense computations on av
}

// do some stuff on the CPU while we wait

av.synchronize(); // wait for the parallel_for_each loop to finish and copy the data

Но что, если я хочуне ждать для параллели для цикла, но начать копировать данные обратно из графического процессоратак скоро, как возможно, Будет ли следующая работа?

using namespace Concurrency;

array_view av;
parallel_for_each(extent(number),[=](index idx)
{
  // do some intense computations on av
}

// I know that we won't be waiting to synch when I call this, but will we be waiting here
// until the data is available on the GPU end to START copying?
completion_future waitOnThis = av.synchronize_asynch();

// will this line execute before parallel_for_each has finished processing, or only once it
// has finished processing an the data from "av" has started copying back?

completion_future.wait();

Я читал об этой теме наМотылек, но после прочтения следующего яя не очень мудрый

Обратите внимание, что parallel_for_each выполняется так, как если бы он был синхронным с вызывающим кодом, но в действительности он асинхронный. То есть после того как был выполнен вызов parallel_for_each и ядро было передано в среду выполнения, область some_code_B продолжает выполняться немедленно потоком ЦП, а параллельно ядро выполняется потоками ГП. Однако, если вы попытаетесь получить доступ к данным (array или array_view), которые вы захватили в лямбду в области some_code_B, ваш код будет блокироваться, пока результаты не станут доступны. Отсюда правильное утверждение: parallel_for_each как бы синхронный с точки зрения видимых побочных эффектов, но асинхронный в реальности.

Ответы на вопрос(1)

Ваш ответ на вопрос