【问题标题】:Kepler -Concurrent kernel launches not overlapping开普勒 - 并发内核启动不重叠
【发布时间】:2013-09-20 15:48:34
【问题描述】:

我试图在 Kepler 设备上重叠内核执行,但从 NVVP 布局来看,它们似乎没有重叠。这是代码,

#include<stdio.h>
#include<sys/time.h>
#include<time.h>


#define NY 1024
#define NX 1024
__global__ void kernel1(int j,int *A,int *b)  
{  
int i = blockIdx.x * blockDim.x + threadIdx.x;  
b[j*NY+i] = A[i*NY+j];  

}  

__global__ void kernel2(int j,int *A,int *b)  
 {  
 int i = blockIdx.x * blockDim.x + threadIdx.x;  
 for(int time=0;time<100;time++)  
 b[j*NY+i] += 10;  
 }  


 int main()  
 {  
 int nstreams=4;
 int *a, *b;
 struct timeval t1,t2;

cudaMalloc((void**)&a,NX*NY*sizeof(int));
cudaMalloc((void**)&b,NX*NY*sizeof(int));


 cudaStream_t *streams = (cudaStream_t *) malloc(nstreams * sizeof(cudaStream_t));
 for (int i = 0; i < nstreams; i++)
 { 
 cudaStreamCreate(&(streams[i]));
 }

 gettimeofday(&t1, NULL);

 for(int newvar=0;newvar<NX;newvar++)
 {
  kernel1<<<1,NY,0,streams[newvar%nstreams]>>>(newvar,a,b);
 }
 for(int newvar=0;newvar<NX;newvar++)
 {
   kernel2<<<1,NY,0,streams[newvar%nstreams]>>>(newvar,a,b);
 }  
 cudaDeviceSynchronize();  
 gettimeofday(&t2, NULL);

 return 0;

 }

请提出一些建议。 CUDA 5.5 版 NVVP 5.5 版 Linux 机器 Ubuntu 12.10

【问题讨论】:

  • "请给点建议。": 1. 使用linux而不是windows。 2. 先运行 cuda concurrent kernels sample,观察它的行为,然后再尝试自己的代码。 3. 不要以反斜杠字符开始源代码行。相反,提供一个语法正确的示例,实际编译。
  • 1.它是 Linux 机器(参见左侧的 Unity GUI!) 2. 并发内核示例工作正常,它与内核重叠。 3. 反斜杠在格式化代码以询问这个问题时仍然存在。代码工作正常,但重叠缺少一些东西。
  • 所以您不必费心编辑代码以消除语法错误并提供可正确编译的示例?投票结束。 SO 期望:“有关您编写的代码问题的问题必须在问题本身中描述特定问题 - 并包括有效的代码来重现它。请参阅 SSCCE.org 以获得指导。”您尚未提供 SSCCE.org 代码.
  • @Robert 解决了这个问题。您能否专注于这个问题并告诉我出了什么问题?(我敢打赌,我错过了一些基本的东西,因此我很担心)。如果您有足够的经验,那么您很快就会发现问题。我是新人,所以我很挣扎。
  • 您发布的代码仍然无法编译。

标签: concurrency cuda


【解决方案1】:

从根本上说,我认为问题在于您的内核执行时间不够长。内核的执行时间是几微秒,内核启动开销也是几微秒,所以你看不到任何重叠。当 API 完成新内核启动的设置时,之前的内核已经完成。

我将你的kernel1修改如下:

__global__ void kernel1(int j,int *A,int *b)  
{  
  int i = blockIdx.x * blockDim.x + threadIdx.x;  
  for (int q = 0; q < 1000; q++)
    b[j*NY+i] = A[i*NY+j] + q/j;  
} 

这些修改没有什么神奇或特别之处,我只是在寻找一种方法来增加内核执行时间(从几微秒到几毫秒)。

通过上述更改,我在分析器中看到了您的 kernel1 的良好重叠。

我想你的kernel2 可以做类似的事情。

您还应该确保在nvvp 中启动分析会话时没有取消选中“启用并发内核分析”复选框。

【讨论】:

  • 嗯,我怀疑。感谢您的确认。
猜你喜欢
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 2013-08-01
相关资源
最近更新 更多