perflab:
1.没有sys/time.h、sys/cdef.h等。
原因:在64位虚拟机上,编译32位程序,就会出现此问题。
解决方法:需要安装两个库:sudo apt-get install g++-multilib,sudo apt-get install libc6-dev。
2.smooth的时候,尝试用中间变量减少重复计算,结果却在每一个点的计算结果上都出错了。偶尔会出现差值是2^14这种特异数值。
原因:你使用了pixel类型作为中间变量,而pixel类型的数据定义是short型。如果你存的是几个点的sum,那么很可能被截尾。
解决方法:用int临时变量保存。
3.自动计算means对于rotate函数会算得异常偏小,如果你感觉应该过了但是means显示没过,记得手算一下。
cachelab:
1.cache模拟部分测试时报错segmentation fault (core dumped)
原因:指针越界,我这里是s和S(1<<s)搞混了,导致访问cache的时候越界了。
解决方法:用gdb测试你的程序,出现越界的时候gdb会告诉你在哪里出错。
2.trans转置部分测试时非常卡
原因:很多地方都提到了是要移动到虚拟机独有的文件夹而不是共享文件夹,但是还有一个问题,可能是你的代码错了!如果你发现超时,第一时间检查你的可用剩余空间是否显著下降,如果是,说明是你的代码出错了,有无限循环等会导致程序无法结束的异常代码。
剩余空间下降的原因,我估计是valgrind在出现异常结束的时候,不会清除自己产生的文件,这会导致剩余空间被不知道哪来的文件全部占满,如果占满之后就再也打不开虚拟机了。
解决方法:将文件移动到虚拟机独有的文件夹中;检查代码错误。