我被分配报告SpMV算法的测试结果,这是我以前从未做过的事情。
我来问:
- 我应该使用什么程序来对代码进行基准测试,是否有一个生成图形?
- 除了最大值外,我还应该测试哪些尺寸?是否存在大小会使缓存不规范并产生不同结果的情况,即使大小差异为1?(512x512和513x513或1023x1023和1024x1024的时间不同)
- 我可以使用time.h库,但它是执行时间表。矩阵足够大吗?
I'm on Windows.
谢谢:)
可能有些大小在您的机器上运行得特别好,但是很难预测是哪种大小。这就是为什么你应该测试很多不同的大小,也就是说,最好在你的代码中进行循环,并将结果输出到一个文件并绘制它(执行时间与大小)。
对于每个大小,您应该执行SpMV函数几次并从中计算平均时间,因为将矩阵和向量从内存加载到缓存中需要时间。一旦他们已经在那里,执行可能会快得多。
对于时间测量,你可以使用
#include <sys/time.h>
void tic(){ gettimeofday( &start, NULL);}
void toc(){ gettimeofday( &stop, NULL);}
double diff(){ return (stop.tv_sec - start.tv_sec) + 1e-6*(stop.tv_usec - start.tv_usec);}
windows上有针对c代码的分析器,但它们需要一些时间来学习。(我自己在linux上工作,所以我不能推荐一个特定的)