auto devicePtr =
sycl::malloc_device<int>(1024, gpuQueue);
auto e1 = gpuQueue.memcpy(devicePtr, data, sizeof(int));
auto e2 = gpuQueue.parallel_for<kernel_a>(
sycl::range{1024}, e1, [=](sycl::id<1> idx) {
devicePtr[idx] = /* some computation */
});
auto e3 = gpuQueue.parallel_for<kernel_b>(
sycl::range{1024}, e2, [=](sycl::id<1> idx) {
devicePtr[idx] = /* some computation */
});
auto e4 = gpuQueue.memcpy(data, devicePtr,
sizeof(int), e3);
e4.wait();
sycl::free(devicePtr, gpuQueue);
auto devicePtr =
sycl::malloc_device<int>(1024, gpuQueue);
auto e1 = gpuQueue.memcpy(devicePtr, data, sizeof(int));
auto e2 = gpuQueue.parallel_for<kernel_a>(
sycl::range{1024}, e1, [=](sycl::id<1> idx) {
devicePtr[idx] = /* some computation */
});
auto e3 = gpuQueue.parallel_for<kernel_b>(
sycl::range{1024}, e2, [=](sycl::id<1> idx) {
devicePtr[idx] = /* some computation */
});
auto e4 = gpuQueue.memcpy(data, devicePtr,
sizeof(int), e3);
e4.wait();
auto devicePtr =
sycl::malloc_device<int>(1024, gpuQueue);
auto e1 = gpuQueue.memcpy(devicePtr, data, sizeof(int));
auto e2 = gpuQueue.parallel_for<kernel_a>(
sycl::range{1024}, e1, [=](sycl::id<1> idx) {
devicePtr[idx] = /* some computation */
});
auto e3 = gpuQueue.parallel_for<kernel_b>(
sycl::range{1024}, e2, [=](sycl::id<1> idx) {
devicePtr[idx] = /* some computation */
});
auto e4 = gpuQueue.memcpy(data, devicePtr,
sizeof(int), e3);
e4.wait();
sycl::free(devicePtr, gpuQueue);
auto devicePtrA = sycl::malloc_device<int>(1024, gpuQueue);
auto devicePtrB = sycl::malloc_device<int>(1024, gpuQueue);
auto e1 = gpuQueue.memcpy(devicePtrA, dataA, sizeof(int));
auto e2 = gpuQueue.memcpy(devicePtrB, dataB, sizeof(int));
auto e3 = gpuQueue.parallel_for<kernel_a>(sycl::range{1024}, e1, [=](sycl::id<1> idx) {
devicePtrA[idx] = /* some computation */ });
auto e4 = gpuQueue.parallel_for<kernel_b>(sycl::range{1024}, e2, [=](sycl::id<1> idx) {
devicePtrB[idx] = /* some computation */ });
auto e5 = gpuQueue.memcpy(dataA), devicePtrA, sizeof(int), e3);
auto e6 = gpuQueue.memcpy(dataB, devicePtrB, sizeof(int), e4);
e5.wait(); e6.wait();
sycl::free(devicePtrA, gpuQueue);
sycl::free(devicePtrB, gpuQueue);
auto devicePtrA = sycl::malloc_device<int>(1024, gpuQueue);
auto devicePtrB = sycl::malloc_device<int>(1024, gpuQueue);
auto e1 = gpuQueue.memcpy(devicePtrA, dataA, sizeof(int));
auto e2 = gpuQueue.memcpy(devicePtrB, dataB, sizeof(int));
auto e3 = gpuQueue.parallel_for<kernel_a>(sycl::range{1024}, e1, [=](sycl::id<1> idx) {
devicePtrA[idx] = /* some computation */ });
auto e4 = gpuQueue.parallel_for<kernel_b>(sycl::range{1024}, e2, [=](sycl::id<1> idx) {
devicePtrB[idx] = /* some computation */ });
auto e5 = gpuQueue.memcpy(dataA), devicePtrA, sizeof(int), e3);
auto e6 = gpuQueue.memcpy(dataB, devicePtrB, sizeof(int), e4);
e5.wait(); e6.wait();
sycl::free(devicePtrA, gpuQueue);
sycl::free(devicePtrB, gpuQueue);