用户
 找回密码
 立即注册
daxiaoyuyu 该用户已被删除
发表于 2013-11-3 19:11:31
102570
本帖最后由 daxiaoyuyu 于 2013-11-3 19:13 编辑

引子:我之前发的一个帖子可能讲的不清楚(之前那个帖子 贴了代码),现在问题改述如下,望有人能解答,不胜感激。


我在程序中有很大量malloc(大概20次)和memcpy(大概50000次)的操作。这些操作封装在函数test()中。


问题:
1. GPU一个线程调用test()的速度比CPU调用test()的速度慢100倍。mallocmemcpy等函数在GPU中为什么会这么慢?
2.当线程量到一定量后(400),每个线程都调用操作test(),GPU上速度会比用CPU400test()调用快。但是如果开过多的线程(1000),每个线程都调用test(),GPU会比单纯用CPU来调用1000test还要慢,而且慢很多。是不是分配的线程过多后,会产生更多的显存碎片,从而会更慢?


我做了一组测试:

cuda中:(block * thread 数)
1test() 调用: 1*1: 4.3s
400 test() 调用: 2*200: 10.9s  4*100: 10.7s GPU1.8倍。GPU终于比CPU块了。
600 test() 调用:3*200: 45.7.6s  6*100: 47.03s
1000test() 调用:5*200: 201.4s 10 * 100: 197.3s 1*1000: 203.5s

CPU中:
1test() 调用:0.047sCPU91倍。
400test() 调用:20sGPU1.8倍。GPU终于比CPU块了。
600test() 调用:31sCPU1.5
1000 test() 调用:51sCPU4倍。

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