block数量

无法评价您kernel里面实现的算法逻辑,因为并不知道您要实现具体什么功能。

就一般的程序书写来说,第5,6两行的常量定义写到kernel里面可能会耗费更多的寄存器,如果您的程序经过profiler评估寄存器吃紧的话,可以考虑优化这里。

kernel里面有一些分支,不过我估计问题不是很大。

再有就是合并访问了,这个你自己检查下,或者跑下profiler看看。

大致目测如上,以及你依然是使用了1个block,这样规模受限制,当然也可能是暂时为了测试才这样写的。

其实要看是否有改进的余地,建议先跑跑nvvp,看看实际的瓶颈在哪里,再做定夺。

欢迎莅临cudazone,祝您2013年元旦快乐!

无法评价您kernel里面实现的算法逻辑,因为并不知道您要实现具体什么功能。

就一般的程序书写来说,第5,6两行的常量定义写到kernel里面可能会耗费更多的寄存器,如果您的程序经过profiler评估寄存器吃紧的话,可以考虑优化这里。

kernel里面有一些分支,不过我估计问题不是很大。

再有就是合并访问了,这个你自己检查下,或者跑下profiler看看。

大致目测如上,以及你依然是使用了1个block,这样规模受限制,当然也可能是暂时为了测试才这样写的。

其实要看是否有改进的余地,建议先跑跑nvvp,看看实际的瓶颈在哪里,再做定夺。

欢迎莅临cudazone,祝您2013年元旦快乐!

您说“1个block,这样规模受限制”,都有哪些限制?应该如何改进才能提速呢?
我现在写的cuda程序,发现计算时间和cpu程序差不多。而且需要的循环时间步越长的话,cpu的运行速度反而更快,您有何建议啊?
祝您元旦快乐,新年大吉!

建议您认真学习下CUDA的基本概念,自然就会明白一个block有什么限制了。改进方法自然是用多个block,这一点似乎已经说过多次。

有很多实例已经证明,GPU速度是比CPU快的,而且有限差分算法是适合并行的,请您优化您的程序。

祝您新年快乐!

“有很多实例已经证明,GPU速度是比CPU快的”这个我没有怀疑过的。也正是因为这样,我才在寻找如何改进我程序的方法呀。
谢谢您,ice版主!祝您大吉大利!

真心建议您仔细看下CUDA的基本概念和运作原理,只有这样才能发挥出GPU的能力。而不是像现在一样只上一个block却觉得速度不满意。

新年加油哦,亲~

请问ice版主,做fdtd需要用到纹理存储器么?

某项算法是否会用到纹理存储器,这个和算法的具体实现有关,需要写代码或者规划算法的人权衡考虑。

所以,我无法回答您专业性如此之强的问题。

你可以研究一下纹理存储器有哪些福利和不足,然后决定是否使用。

祝您编码愉快。

以及,希望您能将本帖前面多个楼层讨论过的问题,彻底捯饬清楚了,再考虑问题存储器的问题。而不是向前面一样,只上一个block然后抱怨速度不行。

望三思。

好的,谢谢ice版主的建议!

ice版主,请问您以前做fdtd的时候,纹理存储器都用

ice版主,请问您以前做fdtd的时候,纹理存储器都用在那些数据上面啊?
刚刚按错键,发了个不完整的问题。

我建议您,先实现正确,再考虑优化。
截止您40#最后给出的实现框架以及在第五页的回复,您依然是用一个block跑,而且没有弄清楚为何这样做是完全浪费GPU资源的。

在您修改这种做法之前,任何其他优化都是没有意义的。

希望您能明白这一点,祝您编码顺利~

ice版主,谢谢您的热心帮助!我已经按您的建议,将一维仿真实现了。现在我在着手准备解决三维问题的预备知识。现在的问题就是想请你指个方向:纹理存储器在fdtd里都用来处理里哪些相关参数啊?您以前在fdtd里都怎么用它呢?

1:在您确实展示出一个多block的实现之前,我不负责回答任何后续问题。

2:我从未向你建议使用/不使用纹理,也从未说过在FDTD里面必须/无须使用纹理。
我建议过的只有:第一,请使用多block实现;第二,请先实现,后考虑优化。

您预设的前提“纹理存储器在fdtd里被用来处理里某些相关参数”并非是我建议的,我不负责回答。

以本帖内容和相关讨论帖内容为例,基本上从一开始我就建议你使用多个block,已经建议过无数次,但是截至目前,你并没有给出任何多block的实现,却在不停地追问一个我从未建议过的关于纹理的内容,这样做十分伤人的,我表示拒绝回答。

ice版主,我真是按您的建议做的啊!这是我的场计算函数:FDTD_SCATTER_Ex<<< 32, 32>>> ( pEx, pFE1, pFE2, pFH1, pFH2, pOb ); 确实如您所言,用多个block的效果要好很多。
而对于纹理存储器,应该是我没有表述清楚吧,先表示歉意了啊!因为我接下来的工作是要处理三维fdtd问题,所以我想大概了解一下纹理存储器对解决该问题有什么帮助。也就是想请您谈谈这方面的经验,还请您不吝赐教啊。有表述不清的地方,还请你海涵啊!刚刚您之言“这样做十分伤人的,”让我十分震惊,我绝对无此意啊!
这些天来,在您的帮助下,我理清了不少问题,真地很感谢啊,ice版主!!

1:既然您简要给出了您实现的kernel的调用形式,我也简要评价一下:必须指出,您每个block只放1个warp(32线程)的做法,依然会极大地影响硬件效率,浪费GPU资源。形象一点说,1个block,block内有1024个线程,最后的结果是一个SM吃饱,其他SM完全空闲。而32个block,block内只有32线程,其结果是有数个SM在运行,但是没有一个吃饱的。一般实现运算的线程数和规模要比这个大得多。

2:我从未向您建议过在您的算法里面使用纹理,我一直的建议都是先实现,再分析和优化。您指出“要处理三维fdtd问题,所以想了解纹理有什么帮助”,请问3维fdtd和纹理有什么必然联系呢?3维和您已经实现的1维在访存上又有什么区别而导致一定需要使用纹理呢?以及使用纹理有什么好处呢?

我只能说,global memory是最为一般的存储方式,从功能上讲,多数算法的访存都可以使用global memory来完成。既然您的1维算法都使用global memory成功地实现了功能,为何不继续使用先写一个3维的实现呢?为何要假设使用纹理如何如何并纠结于此呢?如果在您的实现中,global memory确实无法满足要求,而您确实证实了纹理效果更好,那个时候,您再修改您的实现也不迟。

大致如上,希望您能理解。

首先,还是得先真心地感谢您啊ice版主!就您列的第1点,我再请问一下,以您的看法我应该开多少个block才能充分利用gpu的资源呢?也请您告诉我你这么做的原因吧。
对于您列的第2点,或许我没还是有表述清楚。直白的说,我想表述的意思就是:纹理存储器对fdtd编程有没有用(当然,又说绝对了啊)。如果您以前经常用它,那么我肯定得学学它啊。但是,我觉得在最后,您还是给出了您对我这个问题的解答。感觉您的回答倾向于no,不知道我理解对么。

1:首先,请你仔细查看我在57#的说法,我说的是您每个block里面只有32线程,这种做法是不合适的。您在58#问的却是,应该开多少个block?请问这两者接得上么?

2:第二,我不是fdtd版的斑竹,无法回答您关于某个具体的数值方法应该如何实现,这是您的工作。我只能在您决定和规划的框架下给予建议。我一贯的和唯一的建议是,建议您先用通用的方法做一个实现,发现不足再考虑优化问题,这也是一般通行的做法。此问题今天已经说了3遍了,这将是最后一次。
如果您依然要一再追问,我只能以习总的话回答你:“空谈误国,实干兴邦”,望谨记。

我想,对于纹理存储器的问题和程序实现方法问题,我已经理解了您的建议。谢谢! 对于您

列的第1点,就我1维的问题来讲,您觉得block和thread应该如何取才是更适合呢?也请您告诉我

原因啊。谢谢ice版主!