找回密码
 立即注册
yuanwcj 该用户已被删除
发表于 2013-11-22 12:02:02
12103
本帖最后由 yuanwcj 于 2013-11-22 12:47 编辑

CUFFT之后,需要将每一个cufftComplex数都乘以1/N,数据长度为51200*1024
我使用了下面2种方法,用event计时,发现计算时间都是6100ms左右,请问怎样优化,谢谢

方法1:
使用51200个block块,每个块1024个线程,每个线程处理1个数,如下
__global__ static void vectDevision(cufftComplex *pSource,float Valpha)
{
        int threadID= threadIdx.x;
        int blockID=  blockIdx.x;
        int IndexThread=blockID*blockDim.x+threadID;

        cufftComplex tmp=*(pSource+IndexThread);
        (pSource+IndexThread)->x=(tmp.x*Valpha);
        (pSource+IndexThread)->y=(tmp.y*Valpha);
}

方法2:
使用512个block块,每个块1024个线程,每个线程处理100个数,如下
__global__ static void vectDevision(cufftComplex *pSource,float Valpha)
{
        int threadID= threadIdx.x;
        int blockID=  blockIdx.x;
        int IndexThread=blockID*blockDim.x+threadID;

        cufftComplex tmp;        int i;
        for (i=0;i<100;i++)
        {
                tmp=*(pSource+IndexThread+i*1024*512);
                (pSource+IndexThread+i*1024*512)->x=(tmp.x*Valpha);
                (pSource+IndexThread+i*1024*512)->y=(tmp.y*Valpha);
        }

}

两种方法计算时间都差不多,不过6100多ms确实太吓人了,请问各位大侠该怎么优化谢谢
使用道具 举报 回复
发表于 2013-11-22 12:04:11

这个是profiler的统计结果,麻烦各位大侠帮忙看看怎么回事
使用道具 举报 回复 支持 反对
发表于 2013-11-22 12:08:24
干嘛要移到灌水来啊。。。。
我确实有问题请教啊,总的给个说法吧
使用道具 举报 回复 支持 反对
发表于 2013-11-22 12:35:52
本帖最后由 yuanwcj 于 2013-11-22 12:37 编辑


使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册

zzczczxczxczx