问题标签 [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.
profiling - sycl::info::event_profiling 中的 command_submit 提交整个代码还是仅提交并行?
我尝试分析我的功能在设备上的执行时间。我读了这个链接: https : //docs.oneapi.com/versions/latest/dpcpp/iface/event.html 但我没有在文档中找到任何关于 sycl::info::event_profiling 的信息,这让我理解它们完全对应的是什么。我的意思是,command_start、command_end、command_submit。例如:这是我的代码的一部分,内核,
我想了解 cl::sycl::info::event_profiling::command_submit,提交整个代码还是只提交并行?
sycl - sycl/dpc++ 使用全局指针访问全局变量
我正在尝试从 sycl 内核内部访问一个全局变量。使用此模式的代码及其输出如下。
它的输出如下。
即使 g_var 更改为 27,它也会在内核内部以 22 的初始值打印。这是预期的行为吗?
通常 lambdas 不会创建全局变量的副本。dpc++ 编译器是在设备内部创建全局变量的副本,还是在编译期间传播常量值以便在运行时不访问全局内存?
sycl - 读取缓冲区拥有的访问内存
根据 SYCL参考
缓冲区可以由主机数据指针初始化。虽然缓冲区存在,但它拥有主机数据,并且在此期间对主机数据指针的直接访问是未定义的。
这对于输出缓冲区是可以理解的。但是只读缓冲区呢?在以下代码片段中,在内核完成之前访问只读缓冲区是未定义的行为吗?
opencl - SYCL 内核中的分段错误
我一直在尝试在 SYCL 中实现简单的矩阵乘法,但是一旦内核启动,我总是会遇到分段错误。我的代码如下 -
输出如下 -
我无法弄清楚分段错误的根源。任何帮助表示赞赏。
提前致谢
编辑 --g
作为编译器标志传递以获取调试符号,输出如下 -
并在 GDB 下运行它 - 这是输出
这是我的 CMake,仅供参考,以便您知道正在传递的编译器标志
更新 - 在调试期间,我将所有索引更改为 0,但仍然抛出分段错误(如果使用 -g 编译器标志,则无效对象错误),这让我相信数据访问不是问题,而是其他问题.
回溯如下 -
本质上它停在program.h
文件中的这段代码处
显然,它无法检索内核函数。
c++ - 在 CMake 中设置各种编译器以创建共享库
我希望为我的项目中的不同文件夹设置各种编译器,这些编译器应该编译为共享库。
项目结构如下——
Cuda 文件夹下的所有文件都必须由 nvcc 编译,SYCL 文件夹下的文件必须由系统路径中存在的特定编译器编译。这些文件夹之外的所有文件(即 main.cpp 和 test.cpp)都是普通的 C++ 代码,并使用这两个文件夹中的头文件,并且必须使用 GCC 编译。
我该如何为这样的项目结构(旨在成为共享库)编写 CMake。
编辑 - 项目不需要只有一个专用的 CMake。我的方法如下 -
- 每个文件夹(Cuda 和 SYCL)都可以有它们专用的 CmakeLists.txt,它会指定编译器和与之配套的各种标志。
- 文件夹外的主 CMake 可以使用该
add_subdirectory
命令。这就是我卡住的地方,我不确定下一步该怎么做,如何将这两个文件夹与主文件和测试文件链接起来。
sycl - 使用 dpc++ 从 sycl 程序创建静态或共享库
我正在尝试从 sycl 程序创建一个静态或共享库,并从使用 gcc/g++/clang++ 的主应用程序构建中使用它。如果我使用 dpcpp 构建我的主应用程序,一切都很好,但我需要使用 g++。
例如,我的示例 sycl_lib.cpp 和主程序如下。
要创建一个静态库并使用它:
这工作正常。但我想使用 g++ 构建 main.cpp,它会导致运行时错误。
这给出了以下错误
使用 g++ 创建的可执行文件是否可以使用使用 dpc++ 创建的 sycl 库?
谢谢
c++ - 错误:内核参数具有非平凡复制的可构造类/结构类型+sycl+tbb
我尝试提供一种“映射”骨架,它通过一些指定目标类型(CPU 或 GPU/加速器)的参数来包装 OneAPI 调用隐藏硬件目标问题。我的地图骨架传递函数及其与牛顿方法的初始点的导数。但我有一个错误是:
我的代码是:
另外,如果我们不考虑错误,我认为我的代码中的某些内容似乎不正确,但我无法理解它是什么。
c++ - Sycl 部分+ DPCPP 中的互相关和错误
我尝试编写互相关函数。在我的程序中,我编写了一个 Map 框架,它包装 OneAPI 调用,通过一些指定目标类型(CPU 或 GPU/加速器)的参数隐藏硬件定位问题。问题是,在 Sycl 部分,程序出现了一些错误,我无法解决它们。我的代码:
错误是:
'sycl::buffer 的初始化没有匹配的构造函数
==================================================== ====
===============================================
==================================================== =
c++ - 错误没有匹配函数调用'slice_matrix'的互相关函数+ Sycl
我尝试在 Sycl 和 OneAPI 中编写 2D 互相关。这个想法是编写一种 Map 骨架,它包装 OneAPI 调用,通过一些指定目标类型(CPU 或 GPU/加速器)的参数隐藏硬件目标问题。
这是我的地图类:
这是我的 slice_matrix:
问题是,在 Sycl 部分里面的 parallel-for
该程序向我显示了一个错误,即:
我试图将我的 slice_matrix 放在 Map 类中,但没有任何改变。我还考虑了 Sycl 关于“本规范定义的 SYCL 设备代码不支持虚函数调用”的限制,所以我定义了 slice_matrix 的本地副本,但我又遇到了错误。
我无法理解如何解决此错误。
c++ - DPCPP:像 SYCL+ OneAPI 中的 2D 矢量一样处理 1D 矢量
我尝试在 GPU 上执行我的 slice_matrix 函数。实际功能是:
我的代码的 SYCL 部分是:
我知道 vector<vector> 不会创建连续的内存块。所以我使用了向量,并尝试将其解释为二维数据块。我定义的:
但我不知道该怎么办?!我应该像 2D 一样传递我的访问器,还是应该更改 slice_matrix 并表现得像 2D 矩阵。我应该指出 slice_matrix 函数可能被其他函数调用,在这种情况下它在 CPU 上执行。我的意思是这个函数不仅用于在 GPU 上执行,它还用于在 CPU 上执行,即: