【问题标题】:Error:: SYCL objects are still alive while the runtime is shutting down错误:: SYCL 对象在运行时关闭时仍然存在
【发布时间】:2019-07-01 23:19:20
【问题描述】:

我正在尝试使用 Visual Studio 在 SYCL 上实现一个简单的向量加法示例。它构建成功,但在执行时它给了我 SYCL 对象在运行时关闭时仍然存在。。这是什么意思,我该如何解决,下面是示例代码。提前致谢

#include <CL/sycl.hpp>
using namespace cl::sycl;

#include <vector>
using std::vector;

vector<int> add_vectors(const vector<int>& a, const vector<int>& b);

int main() {
vector<int> a{ 1, 2, 3, 4, 5 };
vector<int> b{ 6, 7, 8, 9, 10 };
auto c = add_vectors(a, b);
return 0;
}
vector<int> add_vectors(const vector<int>& a, const vector<int>& b) {
const auto N = a.size();
buffer<int, 1> bufA(a.data(), range<1>{N});
buffer<int, 1> bufB(b.data(), range<1>{N});

vector<int> c(N);
buffer<int, 1> bufC(c.data(), range<1>{N});

queue myQueue;

myQueue.submit([&](handler& cgh) {
    auto A = bufA.get_access<access::mode::read>(cgh);
    auto B = bufB.get_access<access::mode::read>(cgh);
    auto C = bufC.get_access<access::mode::write>(cgh);

    cgh.parallel_for<class add>(
        range<1>{N},
        [=](id<1> i) {
        C[i] = A[i] + B[i];
    }
    );
});

return c;

}

【问题讨论】:

  • 我们尝试了代码,它可以正常工作。当您看到此错误时,通常可能是应用程序由于某种原因出现了段错误,因此清理没有正确进行。这可能发生在 OpenCL 驱动程序中。您使用的是什么硬件和 OpenCL 驱动程序?
  • 我的系统规格是 Intel Core(TM) i7-7700HQ @ 2.80Ghz、Intel HD Graphics 630 和 Nvidia GTX 1050
  • 我已经安装了 Intel SDK for OpenCL 2019 software.intel.com/en-us/opencl-sdk/choose-download
  • 如果我需要安装其他驱动程序,请发布链接。这对我很有帮助。谢谢
  • 您是针对英特尔的 SPIR 还是针对 NVIDIA 的 PTX?您可以尝试我在答案中的建议,看看您是否可以发现任何错误?

标签: sycl


【解决方案1】:

可以编写包含错误和异常处理的 SYCL 代码。 ComputeCpp developer website 上有一个指南。 此外,使用 gdb 收集回溯可能会提供一些关于哪里出了问题的线索。

在这种情况下,代码为我们成功执行,因此问题很可能出在 OpenCL 驱动程序中。

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 2016-02-29
    • 2015-08-06
    相关资源
    最近更新 更多