CUDA 流是一个任务队列:内存拷贝、事件触发、事件等待、内核启动、回调...... 但是 - 这些队列没有无限容量。 事实上,根据经验,我发现这个限制并不是特别高,例如数千,而不是数百万。 我的问题: CUDA 流的大小/容量是否根据任何类型的排队项目固定,或者容量是否会根据您排队的 ...
CUDA 流是一个任务队列:内存拷贝、事件触发、事件等待、内核启动、回调...... 但是 - 这些队列没有无限容量。 事实上,根据经验,我发现这个限制并不是特别高,例如数千,而不是数百万。 我的问题: CUDA 流的大小/容量是否根据任何类型的排队项目固定,或者容量是否会根据您排队的 ...
我知道如何使用CUDA 事件对一个 CUDA kernel 的执行进行计时,这对于简单的情况非常有用。 但在现实世界中,一个算法通常由一系列内核组成(例如, CUB::DeviceRadixSort算法会启动许多内核来完成工作)。 如果您正在运行您的算法的系统上还有许多其他流和内核也在运行中,那么 ...
假设我调用cuEventRecord(0, my_event_handle) 。 cuEventRecord()要求 stream 和事件属于同一上下文。 现在,可以将0解释为“在适当的上下文中的默认值 stream”——满足要求,这应该可以工作; 但也可以将其解释为“当前上下文中的默认 str ...
假设我们有两个 CUDA 流同时在 GPU 上运行两个 CUDA 内核。 如何暂停使用我放入主机代码的指令运行的 CUDA kernel 并使用主机代码中的指令恢复它? 我不知道在这种情况下如何编写示例代码,例如,继续这个问题。 Exactly my question is whether th ...
我是 CUDA 的初学者。 我正在使用 NVIDIA Geforce GTX 1070 和 CUDA 工具包 11.3 和 ubuntu 18.04。 如下代码所示,我使用两个CPU线程将两个内核以两个流的形式发送到一个GPU。 我希望这两个内核同时发送到 GPU。 有没有办法做到这一点? 或者至 ...
假设我有一个结构: function: 以及以下场景(狮子、女巫和衣柜也适合某个地方): 以上安全吗? 即如果stream2本身没有工作,它仍然会等待stream1完成它的“工作”吗? 结果记录的cudaEvent会反映这一点,使得stream3在stream1完成之前不会启动? ...
如果我有一个__constant__值 非阻塞流上的 MPI 等级可能会也可能不会初始化: 这是: 在内核中同时被多个 MPI 等级访问是否安全? 即,排名是否共享同一个val实例或 MPI 语义(它们都有一个私有副本)是否仍然有效? 如果以上是安全的,那么由多个 MPI rank 初始化是否安全? ...
我有一个 kernel ,它使用单个stream 感受两个参数(dev_out_1 和 dev_out_2)的数据。 我想将设备中的数据并行复制回主机。 我的要求是使用单个 stream 并并行复制回主机。 您如何处理此类问题? ...
所以本指南在这里展示了重叠 kernel 执行和数据传输的一般方法。 但是,kernel 是串行的。 所以它必须处理 0->1000,然后 1000->2000,... 简而言之,在重叠数据传输时正确执行此 kernel 的顺序是: 复制[a->b] 必须在内核[a->b] ...
默认情况下,kernel 将使用设备的所有可用 SM(如果有足够的块)。 However, now I have 2 stream with one computational-intense and one memory-intense, and I want to limit the max ...
我正在尝试使用 OpenCV 和 CUDA 执行一些图像膨胀。 我使用不同的filter object 和不同的Mat调用两个对filter->apply(...)的调用,彼此接连,每次指定不同的 stream 使用。 从附加的 nvvp 分析信息中可以看出,它们确实在不同的流中执行,但它们 ...
我想以如下形式重叠数据传输和 kernel 执行: 在这种情况下可以重叠吗? 目前只有 HtoD 传输与 kernel 执行重叠。 第一次 DtoH 传输在最后一次 kernel 执行之后执行。 ...
当我尝试捕获流执行以构建 CUDA 图时,调用thrust::reduce会导致运行时错误cudaErrorStreamCaptureUnsupported: operation not permitted when stream is capturing 。 我已经尝试将归约结果返回给主机和设备变 ...
我的CUDA应用程序执行整个卷的关联缩减。 本质上,每个线程都会计算原子添加到全局内存中同一输出缓冲区的重叠位置的值。 是否可以使用不同的输入参数和相同的输出缓冲区同时启动该内核? 换句话说,每个内核将共享相同的全局缓冲区并以原子方式对其进行写入。 所有内核都在同一GPU上运行。 ...
我正在开发一个多 GPU 加速流解算器。 目前我正在尝试实现通信隐藏。 这意味着,在交换数据时,GPU 计算网格中不参与通信的部分,并在通信完成后计算网格的其余部分。 我试图通过为长时间运行的内核 ( fluxKernel ) 使用一个流 ( computeStream ) 和用于不同通信阶段的一 ...
我正在开发CUDA矩阵乘法,但是我做了一些修改以观察它们如何影响性能。 我正在尝试观察简单矩阵乘法内核的行为(并且正在测量GPU事件时间的变化)。 但是我正在两个特定的不同条件下对其进行测试: 我对A,B和C有一定数量的矩阵(例如matN ),然后我将A的一个矩阵(H2D)转移 ...
我一直认为Hyper-Q技术不过是GPU中的流。 后来我发现我错了(是吗?)。 因此,我在阅读有关Hyper-Q的文章时感到困惑。 我正在阅读一篇文章,它包含以下两个陈述: 答:Hyper-Q是一种灵活的解决方案,它允许来自多个CUDA流,来自多个消息传递接口(MPI)进程甚至一个进 ...
我的程序是一个管道,其中包含多个内核和 memcpy。 每个任务将通过具有不同输入数据的相同管道。 主机代码在处理任务时将首先选择一个通道,它是暂存器内存和 CUDA 对象的封装。 在最后一个阶段之后,我会记录一个事件然后去处理下一个任务。 主要的流水线逻辑如下。 问题在于不同流中的操作不会重叠。 ...
从官方的NVIDIA多进程服务器文档中瞥见 ,我不清楚它是如何与CUDA流交互的 。 这是一个例子: App 0:向逻辑流0发布内核; 应用1:向(自己的)逻辑流0发布内核。 在这种情况下, 1)MPS是否“如何”劫持这些CUDA呼叫? 对于每个应用程序,它是否完 ...
我继承了一些基本上做这样的事情的代码: 查看CUDA 8的targets/x86_64-linux/driver_types.h ,我看到: 据我所知,演员阵容会有效,但我担心这可能是未来的证据,以及代码移植到ARM时是否安全。 上面的代码有多危险? __device_bui ...