问题标签 [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.
cuda - 摆脱异步 cuda 流执行期间的繁忙等待
我正在寻找一种方法来摆脱闲置代码中主机线程中的忙碌等待(不要复制该代码,它只显示了我的问题的一个想法,它有许多基本错误):
}
有没有办法让主机线程空闲并以某种方式等待某个流完成,然后准备并运行另一个流?
编辑:我在代码中添加了 while(true),以强调忙等待。现在我执行所有流,并检查它们中的哪一个完成了运行另一个新流。cudaStreamSynchronize
等待特定流完成,但我想等待任何作为第一个完成工作的流。
EDIT2:我以休闲的方式摆脱了忙碌等待:
但它似乎比在主机线程上忙等待的版本慢一点。我认为这是因为,现在我在流上静态分配作业,所以当一个流完成工作时,它处于空闲状态,直到每个流完成工作。之前的版本动态地将工作分配到第一个空闲流,所以效率更高,但是在主机线程上有忙等待。
cuda - CUDA 4.0 RC - 每个 GPU 有多个主机线程 - cudaStreamQuery 和 cudaStreamSynchronize 行为
我编写了一个代码,每个 GPU 使用许多主机(OpenMP)线程。每个线程都有自己的 CUDA 流来对其请求进行排序。它看起来与下面的代码非常相似:
一切都很好,直到我找到了很多小工作。在这种情况下,cudaStreamQuery 有时会返回 cudaErrorNotReady,这对我来说是意外的,因为我使用了 cudaStreamSynchronize。到现在为止,我一直在想如果在 cudaStreamSynchronize 之后调用 cudaStreamQuery 将始终返回 cudaSuccess。不幸的是,即使 cudaStreamQuery 仍然返回 cudaErrorNotReady,cudaStreamSynchronize 也可能完成。
我将代码更改为以下内容,一切正常。
所以我的问题是......它是一个错误还是一个功能?
编辑:它类似于 JAVA
cuda - CUDA 流不重叠
我有一些与代码非常相似的东西:
'h_ptr_in' 和 'h_ptr_out' 是用 cudaMallocHost 分配的指针数组(没有标志)。
问题是流不重叠。在可视化分析器中,我可以看到第一个流中的内核执行与第二个流中的副本(H2D)重叠,但没有其他重叠。
我可能没有资源来运行 2 个内核(我想我有),但至少内核执行和复制应该是重叠的,对吧?如果我将所有 3 个(复制 H2D、内核执行、复制 D2H)放在同一个 for 循环中,它们都不会重叠......
请帮忙,这可能是什么原因造成的?
我正在运行:
Ubuntu 10.04 x64
设备:“GeForce GTX 460”(CUDA 驱动程序版本:3.20,CUDA 运行时版本:3.20,CUDA 能力主要/次要版本号:2.1,并发复制和执行:是,并发内核执行:是)
concurrency - How to reduce CUDA synchronize latency / delay
This question is related to using cuda streams to run many kernels
In CUDA there are many synchronization commands cudaStreamSynchronize, CudaDeviceSynchronize, cudaThreadSynchronize, and also cudaStreamQuery to check if streams are empty.
I noticed when using the profiler that these synchronize commands introduce a large delay to the program. I was wondering if anyone knows any means to reduce this latency apart from of course using as few synchronisation commands as possible.
Also is there any figures to judge the most effecient synchronisation method. that is consider 3 streams used in an application and two of them need to complete for me to launch a forth streams should i use 2 cudaStreamSyncs or just one cudaDeviceSync what will incur less loss ?
parallel-processing - Cuda,为什么我不能使用多个流处理器?
我在 Cuda 中实现了 RNS 蒙哥马利求幂。
一切都很好。它只在一个 SM 上运行。
但是,到目前为止,我只关注单个 exp 的并行化。我现在要做的是在运行中使用几个 exp 进行测试。也就是说,我希望将第 i 个下一个 exp 分配给一个空闲的 SM。
我试过了,最后的时间总是线性增长的,就是所有的exp都分配给了同一个SM。
然后我切换到流,但没有任何改变。
但是我从未使用过它们,所以也许我做错了什么..
这是代码:
Ubuntu 11.04 64b、Cuda 5 RC、560 Ti (8 SM)
cuda - GTX 680 是否支持并发数据传输
我预计 GTX 680(它是最新版本的 GPU 之一)能够进行并发数据传输(双向并发数据传输)。但是当我运行cuda SDK“Device Query”时,“Concurrent copy and execution”这个词的测试结果是“Yes with 1 copy engine”,这意味着GPU不能进行并发数据传输。
我想知道我的测试结果是否也发生在你身上?您能与我分享哪些设备能够进行并发数据传输吗?
谢谢!
cuda - 多个主机线程启动单个 CUDA 内核
对于我的 CUDA 开发,我使用的是一台 16 核的机器和 1 个 GTX 580 GPU 和 16 个 SM。对于我正在做的工作,我计划启动 16 个主机线程(每个内核上 1 个),每个线程启动 1 个内核,每个线程有 1 个块和 1024 个线程。我的目标是在 16 个 SM 上并行运行 16 个内核。这可能/可行吗?
我试图尽可能多地阅读有关独立上下文的信息,但似乎没有太多可用的信息。据我了解,每个主机线程都可以有自己的 GPU 上下文。但是,如果我使用独立的上下文,我不确定内核是否会并行运行。
我可以将所有 16 个主机线程的所有数据读取到一个巨大的结构中,并将其传递给 GPU 以启动一个内核。但是,它会复制太多,并且会减慢应用程序的速度。
cuda - Cuda 流数据独立性
有人可以解释并发 Cuda 流中的数据独立性要求吗?假设我想在 8 个并发流中运行以下内核
所有流都可以读取相同的 *readOnlyInput 并写入不同的 *output 数组吗?
或者为了实现并发,他们还需要从不同的内存位置读取数据?
上面的伪代码片段会并发执行,还是需要 *readOnlyInput+i*size 来保证并发?
cuda - 并发:短拷贝,长内核
运行并发复制和内核操作时:
如果我的内核运行时间是 dataCopy 操作的两倍,每次内核运行我会得到 2 个副本吗?
我看到的流示例显示了 1:1 的关系。(复制时间=内核运行时间。)我想知道当有什么不同时会发生什么。每次内核启动总是有一个复制操作(最大)吗?或者复制操作是否独立于内核启动运行?即,如果运行和复制时间以这种方式运行,我可能会在每次内核启动时完成 5 次复制操作。
(我试图弄清楚在内核启动之前要排队多少次复制操作。)
一对一:(复制时间=内核运行时间)
<--stream1Copy--><--stream2Copy-->
.......... .......<-stream1Kernel->
二比一:(复制时间 = 1/2 内核运行时间)
<-stream1Copy-><-stream2Copy-><-stream3Copy->
.................... .........<---------stream1Kernel------------>
performance - CUDA 流比通常的内核慢
我正在尝试理解 CUDA 流,并且我已经用流制作了我的第一个程序,但是它比通常的内核函数慢...
为什么这段代码比较慢
比:
我认为它应该运行得更快......变量计数的值是 6 500 000(最大值)......第一个源代码需要 14 毫秒,第二个源代码需要 11 毫秒。
谁能给我解释一下,好吗?