Как асинхронно копировать память с хоста на устройство, используя потоки тяги и CUDA

Я хотел бы скопировать память с хоста на устройство с помощью тяги, как в

thrust::host_vector<float> h_vec(1 << 28);
thrust::device_vector<float> d_vec(1 << 28);
thrust::copy(h_vec.begin(), h_vec.end(), d_vec.begin());

используя потоки CUDA аналогично тому, как вы копируете память с устройства на устройство, используя потоки:

cudaStream_t s;
cudaStreamCreate(&s);

thrust::device_vector<float> d_vec1(1 << 28), d_vec2(1 << 28);
thrust::copy(thrust::cuda::par.on(s), d_vec1.begin(), d_vec1.end(), d_vec2.begin());

cudaStreamSynchronize(s);
cudaStreamDestroy(s);

Проблема в том, что я не могу установить политику выполнения в CUDA, чтобы указать поток при копировании с хоста на устройство, потому что в этом случае Thrust будет предполагать, что оба вектора хранятся на устройстве. Есть ли способ обойти эту проблему? Я использую последнюю версию Thrust от GitHub (он говорит, что 1,8 в файле version.h).

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

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