问题标签 [dpc++]

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 投票
2 回答
227 浏览

ccl - CCL 代码示例中的缓冲区以及 oneapi 工具包

我正在浏览 CCL 代码示例以及 oneapi 工具包。在下面的 DPC++(SYCL) 代码中,最初 sendbuf 在 cpu 端创建了一个缓冲区,但未初始化,在卸载到目标设备的部分中,dev_acc_sbuf[id] 变量是内核范围内的一个变量被修改. 因此,该变量(dev_acc_sbuf)没有在程序中使用,也没有将其值复制回 sendbuf。然后在下一行中,sendbuf 变量用于 allreduce。我无法理解更改 dev_acc_sbuf 如何更改 sendbuf。

0 投票
2 回答
962 浏览

sycl - 如何在 SYCL parallel_for(内核)中打印?

我正在研究与 oneAPI basekit 一起提供的 vectorAdd 示例应用程序。当我尝试在内核中打印总和时,出现以下错误。

编译时请查找随附的源代码和错误。

在编译期间,我收到以下错误。

0 投票
1 回答
137 浏览

parallel-processing - 运行 SYCL 代码时结果不正确。在尝试使循环并行化时

我是这个并行编程领域的新手。我正在尝试在 SYCL 中并行化以下串行代码。但是当我尝试运行代码时,我得到了不正确的结果。

请在下面找到序列号、SYCL 代码和输出屏幕截图。请帮我解决一下这个。

提前致谢。

并行代码的输出

0 投票
1 回答
288 浏览

c++ - 为自定义对象 oneAPI 创建数据缓冲区时遇到问题

我是 oneAPI 和类似框架的新手,所以我在使用 SYCL 数据缓冲区进行数据管理时遇到了麻烦。

我的任务是使用 Aho-Corasick 算法在给定字符串中查找子字符串。

我的想法是构建一个 trie,然后提交一个内核,该内核将在 trie 中并行查找子字符串。因此,为此我创建了一个 SYCL 队列,为字符串(用于在其中查找子字符串)、向量(用于存储搜索结果)和我的 Aho-Corasick 对象创建了缓冲区,该对象包含先前构建的树的根. 但是,关于最后一个我不确定,因为我正在为主机内存中的一个对象创建一个缓冲区,该缓冲区包含指向其他对象的指针(例如节点,它包含指向其他节点的指针)。

Node对象的结构:

这是搜索方法:

缓冲器:

并排队求和:

我发现程序在尝试访问子地图的项目后失败了。因此,我认为问题在于存储在 map 中的指针是指向主机内存的指针,设备无权访问。

0 投票
1 回答
444 浏览

sycl - sycl/dpc++ 访问器与内核函数对象中的 global_ptr

以下玩具代码使用 Intel OneAPI beta6。

问题:为什么 Increment_pointer 版本“错误”?没有编译/运行时错误。你只是没有在最后得到递增的 hbuffer。(我玩过一些类似的版本,其中 operator() 中的 ptr 最终为 0x0)。

我仍在学习用“SYCL”进行思考,因此欢迎详细解释。

0 投票
1 回答
161 浏览

sycl - 将访问器转换为内核代码中的 C++ 指针(尤其是(int (*)[Nelem])

环境:Ubuntu 18.04,OneAPI beta 6

完整的代码如下,但这是令人讨厌的错误:

有点解释,以防你想知道为什么......

在开发数据并行代码时,我经常开发英特尔曾经称之为“基本函数”的东西。这些被编写用于对应用程序的单个元素(SYCL 将其称为工作项)进行操作。我一直发现使用基本的软件开发环境更容易做到这一点,易于测试,并且更普遍地可重用(标量、SIMD、CUDA 等)。

在对单个元素进行测试之后,通过扩展调用代码而无需重写/重新测试函数,移动到数据并行非常容易:

变成

在 SYCL 内核中, fn1(x[item.get_linear_id()], NELEM); 将是我所需要的,而不必重写函数来理解 id 和/或访问器。

上述代码的 SYCL 问题是,在内核 C++ 中,我似乎无法将访问器指针重铸为 2D 指针。这在应用程序 C++ 中是允许的(参见上面的代码)。

也许这是一种纠正代码的坏方法,但它使开发/测试适用于标量和数据并行代码的代码变得容易,并使库在某种程度上具有可移植性。它还提供了一种绕过缓冲区/访问器的 SYCL 3 维限制的方法。

无论如何,我很好奇真正的 SYCL 程序员会怎么想。

玩具示例的完整代码:

编辑1:

根据 illuhad 的评论,我试图充实一些替代方案。

首先,这两行评论似乎应该按照他的建议做:

但实际上它会产生这个错误:

在 get_pointer 的末尾添加一个“get()”会产生相同的结果。

奇怪的是,解决错误的“初始化”部分:

产生有趣的错误:

所以如果/当有人有时间时,我仍然很好奇......

0 投票
1 回答
161 浏览

c++ - 如何在 DPC++ 编译器选项中指定 C++ 标准版本?

我偶然发现了英特尔 oneAPI 工具包形式的免费东西,一切都很好,示例编译得很好,但我不知道如何在编译器选项中指定 C++ 标准。据我了解,DPC++ 是建立在 Clang 之上的,所以我应该能够选择它编译的 C++ 版本,但我不知道如何。

如何让我的 C++17 代码工作?

0 投票
0 回答
112 浏览

sycl - SYCL 规范 1.2.1(第 7 版)第 4.8.9.3 节错误?

根据 SYCL 1.2.1 规范(修订版 7)第 4.8.9.3 节中的代码,我编写了以下代码:

使用 OneAPI beta07 编译时会出现许多错误。

规范中的示例似乎存在许多问题。一,OneAPI 和规范本身似乎都没有“build_from_name”方法。二,示例同时使用“MyProgram”和“myProgram”(次要但让我相信这不是来自经过验证的代码)。最后,我无法识别具有与示例匹配的签名的 parallel_for。

只是好奇怎么回事。

0 投票
2 回答
68 浏览

c++ - 在 DPC++ 向量加法中给出更大数组大小的随机退出代码

我正在尝试运行 oneAPI 的 hello-world DPC++ 示例,该示例在 CPU 和 GPU 上添加两个一维数组,并验证结果。代码如下所示:

使用相对较小的array_size,(我测试了 100-50k 个元素)计算结果很好。样本输出:

可以注意到,在 CPU 和 GPU 上完成计算只需要一秒钟。但是当我增加array_size, 说,100000我得到这个看似毫无头绪的错误:

虽然我不确定错误开始发生的精确值是多少,但我似乎确信它会在70000. 我似乎不知道为什么会发生这种情况,对可能出现什么问题有任何见解吗?

0 投票
2 回答
477 浏览

c++ - 使用 2D std::vector 对 SYCL 进行矩阵乘法

我是 SYCL 和 C++ 的新手。这是我使用 2D 进行简单矩阵乘法的内核std::vector

我收到两个错误,如下所示:

  1. 错误 #1:invalid operands to binary expression ('const std::vector<double, std::allocator<double>>' and 'const std::vector<double, std::allocator<double>>')
  2. 错误 #2:no viable overloaded '='

我尝试查找类似于 的错误invalid operands for binary expression (...),但它们似乎都不能帮助调试我的具体情况。也许是因为这对初学者不友好。

从我目前的理解来看,a_host.data()显示了一个返回类型std::vector<double>(不应该是std::vector< std::vector<double> >吗?)。

我尝试过使用std::array静态已知的尺寸,它可以工作。

如何使用 2D 完成这项工作std::vector

任何帮助,将不胜感激。