一个比较奇怪的问题,没修改核函数,但是性能降低了10倍

我的显卡是GeForce GTX 1080
程序功能是用于人脸比对,申请了一大片GPU的内存(差不多8G),放入1500W个人脸的特征结构体,结构体的大小是544byte
核函数是由20个block, 1024 thread / block启动,就是一个循环从全局内存读取数据,计算,然后放入另一块全局内存(1500W*sizeof int)
循环中有两个if,第一个先判断结构体中的一个字段然后决定是否continue, 第二个是计算相似度
问题是:我修改了核函数外面的代码后,不知道为什么核函数的耗时从60ms变成接近700ms。

想问下这个程序该如何优化,以及这个问题有可能与哪里相关。这个block 和 thread该选多大比较好, 每次我把thread改下,然后blcok改大后,性能都会下降。
接触cuda不久,若是能提供一些参考资料也好,谢谢大家。

blocksize一般为32的倍数。
建议你用nvvp跑下report。
用samples里的calculater工具算下对于你的应用程序和硬件,blocksize多大 occupancy才能尽可能的大。
当然occupancy不一定越大越好,需要综合report来看。