斑竹 您好:
我常在文献看到这样一种说法(我要解决的问题就是对数组的元素进行操作,并行性很高):说如果我矩阵选为200200,假如加速10倍,然后我我选400400可能加速30倍,1000*1000加速上百倍,然后得出结论,问题的规模越大,加速比越高
但是我通过实验发现,问题规模较小时确实变大一些加速比提高了,但是再变大了反而加速不如以前厉害了。这可能是什么情况呢??
LZ您好:
您觉得这个推论可能么?
如果真是这样的话,那么我就去买一块最渣的GPU卡,然后疯狂地增加问题规模,然后就就能秒杀神马天河,神马泰坦,神马京,神马美洲豹,神马神马一切的超算,把他们统统秒到天狼星去。
这真的可能么?
现实的情况是,您的硬件跑满了,那么更多的任务只能消耗更多的时间,而不能奢望他们都能立即免费算完。以及,在不同规模数据的计算下,一些瓶颈和执行细节会有不同,因而加速比会有一些波动。
大致如此,祝您好运~
嗯 感谢斑竹回答
因为现在在做程序的优化,需要将全局数据读入共享,
但是个别block面临的情况不太一样
所以得加入判断,请问斑竹,
if(blockIdx.x==0){...}
if(blockIdx.x==31){...}
else{...}
和
switch(blockIdx.x){
case 0:
...
break;
case 31:
...
break;
default:...
}
这两段代码的执行效率是一样的吗??
LZ您好:
新问题建议开新帖。
您给出的两段分支不同写法代码,如果其逻辑是等价的,并且编译器识别了这一点,那么会给出相同的编译结果。
同时根据您的写法,您至少是block级别对齐的,并且按照一般情况,block里面的线程数是较多的,此时这种分支并不影响效能。(影响效能的是warp内部的分支)
大致如此,祝您好运~
哦 这样,谢谢版主