我正在使用gprof分析矩阵乘法C程序。那个C程序有这样的通用结构;
int main()
{
int n;
printf("enter size of square matrices");
scanf("%d", &n);
data(matM); //fill matrices with n x n random data
data(matN);
// this is unoptimized algo
matUnopt(int *matM, int *matN, int *MatOut, int size);
// this is optimized algo
matOpt(int *matM, int *matN, int *MatOut, int size);
return(0);
}
现在我的分析现在是:
我运行我的可执行文件垫,将大小设为100
然后再生
$ gprof mat gmon.out > analysis1.txt
这会生成analysis1.txt
,我会手动记录matOpt();
和matUnopt();
的时间
然后我再次运行可执行文件垫,并提供n=150
,然后
$ gprof mat gmon.out > analysis2.txt
这会生成analysis2.txt
,我会手动记录matOpt();
和matUnopt();
的时间
等等。
这是非常耗时和无聊的方式。我想自动执行此过程。有些人喜欢这样:
int main()
{
int n;
for (n=50; n<50000; n++)
{
data(matM); //fill matrices with n x n random data
data(matN);
// this is unoptimized algo
matUnopt(int *matM, int *matN, int *MatOut, int size);
//gprof records the time of completion of matUnopt for the particular value of n, and
puts in a file
// this is optimized algo
matOpt(int *matM, int *matN, int *MatOut, int size);
//gprof records the time of completion of matOpt for the particular value of n, and
puts in a file
}
return(0);
}
一旦应用程序退出,我希望有一个像这样的表的文件:
run# (x 50) profiling result (as usual we get from gprof)
1 matUnopt time .....
matOpt time .....
2 matUnopt time .....
matOpt time .....
3 matUnopt time .....
matOpt time .....
4 matUnopt time .....
matOpt time .....
and so on.
请注意,上面的“分析结果”是我们通常从gprof获得的结果。 重要的是我有一个自动化的方法来获取多次运行可执行文件的函数的时间,这也是不同的输入大小。
这个解释只是一个粗略的想法。我很乐意得到任何近似于此的东西。例如,应用程序可能会退出,然后重新启动它以获取新的分析结果。这就是我实际在做的事情。但我想自动完成这项工作。
我如何实现这一目标?
答案 0 :(得分:0)
您是否可以使用脚本语言并将大小作为分析二进制文件的参数?
有关在c:passing arguments to main中使用参数的示例。
此bash脚本自动运行程序,矩阵大小从50到50000.tee命令确保输出打印并保存在相应的文件中:analysisxxx.txt
#!/bin/bash
for i in {50..50000}
do
gprof mat gmon.out $i | tee analysis${i}.txt
done
我希望这对你有所帮助。