标签: cuda-streams

我们可以将计算操作与内存操作重叠,而不将内存固定在 CPU 上吗?

我试图将计算和内存操作与 HuggingFace SwitchTransformer 重叠。

\n

这里\xe2\x80\x99有详细的解释。

\n
    \n
  • 内存操作用于将数据从CPU移动到GPU,其大小为每块4MB。
  • \n
  • 块的数量是可变的(通常总共从 2 到 6 个)。
  • \n
  • 计算操作包括几个非常小的计算操作,例如 GEMM,每个操作需要 10 到 100 微秒。
  • \n
  • 我正在尝试使用 CudaStream,因此我创建了两个不同的 Cuda 流,并将内存操作和计算操作推送到每个流。
  • \n
  • 但它并没有重叠。
  • \n
\n
            s_0 = torch.cuda.Stream()  # Create a new stream.\n            s_1 = torch.cuda.Stream()  # Create a new stream.\n\n            with torch.cuda.stream(s_0):\n                this_gate_info = router_mask, router_probs, router_logits\n                router_mask = router_mask.bool()\n                idx_mask = router_mask.transpose(1,2)\n                idx_mask = torch.cat(torch.split(idx_mask, 1, dim=0), dim=2)\n                idx_mask = idx_mask.sum(dim=2)\n                idx_mask = idx_mask.squeeze()\n                    \n                if next_blk is not None:\n                    active_idx = …
Run Code Online (Sandbox Code Playgroud)

cuda pytorch cuda-streams

3
推荐指数
1
解决办法
690
查看次数

流 0(默认)和其他流的行为

在 CUDA 中,流 0 与其他流有何关系?流 0(默认流)是否与上下文中的其他流同时执行?

考虑以下示例:

cudaMemcpy(Dst, Src, sizeof(float)*datasize, cudaMemcpyHostToDevice);//stream 0;

cudaStream_t stream1;

/...creating stream1.../

somekernel<<<blocks, threads, 0, stream1>>>(Dst);//stream 1;
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,编译器能否确保始终在完成somekernel启动或与 并发执行? cudaMemcpysomekernelcudaMemcpy

cuda gpu nvidia cuda-streams

1
推荐指数
1
解决办法
4533
查看次数

同一个多处理器上的并发唯一内核?

是否有可能使用流在Kepler 3.5 GPU中的同一流多处理器上拥有多个独特的内核?即<<<1,1024>>>在具有15个SM的Kepler GPU上同时运行30个大小的内核?

concurrency cuda kepler cuda-streams

1
推荐指数
1
解决办法
224
查看次数

What is the difference between Nvidia Hyper Q and Nvidia Streams?

I always thought that Hyper-Q technology is nothing but the streams in GPU. Later I found I was wrong(Am I?). So I was doing some reading about Hyper-Q and got confused more. I was going through one article and it had these two statements:

A. Hyper-Q is a flexible solution that allows separate connections from multiple CUDA streams, from multiple Message Passing Interface (MPI) processes, or even from multiple threads within a process

B. Hyper-Q通过允许32个同时进行的硬件管理的连接(与Fermi可用的单个连接相比),增加了主机与GK110 GPU之间的连接(工作队列)总数。

在前面提到的观点中,观点B指出主机可以创建多个连接到单个GPU。这是否意味着我可以通过不同的应用程序在一个简单的GPU上创建多个上下文?这是否意味着我必须在不同的流上执行所有应用程序?如果我的所有连接都占用内存并且计算资源消耗,谁来管理资源(内存/核心)调度,该怎么办?

cuda gpgpu nvidia cuda-streams

1
推荐指数
1
解决办法
101
查看次数

用于多个内核的Cuda Stream Processing消歧

关于Cuda流处理多个内核的几个问题.在具有3.5个功能的kepler设备中假设s流和内核,其中s <= 32.内核使用大小为n的dev_input数组和大小为s*n的dev输出数组.内核从输入数组中读取数据,将其值存储在寄存器中,对其进行操作并将其结果写回位于s*n + tid的dev_output.

我们的目标是每次使用n个流中的一个来运行相同的内核.与simpleHyperQ示例类似.你能否评论以下任何一项是否以及如何影响并发?

  1. dev_input和dev_output没有固定;
  2. dev_input因为它是vs dev_input size s*n,其中每个内核读取唯一数据(没有读取冲突)
  3. 内核从常量内存中读取数据
  4. 每个块分配10kb的共享内存.
  5. 内核使用60个寄存器

任何好的评论将不胜感激...... !!!

欢呼,Thanasio

罗伯特,非常感谢你的详细解答.这非常有帮助.我编辑了4,每块10kb.所以在我的情况下,我发布了61个块和256个线程的网格.内核受计算限制.我启动了8个相同内核的流.描述它们然后我看到前两个之间非常好的重叠然后它变得越来越糟.内核执行时间约为6ms.在前两个流执行几乎完全并发后,其余的流之间的距离为3ms.关于5,我使用具有255寄存器文件的K20.所以我不希望那里有弊端.我真的不明白为什么我没有达到相当于为gk110s指定的并发性.

请看下面的链接.有一个名为kF.png的图像.它显示了流的分析器输出.. !!!

https://devtalk.nvidia.com/default/topic/531740/cuda-programming-and-performance/concurrent-streams-and-hyperq-for-k20/

concurrency cuda cuda-streams

0
推荐指数
1
解决办法
2208
查看次数

标签 统计

cuda ×5

cuda-streams ×5

concurrency ×2

nvidia ×2

gpgpu ×1

gpu ×1

kepler ×1

pytorch ×1