关于GPU加速的问题

斑竹 您好:
我常在文献看到这样一种说法(我要解决的问题就是对数组的元素进行操作,并行性很高):说如果我矩阵选为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内部的分支)

大致如此,祝您好运~

哦 这样,谢谢版主