【发布时间】:2016-09-16 14:07:36
【问题描述】:
我有一个任务,我需要编写一个基准程序来测试具有两种排序算法(一种迭代算法和一种递归算法)的任何处理器的性能。事情是我的老师告诉我我必须创建三个不同的程序(即 3 个 .c 文件),每个排序算法两个(它们都必须从用 \n 分隔的文本文件中读取整数并写入相同的数字到另一个文本文件但已排序)和基准测试程序。在基准程序中,我需要使用公式 MIP = NI/T*10^6 计算 MIP(每秒百万条指令),其中 NI 是指令数,T 是执行这些指令所需的时间。我必须能够通过计算每个算法的 MIP,然后求解 T 的方程来估计每个算法在任何处理器上花费的时间,例如 EstimatedTime = NI/MIPs*10^6。 我的问题是......我如何准确地衡量一个程序与另一个程序的性能?我从来没有做过这样的事情。我的意思是,我想我可以使用 C 中的 TIME 函数并测量执行 X 行和东西的时间,但只有当所有 3 个函数(2 个排序算法和 1 个基准函数)都在同一个程序中时,我才能做到这一点.我什至不知道如何开始。
哦,顺便说一句,我必须通过交叉编译从 C 到 MIPS(asm 语言)的排序算法并计算使用了多少指令来计算指令数。
任何指南都将不胜感激...我目前有这些功能:
- readfile(读取带有整数的文本文件)
- 写文件
- 排序算法
【问题讨论】:
-
某处应该有问题..
-
交叉编译到汇编器可以让您计算编译器生成的指令数量,但您需要计算出每条指令以某种方式执行了多少次。
-
这是一个问题“我如何准确地衡量一个程序与另一个程序的性能?”。是的,你是对的......如果我有一个循环,那将取决于输入的大小(将排序多少个数字)。我没有想到那个大声笑......现在我真的不知道该怎么办哈哈。我想我可以计算循环外的行数,然后将循环内的指令数乘以计数器。例如 i*24,其中 i 是计数器(i++ 和东西),24 是每个周期执行的指令数。
-
“我如何准确地衡量一个程序与另一个程序的性能?” - 就这样?好吧,等几个星期,我会有一篇关于那个的论文......
-
我不知道如何用另一个 .c 文件来衡量一个 .c 文件的执行时间。我只能想到一个包含或类似的东西......
标签: c algorithm sorting benchmarking