Я профилирую программу умножения матриц на C с помощью gprof. Эта программа на 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. Важно то, что у меня есть автоматизированный способ получения времени для функций для нескольких запусков исполняемого файла, тоже с разным размером ввода.
Это объяснение является приблизительным. Я был бы счастлив получить что-нибудь похожее на это. Например, приложение может выйти, а затем перезапустить собственное, чтобы получить новый результат профилирования. Это то, что я на самом деле делаю. Но я хочу делать это автоматически.
Как мне достичь этой цели?