【问题标题】:Benchmarking SpMV C Code基准化 SpMV C 代码
【发布时间】:2014-08-01 10:40:56
【问题描述】:
我被分配报告SpMV 算法的测试结果,这是我以前从未做过的。
我是来问的:
- 我应该使用什么程序来对代码进行基准测试,有没有可以生成图表的程序?
- 除了最大尺寸外,我还应该测试哪些尺寸?即使大小差异为 1,是否存在大小会导致缓存不规则并产生不同结果的大小? (512x512 和 513x513 或 1023x1023 和 1024x1024 的时间不同)。
- 我可以使用 time.h 库,但它是执行时间表。和矩阵大小是否足够?
我在 Windows 上。
谢谢:)
【问题讨论】:
标签:
c
codeblocks
benchmarking
sparse-matrix
【解决方案1】:
可能有些尺寸在您的机器上效果特别好,但很难预测可能是哪种尺寸。这就是为什么您应该测试许多不同大小的原因,即最好在代码中创建一个循环并将结果输出到文件并绘制它(执行时间与大小)。
对于您拥有的每个大小,您应该多次执行 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上工作,所以我不能推荐一个特定的)