问题标签 [dynamic-parallelism]

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 回答
1164 浏览

cuda - OpenACC 中的嵌套指令

我正在尝试使用 OpenACC 的嵌套功能来激活我的 gpu 卡的动态并行性。我有 Tesla 40c,我的 OpenACC 编译器是 PGI 版本 15.7。

我的代码很简单。当我尝试编译以下代码时,编译器会返回这些消息

我的代码结构:

我还尝试更改我的代码以使用例程指令。但我无法再次编译

我当然只尝试过没有内部并行循环指令的例程(seq,worker,gang) 。它一直是编译器,但尚未激活动态并行性。

我应该如何在 OpenACC 中使用动态并行性?

0 投票
1 回答
567 浏览

cuda - 使用带有 nvcc 的 -G 标志编译为 cubin 后,Cublas 无法在内核中工作

我有一个如下所示的 CUDA 内核:

主机代码:

当这个内核运行 inline kernel<<<1,2>>>()、构建和链接(在 eclipse Nsight 中)时,内核运行完全正常并按 预期out返回。0.02

-G如果我使用(生成设备调试符号)将内核编译成 .cubin ,那么 cublas 函数永远不会运行,并且out总是0.0

我可以在 .cubin 运行时设置断点,我可以看到进入 cublas 函数的数据是正确的,但看起来 cublas 函数根本不会运行。cublas 函数也总是返回 0 CUDA_SUCCESS。重要的是,这仅在从 .cubin 运行时发生

要编译为我正在使用的 cubin -G

不返回任何错误。

如果添加该选项,为什么 .cubin 中的 cublas 函数会停止工作-G

CUDA 7.0 linux 14.04 x64 980GTX

0 投票
1 回答
127 浏览

cuda - 访问子内核中的 CUDA 内置变量

我正在尝试将开普勒的动态并行性用于我的一个应用程序。子内核中需要启动子内核的线程(在父内核中)的全局索引。换句话说,我想在子内核中访问父级的内置坐标变量。

有没有规范的方法可以做到这一点?或者我应该只计算父线程的全局索引(使用内置变量,如threadIdx.x等)并通过子内核的一个参数传递它?

0 投票
1 回答
779 浏览

c++ - 如何在 GPU(最好是 CUDA)上的两个数据容器上执行关系连接?

我正在尝试做的事情:

在 GPU 上,我试图模仿 SQL 在关系代数中使用的约定来对表执行连接(例如内连接、外连接、交叉连接)。在下面的代码中,我想要执行内部联接。想象两张表(容器),其中一张是父/主表,另一张是子表。父子连接关系是一对多(或一对无,如果 Child_ParentIDs 中没有与 Parent_IDs 中的元素匹配的元素)。

示例输入数据:

作为 SQL 查询的操作:

操作说明:

将 Child_ParentIDs 加入 Parent_IDs 以访问相应的 Parent_Values。使用相应的 Parent_Values 与相应的 Child_Permanences 相乘,并将每个操作的结果放入 Child_Values。

预期输出(Child_Values 是操作期间唯一更改的向量):

解释(以防它没有意义):

2226 的值是通过将 106 和 21 相乘得出的。10439 是通过将 143 和 73 相乘得出的。还要注意,所有条目都保留在子向量上(所有 7 个元素仍然存在于输出中,尽管 Child_Values 单个元素已更新)。父向量不会保留在输出中(请注意,向量列表中缺少 ParentID 4,并且那里没有“虚拟”占位符)。这是“内部联接”的行为。

我还没有开始工作的优雅解决方案的想法:

- 利用 CUDA 的动态并行性。也许我在整个互联网上发现的唯一解决方案正是我想要做的事情是here-part 1here-part 2

- 使用 CUDPP 的哈希运算;

-Alenka DB。

最后,我的问题再次重申:

从纯粹的 GPU 角度来看,是否有任何可行的解决方案(最好使用 CUDA,但 OpenCL 也可以)用于在两个单独的数据容器上完成关系连接,以便可以搜索数据并通过所述连接并行更新元素?

