我有以下代码,我在终端中运行。 在另一个终端我有顶级'打开,我可以看到我创建的新进程的%CPU。我运行这个过程的数量(N); 2,4,8,16。 每个i报告的平均%CPU是.. 2 - 100% 4 - 97% 8 - 50% 16 - 25%
如何通过这些结果确定计算机的处理能力?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 2 /* define the total number of processes we want */
/* Set global variable */
float total=0;
/* compute function just does something. */
int compute()
{
int i;
float oldtotal=0, result=0;
/* for a large number of times just square root and square
the arbitrary number 1000 */
for(i=0;i<2000000000;i++)
{
result=sqrt(1000.0)*sqrt(1000.0);
}
/* Print the result – should be no surprise */
printf("Result is %f\n",result);
/* We want to keep a running total in the global variable total */
oldtotal = total;
total = oldtotal + result;
/* Print running total so far. */
printf("Total is %f\n",total);
return(0);
}
int main()
{
int pid[N], i, j;
float result=0;
printf("\n"); /* bit of whitespace */
/* We want to loop to create the required number of processes
Note carefully how only the child process is left to run */
for(i=0;i<N;i++)
{
/* Do the fork and catch it if it/one fails */
if((pid[i]=fork())==-1)
{
exit(1);
}
/* now with child we want to do our computation */
else if(pid[i] > 0)
{
/* give a message about the proc ID */
printf("Process Id for process %d is %d\n",i,getpid());
/* call the function to do some computation. If we used sleep
The process would simply sleep. We do not want that */
compute();
/* After we have done our computation we must quit the for
loop otherwise we get a fork bomb! */
break;
}
}
/* nothing else to do so end main function (and program) */
return 0;
}
答案 0 :(得分:1)
这取决于您对处理能力的定义。经典方法是每秒指令数(MIPS)或每秒浮点运算数(FLOP)。
查找MIPS非常繁琐,因为在C代码中,您不知道每行代码表示的指令数。
你可以做一个大翻牌计算。在C中循环执行随机数的float * float
运算。看看进行大量计算需要多长时间(例如10 9 )然后计算你在一秒钟内做了多少计算。
然后乘以你拥有的处理器数量。
答案 1 :(得分:0)
您的结果显示,2个进程和4个进程的CPU使用率差异非常小,因此几乎可以肯定是四核处理器。除此之外,关于处理器的速度只有百分比的说法并不多。您还使用了printf
语句,这使得计算处理速度变得更加困难,因为它们偶尔会刷新缓冲区。
答案 2 :(得分:0)
&#34;处理能力&#34;是一个具有启发性但又令人讨厌的含糊不清的术语。在大多数情况下,我们并不关心MIP或FIP - 仅针对纯数字运算,我们是否愿意。即便如此,对于比较计算机而言,将汽车与其最大值RPMs进行比较也是无用的。请参阅BogoMips。
即使使用MIP和FIP,通常也会测量峰值性能。许多人并不试图确定平均值。
CPU功率的另一个有用参数是每秒分支 - 没有人测量(但它们应该)。 BPS因CPU架构的复杂性,缓存,分页,可能的上下文切换以及分支的性质而有很大差异。
在任何有用的程序中,输入和输出都是计算能力的一部分。因此,存储器,I / O设备,文件系统以及连接设备,网络等的带宽是计算机的计算能力的一部分&#34;。
如果您指其中的一部分,请澄清您的问题。