在SYCL中找不到CL / cl.h

时间:2019-03-26 13:55:37

标签: opencl sycl

我刚刚开始使用SYCL,并在系统上运行了ComputeCpp_info,并显示了3个设备上的以下数据

ComputeCpp信息(CE 1.1.0)

SYCL 1.2.1版本3

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

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

设备3(英特尔®酷睿™i7-7700HQ CPU @ 2.80GHz =未测试-设备正在运行未经测试的驱动程序)

现在我的问题是我是否可以在这些设备上工作,因为2个未经测试,而1个是不可能的?还是我缺少一些司机?

我也实现了一个简单的示例,但它给了我CL / cl.h找不到错误

#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;
    });
});

}

2 个答案:

答案 0 :(得分:1)

computecpp_info工具显示系统上ComputeCpp支持或不支持的设备。这是输出的说明:

否-设备不支持SPIR:这意味着可以看到该设备,但不支持SPIR指令,因此ComputeCpp无法支持该设备

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

cl.h标头缺少错误是因为您缺少OpenCL标头。可以在here中找到它们,并且在编译代码时需要指向它们。我建议将Getting Started guide与示例代码一起使用,然后修改hello world示例以测试您的代码。它具有一个现有的CMake文件,该文件旨在搜索所需的所有依赖项。

答案 1 :(得分:0)

  1. (这是特定于ComputeCpp的问题,而不是SYCL)UNTESTED平台可能会运行,但是Codeplay无法保证。以我的经验,两者都应该起作用,也许某些OpenCL驱动程序错误会根据您的配置在Intel GPU上击中您。
  2. 由于SYCL 1.2.1规范是建立在OpenCL之上的,因此系统中需要OpenCL标头

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