问题标签 [sycl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opencl - Single source C++ programming model?
What is mean by single source c++ programming model.I have recently came to know about SYCL which people describes it as a Single source C++ programming model related to OPENCL. I would highly appreciate the answers which describes what SYCL is ? and how it works ? Thank you guys!
c++ - 对浮点数求和的最佳 OpenCL 2 内核是什么?
C++ 17 引入了许多新算法来支持并行执行,特别是std::reduce是std::accumulate的并行版本,它允许操作non-deterministic
行为non-commutative
,例如浮点加法。我想使用 OpenCL 2 实现减少算法。
英特尔在这里有一个示例,它使用 OpenCL 2work group
内核函数来实现std::exclusive_scan OpenCL 2 内核。以下是基于英特尔exclusive_scan
示例的内核对浮点数求和:
上面的内核工作(或似乎!)。但是,exclusive_scan
需要work_group_broadcast
函数将 one 的最后一个值传递work group
给下一个,而这个内核只需要将 work_group_reduce_add 的结果添加到sum_val
,因此atomic add
更合适。
OpenCL 2 提供了一个atomic_int
支持atomic_fetch_add
. 上面使用 atomic_int 的内核的整数版本是:
OpenCL 2 也提供了一个,atomic_float
但它不支持atomic_fetch_add
.
实现 OpenCL2 内核对浮点数求和的最佳方法是什么?
c++ - 如何从 SYCL 内核中提取控制流?
使用 SYCL 在任何 OpenCL 设备上运行代码不需要自定义编译器,因为一切都在库中完成(充满了模板魔法),标准 GCC/Clang 就可以了。这个对吗?(特别是在我正在使用的 triSYCL 的情况下......)
如果是这样...我知道可以通过在自定义“句柄”或“包装器”类上重载一堆运算符来提取简单的表达式树,但控制流并非如此。我错了吗?
本文的第 3.1 节讨论了向 C++ 添加 EDSL 的几种不同方法的优缺点,但我对 SYCL 使用的方法的实际技术实现更感兴趣。
我试图查看一些与 SYCL 相关的项目(Eigen、TensorFlow、triSYCL、ComputeCpp 等)的源代码,但到目前为止我无法在其中找到答案。
那么:SYCL 库(?)如何在不需要自定义/扩展编译器的情况下发现内核的完整控制流图,以普通 C++ lambda 形式给出?
c++ - 如何创建一个 cl::sycl::buffers 数组?
我正在使用 Xilinx 的 triSYCL github 实现,https://github.com/triSYCL/triSYCL。
我正在尝试创建一个具有 100 个生产者/消费者的设计,以从 100 个管道读取/写入。我不确定的是,如何创建一个数组cl::sycl::buffer
并使用std::iota
.
这是我的代码:
我收到以下错误:
error: no matching function for call to ‘cl::sycl::buffer<float, 2>::buffer(<brace-enclosed initializer list>)’
cl::sycl::buffer<float, n_threads> a { T };
我是 C++ 编程的新手。所以我无法弄清楚执行此操作的确切方法。
c++ - 有没有办法可以创建一个 cl::sycl::pipe 数组?
我正在使用 Xilinx 的 triSYCL github 实现,https://github.com/triSYCL/triSYCL。
我正在尝试创建一个带有 100 个的cl::sycl::pipes
设计capacity= 6
。我将通过 SYCL 代码中的单独线程访问每个管道。
这是我尝试过的:
该代码只是tests/pipe/pipe_producer_consumer.cpp
github 存储库中文件的副本。我刚刚for loop
在它上面添加了一个并行实例化多个线程。
我在这方面遇到了多个错误:error: no matching function for call to ‘cl::sycl::pipe<cl::sycl::pipe<float> >::pipe(<brace-enclosed initializer list>)’
cl::sycl::pipe<cl::sycl::pipe<float>> p { n_threads, cl::sycl::pipe<float> { T } };
opencl - /usr/local/cuda-8.0/lib64/libOpenCL.so.1:没有可用的版本信息
当我跑步时computecpp_info
并且在运行时clinfo
在这里,我试图找到这个问题的原因/usr/local/cuda-8.0/lib64/libOpenCL.so.1: no version information available
并试图解决这个问题,但我没有得到任何富有成效的帮助。请通过解释或参考某些内容来帮助您弄清楚。
c++ - 在抛出 'cl::sycl::detail::exception_implementation<(cl::sycl::detail::exception_types)9>' 的实例后调用终止
我是 SYCL/OpenCL/GPGPU 的新手。我正在尝试构建和运行常量添加程序的示例代码,
我正在使用构建此代码
$ g++ constantAdder_backup.cpp -g -std=c++11 -o constantAdder -I /usr/local/computecpp/include -I/usr/include/ -L /usr/local/computecpp/lib -lComputeCpp -L /usr /lib/x86_64-linux-gnu -lOpenCL
并得到错误
什么是
在抛出 'cl::sycl::detail::exception_implementation<(cl::sycl::detail::exception_types)9, cl::sycl::detail::exception_implementation<(cl::sycl: :detail::exception_types)6, cl::sycl::exception> >' Aborted (core dumped) 错误是什么意思?我怎样才能解决这个问题?请帮我。
PS 系统硬件是
PS 我已经更新了代码以了解我正在运行代码的设备。
修改片段是
现在我正在cpu::selector
使用(不是 nvidia 硬件)并打印设备。它清楚地表明它正在运行Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
。的输出
couputecpp_info
节目
但是,它仍然显示与相同的错误
在抛出 'cl::sycl::detail::exception_implementation<(cl::sycl::detail::exception_types)9, cl::sycl::detail::exception_implementation<(cl::sycl: :detail::exception_types)6, cl::sycl::exception> >' 中止(核心转储)
c++ - 捕获到 SYCL 异常:错误:[ComputeCpp:RT0101] 无法创建内核((内核名称:SYCL_class_multiply))
我克隆了https://github.com/codeplaysoftware/computecpp-sdk.git并修改了 computecpp-sdk/samples/accessors/accessors.cpp
文件。
我刚加了std::cout << "SYCL exception caught: " << e.get_cl_code() << '\n';
。
查看完全修改的代码:
构建后,我执行了二进制文件并得到以下错误输出:
硬件配置如下:
请帮助理解错误并解决相同的问题。让我知道是否需要更多信息。我想在我的 NVidia GPU 上运行这个示例代码。
opencl - SYCL 设备选择器中的 host_selector 是什么?
我是 SYCL、OpenCL 和 GPU 编程的新手。我在 SYCL 中阅读了有关设备选择器的信息,发现了以下四个:
- default_selector :系统启发式选择的设备。如果未找到 OpenCL 设备,则默认为 SYCL 主机设备。
- gpu_selector :根据设备类型 info::device::device_type::gpu 从所有可用的 OpenCL 设备中选择设备。如果未找到 OpenCL GPU 设备,则选择器失败。
- cpu_selector :根据设备类型 info::device::device_type::cpu 从所有可用设备和启发式中选择设备。如果没有找到 OpenCL CPU 设备,则选择器失败。
- host_selector :选择不需要 OpenCL 运行时的 SYCL 主机 CPU 设备。
我跑去computecpp_info
找设备是:
因此,GeForce GTX 750 Ti
设备Intel(R) HD Graphics
是 GPU 设备,Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
也是 CPU 设备。这里是怎么host devices
回事?
如果我选择host_selector
,我SYCL code
会在哪里运行?
tensorflow - Ubuntu 16.04 上带有 Tensorflow 和 OpenCL 的多个 AMD GPU
经过一番挣扎:
在带有amdgpu 17.50的全新Ubuntu 16.04上使用 OpenCL 成功构建了 Tensorflow 。
安装了 5 个相同的 GPU (rx580),所有这些 GPU 都按预期由 clinfo 和 computecpp_info 报告。
运行 MNIST convnet 示例,TF 可以工作,但只使用 GPU0 而没有看到其他 GPU。
dmesg中没有报关于卡的错误,他们似乎都在最底层准备好了,不知道为什么SYCL似乎忽略了一些卡。
这是computecpp_info输出:
这是来自tensorflow的列表:
编辑:重启后
我真的不知道这些警告是否相关,因为它们在第一次运行后就消失了。
编辑:dmesg 详细信息
编辑:它与任何特定的卡无关,只是总线顺序中的第一个可用。
我尝试断开一些卡的连接,在所有测试之后,似乎很清楚 SYCL 总是只列出第一个 GPU,不管是哪一个,总是最小的可用总线号。
这也证实了卡之间没有差异,并且所有卡都可以使用(至少单独使用),所以我认为操作系统很好,我猜问题出在 SYCL 中。
请帮忙!