好吧,尽管说,一直认为变量初始化非常重要,但是在不经意之间,像数组,结构体一类的变量就容易忽视初始化。尤其是在粘贴来自别处的代码时,首先粘贴就是一种容易隐含有重大错误的行为,其次,这次直接告诉我,还容易把初始化过程遗漏……
今天使用openMP的时候,就因为一个数组没有初始化,结果,导致一个八竿子打不到的地方一直踩内存……凶悍地浪费生命。而这段代码,是从同一个作用域别的地方拷过来的,结果由于在原来的地方,提前初始化了,导致初始化的代码没有拷贝过来……
在跑openMP的时候,发现cpu的时间是按照核数来算的。怎么说呢,比如只有一个核被用了,那么cpu时间的计算与你的时钟是一样的,如果有8个核在运行,cpu时间就是8倍了,也就是现实跑1s,cpu时间跑8s。
单元测试:
1.测试用例一定要可以使结果重现,如果每次都不一样,出了问题都不知道去哪里找。
2.测试与硬件相关的程序的性能时,首先,了解程序。其次,了解硬件性能。最后,使用已有的资料设计案例,开干。
3.对于文件I/O性能的测试,首先要排除硬盘缓存的干扰,其次,要将数据分为顺序随机I/O, 逆序随机I/O, 纯线性I/O, 完全随机I/O。
还有,自动化!!
1.pBlock->table[(hash & (MAX_ITEM_NUM - 1))];
用与运算代替求模运算,换算hash的位置,比求模快多了。
2.void* 与 uint* 可以做函数重载
static_cast<uint *>
reinterpret_cast<uint64 *>