我试图将计算和内存操作与 HuggingFace SwitchTransformer 重叠。
\n这里\xe2\x80\x99有详细的解释。
\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 中,流 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
是否有可能使用流在Kepler 3.5 GPU中的同一流多处理器上拥有多个独特的内核?即<<<1,1024>>>在具有15个SM的Kepler GPU上同时运行30个大小的内核?
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流处理多个内核的几个问题.在具有3.5个功能的kepler设备中假设s流和内核,其中s <= 32.内核使用大小为n的dev_input数组和大小为s*n的dev输出数组.内核从输入数组中读取数据,将其值存储在寄存器中,对其进行操作并将其结果写回位于s*n + tid的dev_output.
我们的目标是每次使用n个流中的一个来运行相同的内核.与simpleHyperQ示例类似.你能否评论以下任何一项是否以及如何影响并发?
任何好的评论将不胜感激...... !!!
欢呼,Thanasio
罗伯特,非常感谢你的详细解答.这非常有帮助.我编辑了4,每块10kb.所以在我的情况下,我发布了61个块和256个线程的网格.内核受计算限制.我启动了8个相同内核的流.描述它们然后我看到前两个之间非常好的重叠然后它变得越来越糟.内核执行时间约为6ms.在前两个流执行几乎完全并发后,其余的流之间的距离为3ms.关于5,我使用具有255寄存器文件的K20.所以我不希望那里有弊端.我真的不明白为什么我没有达到相当于为gk110s指定的并发性.
请看下面的链接.有一个名为kF.png的图像.它显示了流的分析器输出.. !!!