在我的cuda代码中,如果我增加blocksizeX,blocksizeY它实际上需要更多时间[因此,我以1x1运行它]另外还有一大块执行时间(例如,9个中的7个s)只是通过调用内核来实现的。事实上,我很惊讶即使我将整个内核注释掉,时间也几乎是一样的。有什么建议在哪里以及如何进行优化?增加块大小会降低性能
P.S.我已经用我的实际代码编辑了这篇文章。我对图像进行了下采样,因此每4个相邻像素(例如,对于例如1,2行和1,2行)给出一个输出像素。我得到一个有效的bw。 5GB/s,理论最大值为86.4 GB/s。我使用的时间是在调用内核和指令并调用一个空内核方面的差异。 我现在看起来很糟糕,但我无法弄清楚我做错了什么。
__global__ void streamkernel(int *r_d,int *g_d,int *b_d,int height ,int width,int *f_r,int *f_g,int *f_b){
int id=blockIdx.x * blockDim.x*blockDim.y+ threadIdx.y*blockDim.x+threadIdx.x+blockIdx.y*gridDim.x*blockDim.x*blockDim.y;
int number=2*(id%(width/2))+(id/(width/2))*width*2;
if (id<height*width/4)
{
f_r[id]=(r_d[number]+r_d[number+1];+r_d[number+width];+r_d[number+width+1];)/4;
f_g[id]=(g_d[number]+g_d[number+1]+g_d[number+width]+g_d[number+width+1])/4;
f_b[id]=(g_d[number]+g_d[number+1]+g_d[number+width]+g_d[number+width+1];)/4;
}
}
谢谢!但我做了谷歌,并做了一些功课,然后发布在堆栈溢出。 – Manish 2011-02-19 06:41:07
@Nick:[LMGTFY网址不允许出于某种原因](http://meta.stackexchange.com/questions/15650/ban-lmgtfy-let-me-google-that-for-you-links)。你会知道,如果你没有试图用tinyurl来混淆它,这也是*强烈不鼓励。我喜欢知道我被链接到哪里。 – 2011-02-19 07:02:53
@Manish - 我想帮助你,但是你对前面提到的关于cuda的两个问题没有选择正确的答案。如果你给我们更多的激励,这将有所帮助。 – jmilloy 2011-02-19 07:38:11