2015-03-10 2 views
0

У меня есть следующий код, который я запускаю в терминале. В другом терминале у меня есть «верхний» открытый, где я могу видеть% CPU нового процесса, который я создаю. Я запускаю это для количества процессов (N); 2, 4, 8, 16. Средний% процессора от каждого я доложить есть .. 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; 
} 
+2

Ваш вопрос полностью неясен. –

+1

Ваши результаты показывают, что у вас 4-процессорный процессор. – user3386109

+0

Если вы запрашиваете количество ядер процессора, вы в основном ищете максимальное общее использование ЦП, которое в вашем примере составляет 4x100% = 8x50% = 16x25% = 400%. Если вы можете создать максимальную нагрузку в 400%, это означает, что вы работаете на 4-ядерном процессоре (в противном случае на холостом ходу). – JimmyB

ответ

1

Это зависит от вашего определения мощности обработки. Классическим способом является количество команд в секунду (MIPS) или операций с плавающей запятой в секунду (FLOP).

Поиск MIPS затруднительно, потому что в коде C вы не знаете, сколько инструкций представляет каждая строка кода.

Вы можете сделать расчет мега-флопов. Loop in C делает операцию float * float случайных чисел. Посмотрите, сколько времени потребуется для выполнения большого количества вычислений (скажем, 10), а затем подсчитайте, сколько вы сделали за секунду.

Затем умножьте на количество обрабатываемых вами процессоров.

+0

Хмм, не будет ли мега-флопов 10^6 операций? Или я чего-то не хватает? – ravron

+0

Я имею в виду - «много делайте, а затем делайте математику», а не «это точная формула», – pm100

0

Ваши результаты показывают очень меньшую разницу между использованием ЦП для 2 процессов и 4 процессов, поэтому почти наверняка это четырехъядерный процессор. Кроме того, мало что можно рассказать о скорости процессора только с процентами. Вы также использовали операторы printf, которые еще труднее вычислить скорость обработки, поскольку они иногда смывают буфер.

0

«Мощность обработки» - наводящий на размышления, но досадно неопределенный термин. Для большинства целей мы не заботимся о MIP или FIPs — только для чистого хруста. Даже тогда это бесполезно для сравнения компьютеров, так как сравнивать автомобили с их максимальным RPMs. См. BogoMips.

Даже с MIP и FIPs, обычно пик производительность измеряется. Многие не пытаются определить средние значения.

Другим полезным параметром мощности ЦП является ветви в секунду —, которые никто не измеряет (но они должны). BPS значительно варьируется в зависимости от сложности архитектуры процессора, кэширования, подкачки, возможно, переключения контекста и характера ветвей.

В любой полезной программе ввод и вывод является частью вычислительной мощности. Следовательно, пропускная способность памяти, устройств ввода/вывода, файловых систем и соединительных устройств, сетей и т. Д. Являются частью вычислительной мощности компьютера.

Если вы имеете в виду подмножество из них, уточните ваш вопрос.

Смежные вопросы