0

我刚刚开始研究 SYCL 并在我的系统上运行 ComputeCpp_info 并显示了 3 台设备上的以下数据

ComputeCpp 信息 (CE 1.1.0)

SYCL 1.2.1 修订版 3

设备 1(GeForce GTX 1050 = NO - 设备不支持 SPIR)

设备 2(Intel(R) HD Graphics 630 = UNTESTED - 设备未在此操作系统上测试)

设备 3(Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz = UNTESTED - 设备运行未经测试的驱动程序)

现在我的问题是我可以在这些设备上工作吗,因为 2 未经测试而 1 是不可能的?还是我缺少一些驱动程序?

我也实现了一个简单的例子,但它给了我 CL/cl.h not found 错误

#include <CL/sycl.hpp>
#include <array>
#include <numeric>
#include <iostream>

int main() {

const size_t array_size = 1024 * 512;
std::array<cl::sycl::cl_int, array_size> in, out;
std::iota(begin(in), end(in), 0);

cl::sycl::queue device_queue;

cl::sycl::range<1> n_items{ array_size };

cl::sycl::buffer < cl::sycl::cl_int, 1> in_buffer(in.data(), n_items);
cl::sycl::buffer < cl::sycl::cl_int, 1> out_buffer(out.data(), n_items);

device_queue.submit([&](cl::sycl::handler &cgh) {

    constexpr auto sycl_read = cl::sycl::access::mode::read;
    constexpr auto sycl_write = cl::sycl::access::mode::write;

    auto in_accessor = in_buffer.get_access<sycl_read>(cgh);
    auto out_accessor = out_buffer.get_access<sycl_write>(cgh);

    cgh.parallel_for<class VecScalMul>(n_items,
        [=](cl::sycl::id<1> wiID) {
        out_accessor[wiID] = in_accessor[wiID] * 2;
    });
});

}
4

2 回答 2

2

computecpp_info 工具显示系统上 ComputeCpp 支持或不支持的设备。以下是对输出的解释:

NO - 设备不支持 SPIR:这意味着可以看到设备但它不支持 SPIR 指令,因此 ComputeCpp 不支持

UNTESTED - 设备未在此操作系统上测试:这意味着可以看到设备并报告它支持 SPIR 指令。它应该可以与 ComputeCpp 一起使用,但此特定设备尚未经过 ComputeCpp 团队的测试

cl.h 标头丢失错误是因为您缺少 OpenCL 标头。这些可以在这里找到,您需要在编译代码时指向它们。我建议使用带有示例代码的入门指南,然后修改 hello world 示例以测试您的代码。这有一个现有的 CMake 文件,旨在搜索您需要的所有依赖项。

于 2019-03-26T16:49:50.183 回答
0
  1. (这是一个 ComputeCpp 特定的问题,而不是 SYCL) UNTESTED 平台可能会工作,但 Codeplay 不能保证。以我的经验,两者都应该可以工作,也许一些 OpenCL 驱动程序错误会在英特尔 GPU 上影响您,具体取决于您的配置。
  2. 您需要系统中的 OpenCL 标头,因为 SYCL 1.2.1 规范建立在 OpenCL 之上

免责声明:我是在 ComputeCpp 工作的 Codeplay 员工!

于 2019-03-26T14:37:07.093 回答