我正在尝试 sycl/dpc++。我写了下面的代码。我正在设备端创建一个数组 deviceArr,使用 memcpy 将 hostArr 的值复制到该数组,然后使用 parallel_for 内核将 devicearray 的值增加 1,并使用 memcpy 将值复制回来。
queue q;
std::array<int, 10> hostArr;
for (auto &val : hostArr)
val = 1;
int *deviceArr = malloc_device<int>(10, q);
q.submit([&](handler &h)
{ memcpy(deviceArr, &hostArr[0], 10 * sizeof(int)); });
q.submit([&](handler &h)
{ h.parallel_for(10, [=](auto &idx)
{ deviceArr[idx]++; }); });
q.submit([&](handler &h)
{ memcpy(&hostArr[0], deviceArr, 10 * sizeof(int)); });
这段代码编译得很好,但是在运行时我在运行时收到以下错误。
**Command group submitted without a kernel or a explicit memory operation. -59 (CL_INVALID_OPERATION)**
但是我可以看到我提交的所有队列都有内核(parallel_for
)或内存操作(memcpy
)。谁能解释为什么会发生此错误?