问题标签 [cuda-streams]
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.
concurrency - 让nvidia K20c使用旧的流管理方式?
从 K20 开始,不同的流变得完全并发(以前在边缘是并发的)。
但是我的程序需要旧的方式。或者我需要做很多同步来解决依赖问题。
是否可以将流管理切换到旧方式?
cuda - 流调度顺序
我看到流程一和流程二(如下)的方式是相同的,因为它们花费的时间相同。我错了吗?
流程一:
流程二:(操作相同,顺序不同)
concurrency - 多内核的 Cuda 流处理
您好,关于多内核的 Cuda 流处理的几个问题。假设 s 流和内核在支持 3.5 的开普勒设备中,其中 s <= 32。内核使用大小为 n 的 dev_input 数组和大小为 s*n 的 dev 输出数组。内核从输入数组读取数据,将其值存储在寄存器中,对其进行操作并将其结果写回 dev_output 的位置 s*n + tid。
我们的目标是每次使用 n 个流之一运行相同的内核 s 次。类似于 simpleHyperQ 示例。您能否评论以下任何一项是否以及如何影响并发?
- dev_input 和 dev_output 未固定;
- dev_input 原样与 dev_input 大小 s*n,其中每个内核读取唯一数据(无读取冲突)
- 内核从常量内存中读取数据
- 每个块分配 10kb 的共享内存。
- 内核使用 60 个寄存器
任何好的评论将不胜感激......!!!
干杯,塔纳西奥
罗伯特,非常感谢您的详细回答。这非常有帮助。我编辑了 4,它是每块 10kb。所以在我的情况下,我启动了 61 个块和 256 个线程的网格。内核在计算上相当受限制。我启动了同一个内核的 8 个流。分析它们,然后我看到前两者之间有很好的重叠,然后它变得越来越糟。内核执行时间约为 6ms。在前两个流几乎完全并发执行后,其余的流之间有 3ms 的距离。关于 5,我使用具有 255 个寄存器文件的 K20。所以我不会指望那里有缺点。我真的无法理解为什么我没有实现与 gk110s 指定的并发性等效。
请查看以下链接。有一个名为 kF.png 的图像。它显示了流的分析器输出..!!!
memory - 全局内存和 CUDA 流
我正在研究 CUDA,我对全局内存和流 CUDA 有疑问。
让:
所以,如果我在不同的流 GPU 上运行这个内核。所有流的 Aux 都相同吗?或者所有流都有一个 Aux 变量作为 Aux 全局变量?我在指南 cuda 中找不到该信息。
提前致谢。
cuda - CUDA 重叠数据不起作用
使用 Steam 将数据传输与内核执行重叠在我的系统中不起作用。
您好,我想在 CUDA 中使用重叠计算和数据传输,但我不能。NVIDIA 帮助文档说,如果您使用流,则可以重叠计算和数据传输。但我的系统没有工作请帮助我。
我的系统在下面
- 操作系统:Window 7 64bit
- CUDA:版本 5.0.7
- 开发套件:Visual Studion 2008
- 显卡:GTX 680
我得到一个配置文件视图是这样的
我没有重叠,代码如下:
请让我知道为什么分析器没有显示内核执行和数据传输的重叠。
concurrency - CUDA 流和并发内核执行
我想使用流来并行化在单独的设备数据阵列上工作的内核的执行。数据在设备上分配并从以前的内核中填充。
我编写了以下程序,表明到目前为止我无法达到我的目标。实际上,两个非默认流上的内核在它们各自的流中顺序执行。
在 2 台装有最新 Debian linux 版本的 Intel 机器上观察到相同的行为。一个是带有 CUDA 4.2 的 Tesla C2075,另一个是带有 CUDA 5.0 的 Geforce 460GT。Visual Profiler 显示了 4.2 和 5.0 CUDA 版本中的顺序执行。
这是代码:
通常,数组的维度是 s 512^3
ingle float
。我通常只是将数组切割成(512,1,1)
我放在大小网格上的线程块(1<<15, (rest), 1)
。
提前感谢您的任何提示或评论。
此致。
concurrency - GK110的Hyper-Q如何实现多流并发?
如果我想从 Kepler GK110 的 Hyper-Q 机制中受益,即将两个流放入两个不同的硬件工作队列以避免一些错误的依赖关系,我是否有必要使用两个 CPU 线程或进程创建两个流前面提到的将由 CUDA 驱动程序或其他类似 CUDA 工作分配器的东西自动执行?
或者我可以通过什么方式证明上述考虑?
cuda - 流 0(默认)和其他流的行为
在 CUDA 中,流 0 与其他流有何关系?流 0(默认流)是否与上下文中的其他流同时执行?
考虑以下示例:
在上面的代码中,编译器能否确保somekernel
始终在完成后 cudaMemcpy
启动或将somekernel
同时执行cudaMemcpy
?
concurrency - 流如何在 CUDA 中提供并发执行?
在 CUDA 文档中,提到如果我们像这样使用 2 个流(stream0 和 stream1):我们在 stream0 中复制数据,然后在 stream0 中启动第一个内核,然后在 stream0 中从设备中恢复数据,然后在 stream1 中进行相同的操作,这种方式,如“CUDA by example 2010”一书中所述,不提供并发执行,但在“并发内核示例”中使用此方法并提供并发执行。那么你能帮我理解这两个例子之间的区别吗?
c++ - 从其他 CUDA 流中读取更新的内存
我正在尝试在一个内核函数中设置一个标志并在另一个内核函数中读取它。基本上,我正在尝试执行以下操作。
我最终得到了第二个打印输出,但只有在计算机冻结 15 秒后,我才能同时得到两个打印输出。这些流应该并行运行,而不是让系统陷入困境。我究竟做错了什么?我怎样才能解决这个问题?
谢谢。
编辑
似乎通过添加解决了一个特殊情况,volitile
但现在其他东西已经坏了。如果我在两个内核调用之间添加任何内容,系统就会恢复到旧的行为,即立即冻结和打印所有内容。sleep(2);
通过添加betweenset_flag
和来显示此行为read_flag
。此外,当放入另一个程序时,这会导致 GPU 锁定。我现在做错了什么?
再次感谢。