1

我是这个并行编程领域的新手。我正在尝试在 SYCL 中并行化以下串行代码。但是当我尝试运行代码时,我得到了不正确的结果。

请在下面找到序列号、SYCL 代码和输出屏幕截图。请帮我解决一下这个。

提前致谢。

//Serial code

for(int i = 0; i < N; i++)
        a[i]=pow(p+i,q-i);

//Paralle code

queue defaultqueue;
        buffer<unsigned long long int,1> buf(a, range<1>(N));
        defaultqueue.submit([&](handler &cgh){
            auto bufacc = buf.get_access<access::mode::read_write>(cgh);
            cgh.parallel_for<class single_dim>(range<1>(N), [=](nd_item<1> it){
                auto idx = it.get_global_linear_id();
                unsigned long long int x;
                x=pow(p+idx,q-idx);
                bufacc[idx] += x;
            });
        });

并行代码的输出

4

1 回答 1

1

SYCL 中的内核调用是非阻塞的,即 CPU 在调用内核后继续执行,无需等待内核完成

这可能会导致数据不一致,尤其是在您的情况下,因为您在内核启动后立即访问数据。当内核进行大量耗时的计算时,这将更加重要

因此,您可以在内核调用后尝试使用defaultqueue.wait()

希望这能解决您的问题

于 2019-12-03T08:32:36.690 回答