编辑
Parent_IDs 并不总是一个序列。在运行时,可能会删除父向量中的元素。新插入的父元素将始终附加一个从最后一个元素的 ID 播种的 ID。话虽如此,我理解这意味着子元素可能是孤立的,但我没有在这里解决解决方案。

0 投票
1 回答
211 浏览

cuda - 编译/运行涉及动态并行的 CUDA 代码时遇到问题

我正在尝试对 CUDA 使用动态并行性,但我无法完成编译步骤。

我正在使用具有 Compute Capability 3.5 和 CUDA 7.5 版的 GPU。

根据我使用的编译命令中的开关,我收到不同的错误消息,但使用文档

  • 我到达了导致成功编译的一行:

    但是当程序启动时,所有程序都失败了。使用 CUDA-memcheck,每次调用 API 函数,我都会收到相同的错误消息:

    /li>
  • 我也尝试过这一行(取自 CUDA 动态示例 makefile):

    但在执行后,我得到:

    /li>

我想了解如何正确编译 CUDA 动态代码,因为到目前为止我尝试过的所有其他编译行都失败了。

0 投票
3 回答
2457 浏览

cuda - 使用 Nvidia Nsight 生成可重定位设备代码

我正在尝试在 CUDA 上编译一个动态并行示例,当我尝试编译它时会给出错误提示,

kernel launch from __device__ or __global__ functions requires separate compilation modes

后来发现我必须将--relocatable-device-code标志设置为true. relocatable-device-code但是,为了true在 Nsight Eclipse 中进行设置,是否需要设置一个标志?

0 投票
1 回答
465 浏览

cuda - 如果内核中存在 CUBLAS,则在第一个 cudaMalloc 上出现“未知错误”

我有以下最小.cu文件

如您所见,test内核甚至没有被调用,而是cudaMalloc返回30(未知错误)。该文件正在使用可分离编译(动态并行性所需)和计算能力 5.2(也尝试过 3.5 和 5.0,它们没有改变任何东西)进行编译。删除对返回cublasCreate原因的调用(无错误)。cudaMalloc0

可能是什么原因?我该如何解决?我需要使用理论上支持的动态并行性从内核调用 CUBLAS ,因此“只需删除调用”不是一个选项。

这是对应的CMakeLists.txt

下面是一组理论上类似的编译命令(结果至少是一样的):

0 投票
1 回答
128 浏览

cuda - CUDA 动态并行性延迟全局内存

为了测试动态并行性,我编写了一个简单的代码并在 GTX1080 上使用以下命令对其进行编译。

但是,输出并不像预期的那样。似乎传递给子内核的指针被取消引用。

这是输出:

从编程指南中阅读,我应该能够将全局变量传递给子内核而不会引起任何延迟。我不确定为什么输出不正确。我的最终目标是在内核中使用 cublas 库。朝这个方向提出的任何建议也会有所帮助。

0 投票
1 回答
798 浏览

cuda - 编译 cuda 代码时出现“device-function-maxrregcount”消息

我正在尝试编写一个在内核内部执行多个向量点积的代码。我正在使用cublas库中的cublasSdot函数来执行矢量点积。这是我的代码:

我已包含 cublas_v2 库并使用以下命令编译代码:

但我收到以下消息:

谁能让我知道我应该怎么做?

0 投票
1 回答
755 浏览

cuda - 动态并行 - 将共享内存的内容传递给生成的块?

虽然我已经编写了一段时间的 CUDA 内核,但我还没有使用动态并行 (DP)。我遇到了一项我认为可能适合的任务;但是,我希望能够使用 DP 的方式是:

如果 block 发现它需要更多线程来完成它的工作,它就会产生它们;它将“它所知道的”传递给它的衍生线程——本质上,它的共享内存的内容,每个衍生线程块在其自己的共享内存中获得一份副本;线程使用它们的父线程“知道”的东西来确定他们需要继续做什么,然后去做。

但是,AFAICT 不会发生这种共享内存的“继承”。全局内存(和通过内核参数的常量内存)是“父”DP内核块可以将信息传递给其“子”块的唯一方式吗?