【发布时间】: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