我刚刚开始使用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;
});
});
}
答案 0 :(得分:1)
computecpp_info工具显示系统上ComputeCpp支持或不支持的设备。这是输出的说明:
否-设备不支持SPIR:这意味着可以看到该设备,但不支持SPIR指令,因此ComputeCpp无法支持该设备
未测试-设备未在此操作系统上进行测试:这意味着可以看到该设备,并报告该设备支持SPIR指令。它应该可以与ComputeCpp一起使用,但是此特定设备尚未经过ComputeCpp团队的测试。
cl.h标头缺少错误是因为您缺少OpenCL标头。可以在here中找到它们,并且在编译代码时需要指向它们。我建议将Getting Started guide与示例代码一起使用,然后修改hello world示例以测试您的代码。它具有一个现有的CMake文件,该文件旨在搜索所需的所有依赖项。
答案 1 :(得分:0)
免责声明:我是一名在ComputeCpp工作的Codeplay员工!