问题标签 [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.

0 投票
1 回答
75 浏览

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,提交整个代码还是只提交并行?

0 投票
1 回答
149 浏览

sycl - sycl/dpc++ 使用全局指针访问全局变量

我正在尝试从 sycl 内核内部访问一个全局变量。使用此模式的代码及其输出如下。

它的输出如下。

即使 g_var 更改为 27,它也会在内核内部以 22 的初始值打印。这是预期的行为吗?

通常 lambdas 不会创建全局变量的副本。dpc++ 编译器是在设备内部创建全局变量的副本,还是在编译期间传播常量值以便在运行时不访问全局内存?

0 投票
1 回答
54 浏览

sycl - 读取缓冲区拥有的访问内存

根据 SYCL参考

缓冲区可以由主机数据指针初始化。虽然缓冲区存在,但它拥有主机数据,并且在此期间对主机数据指针的直接访问是未定义的。

这对于输出缓冲区是可以理解的。但是只读缓冲区呢?在以下代码片段中,在内核完成之前访问只读缓冲区是未定义的行为吗?

0 投票
1 回答
142 浏览

opencl - SYCL 内核中的分段错误

我一直在尝试在 SYCL 中实现简单的矩阵乘法,但是一旦内核启动,我总是会遇到分段错误。我的代码如下 -

输出如下 -

我无法弄清楚分段错误的根源。任何帮助表示赞赏。

提前致谢

编辑 --g作为编译器标志传递以获取调试符号,输出如下 -

并在 GDB 下运行它 - 这是输出

这是我的 CMake,仅供参考,以便您知道正在传递的编译器标志

更新 - 在调试期间,我将所有索引更改为 0,但仍然抛出分段错误(如果使用 -g 编译器标志,则无效对象错误),这让我相信数据访问不是问题,而是其他问题.

回溯如下 -

本质上它停在program.h文件中的这段代码处

显然,它无法检索内核函数。

0 投票
1 回答
99 浏览

c++ - 在 CMake 中设置各种编译器以创建共享库

我希望为我的项目中的不同文件夹设置各种编译器,这些编译器应该编译为共享库。

项目结构如下——

Cuda 文件夹下的所有文件都必须由 nvcc 编译,SYCL 文件夹下的文件必须由系统路径中存在的特定编译器编译。这些文件夹之外的所有文件(即 main.cpp 和 test.cpp)都是普通的 C++ 代码,并使用这两个文件夹中的头文件,并且必须使用 GCC 编译。

我该如何为这样的项目结构(旨在成为共享库)编写 CMake。

编辑 - 项目不需要只有一个专用的 CMake。我的方法如下 -

  • 每个文件夹(Cuda 和 SYCL)都可以有它们专用的 CmakeLists.txt,它会指定编译器和与之配套的各种标志。
  • 文件夹外的主 CMake 可以使用该add_subdirectory命令。这就是我卡住的地方,我不确定下一步该怎么做,如何将这两个文件夹与主文件和测试文件链接起来。
0 投票
1 回答
203 浏览

sycl - 使用 dpc++ 从 sycl 程序创建静态或共享库

我正在尝试从 sycl 程序创建一个静态或共享库,并从使用 gcc/g++/clang++ 的主应用程序构建中使用它。如果我使用 dpcpp 构建我的主应用程序,一切都很好,但我需要使用 g++。

例如,我的示例 sycl_lib.cpp 和主程序如下。

要创建一个静态库并使用它:

这工作正常。但我想使用 g++ 构建 main.cpp,它会导致运行时错误。

这给出了以下错误

使用 g++ 创建的可执行文件是否可以使用使用 dpc++ 创建的 sycl 库?

谢谢

0 投票
1 回答
104 浏览

c++ - 错误:内核参数具有非平凡复制的可构造类/结构类型+sycl+tbb

我尝试提供一种“映射”骨架,它通过一些指定目标类型(CPU 或 GPU/加速器)的参数来包装 OneAPI 调用隐藏硬件目标问题。我的地图骨架传递函数及其与牛顿方法的初始点的导数。但我有一个错误是:

我的代码是:

另外,如果我们不考虑错误,我认为我的代码中的某些内容似乎不正确,但我无法理解它是什么。

0 投票
1 回答
70 浏览

c++ - Sycl 部分+ DPCPP 中的互相关和错误

我尝试编写互相关函数。在我的程序中,我编写了一个 Map 框架,它包装 OneAPI 调用,通过一些指定目标类型(CPU 或 GPU/加速器)的参数隐藏硬件定位问题。问题是,在 Sycl 部分,程序出现了一些错误,我无法解决它们。我的代码:

错误是:

'sycl::buffer 的初始化没有匹配的构造函数

==================================================== ====

===============================================

==================================================== =

0 投票
1 回答
125 浏览

c++ - 错误没有匹配函数调用'slice_matrix'的互相关函数+ Sycl

我尝试在 Sycl 和 OneAPI 中编写 2D 互相关。这个想法是编写一种 Map 骨架,它包装 OneAPI 调用,通过一些指定目标类型(CPU 或 GPU/加速器)的参数隐藏硬件目标问题。

这是我的地图类:

这是我的 slice_matrix:

问题是,在 Sycl 部分里面的 parallel-for

该程序向我显示了一个错误,即:

我试图将我的 slice_matrix 放在 Map 类中,但没有任何改变。我还考虑了 Sycl 关于“本规范定义的 SYCL 设备代码不支持虚函数调用”的限制,所以我定义了 slice_matrix 的本地副本,但我又遇到了错误。

我无法理解如何解决此错误。

0 投票
1 回答
81 浏览

c++ - DPCPP:像 SYCL+ OneAPI 中的 2D 矢量一样处理 1D 矢量

我尝试在 GPU 上执行我的 slice_matrix 函数。实际功能是:

我的代码的 SYCL 部分是:

我知道 vector<vector> 不会创建连续的内存块。所以我使用了向量,并尝试将其解释为二维数据块。我定义的:

但我不知道该怎么办?!我应该像 2D 一样传递我的访问器,还是应该更改 slice_matrix 并表现得像 2D 矩阵。我应该指出 slice_matrix 函数可能被其他函数调用,在这种情况下它在 CPU 上执行。我的意思是这个函数不仅用于在 GPU 上执行,它还用于在 CPU 上执行,即: