Help with an 8th grade science project

2014-11-20 Thread dave em
Hello,

I am the adult advisor (aka father) to an 8th grader who is doing a science 
project that will compare / benchmark CPU performance between an AMD 64 Phenom 
II running Ubuntu 14.04 and a Raspberry Pi 700MHz ARM.

Basic procedure:
-  Run a Python script on both computers that that stresses the CPU and measure
--  Time to complete the calculation
-- Max CPU during the calculation
-- We have chosen to do factorials and compare performance by running 
calculations by order of magnitude.  Our hypothesis is that we will begin to 
see a wider performance gap between the two computers as the factorials 
increase in order of magnitude.

Status:
-  We have a working program.  Pseudo code follows:

import linux_metrics
from linux_metrics import cpu_stat
import time

print 'Welcome to the stress test'
number = raw_input(Enter the number to compute the factorial:)

## function to calculate CPU usage percentage
def CPU_Percent():
cpu_pcts = cpu_stat.cpu_percents(.25)
print 'cpu utilization: %.2f%%' % (100 - cpu_pcts['idle'])
write cpu utilization to a csv file with g.write 

## function to compute factorial of a given number
def factorial(n):
num = 1
while n = 1:
num = num * n
CPU_Percent()  This is the function call irt Q 1 below 
n = n - 1
return num

# Main program
Record start time by using time.time()
Call function to compute the factorial.
Record finish time by using time.time()
write time to compute to a file f.write(totalEndTime - totalStartTime)
print (Execution time = , totalEndTime - totalStartTime)


Questions:
1.  In the factorial() function we call the CPU_Percent() function and write 
the CPU utilization value to a file.
-  Is this a correct value or will the CPU utilization below lower because the 
factorial() function made its calculation and is now just checking the CPU 
utilization?
-  If we are not getting the true max CPU utilization, can someone offer a 
design change to accomplish this?

2.  What unit does time.time() use?  An example for calculating the factorial 
of 10 is our program gives:
  Execution time = ', 1.5703258514404297  I presume this is telling us it took 
1.57 seconds to complete the calculation?

Thanks in advance for any help / suggestions.

Best regards,
Dave
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Help with an 8th grade science project

2014-11-20 Thread Ian Kelly
On Thu, Nov 20, 2014 at 1:13 PM, Dave Angel da...@davea.name wrote:
 dave em daveandem2...@gmail.com Wrote in message:
 1.  In the factorial() function we call the CPU_Percent() function and write 
 the CPU utilization value to a file.
 -  Is this a correct value or will the CPU utilization below lower because 
 the factorial() function made its calculation and is now just checking the 
 CPU utilization?

 I'm not familiar with that package; I just took a quick look at
  pypi. So I'd have to guess. But since your timing is so huge, I'd
  guess that you're measuring utilization during a time period that
  your factorial calculation is paused. In other words you're
  measuring cpu utilization for the other processes in your
  system.

 Probably someone else will correct me, but I'd guess you need to
  measure utilization with a separate process.

I'm not familiar with it either, but I would guess that it's probably
just pulling data from /proc/stat. The data is not going to be any
different if pulled from one process versus another. However, the time
that is spent waiting for this data could skew the results if done a
lot, so I suggest doing it only once at the end of the factorial
function rather than on every iteration of the factorial loop.

If you want multiple measurements while the function is running, then
either check it only every X iterations, or run a separate process and
check it every 100 milliseconds or so. The latter is probably
preferable since the time between iterations will depend on the system
and will also get progressively slower for large factorials.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Help with an 8th grade science project

2014-11-20 Thread dave
On Thursday, November 20, 2014 1:48:06 PM UTC-7, Ian wrote:
 On Thu, Nov 20, 2014 at 1:13 PM, Dave Angel da...@davea.name wrote:
  
  1.  In the factorial() function we call the CPU_Percent() function and 
  write the CPU utilization value to a file.
  -  Is this a correct value or will the CPU utilization below lower because 
  the factorial() function made its calculation and is now just checking the 
  CPU utilization?
 
  I'm not familiar with that package; I just took a quick look at
   pypi. So I'd have to guess. But since your timing is so huge, I'd
   guess that you're measuring utilization during a time period that
   your factorial calculation is paused. In other words you're
   measuring cpu utilization for the other processes in your
   system.
 
  Probably someone else will correct me, but I'd guess you need to
   measure utilization with a separate process.
 
 I'm not familiar with it either, but I would guess that it's probably
 just pulling data from /proc/stat. The data is not going to be any
 different if pulled from one process versus another. However, the time
 that is spent waiting for this data could skew the results if done a
 lot, so I suggest doing it only once at the end of the factorial
 function rather than on every iteration of the factorial loop.
 
 If you want multiple measurements while the function is running, then
 either check it only every X iterations, or run a separate process and
 check it every 100 milliseconds or so. The latter is probably
 preferable since the time between iterations will depend on the system
 and will also get progressively slower for large factorials.

All,

thanks for all of the advice.  I took the function call to measure CPU usage 
out of the loop and now get very fast responses.  For example execution time 
for 1 is 0.46 seconds and for 10 is 0.0082 seconds.  

I took a quick look at subprocesses to run the cpu function simultaneously with 
the factorial function or maybe we can figure out a way to use something like 
top and filter out CPU while we run the factorial program.

Anyway, thanks for all of the help and the sanity check on the times I was 
getting.

Best regards,
Dave

-- 
https://mail.python.org/mailman/listinfo/python-list