Parallel Python 并行开发多核心并行程序(例3)

#-*- coding: UTF-8 -*-
#-------------------------------------------------------------------------------
# Name:        
# Purpose:     
#
# Author:      ankier
#
# Created:     05-02-2013
# Copyright:   (c) ankier 2013
# Licence:     <your licence>
#-------------------------------------------------------------------------------

import math, sys, md5, time
import pp

def part_sum(start, end):
    """Calculates partial sum"""
    sum = 0
    for x in xrange(start, end):
        if x % 2 == 0:
           sum -= 1.0 / x 
        else:
           sum += 1.0 / x 
    return sum

start = 1
end = 20000000

# Divide the task into 64 subtasks
parts = 64
step = (end - start) / parts + 1

# Create jobserver
job_server = pp.Server()

# Execute the same task with different amount of active workers and measure the time
for ncpus in (1, 2, 4, 8, 16, 1):
    job_server.set_ncpus(ncpus)
    jobs = []
    start_time = time.time()
    print "Starting ", job_server.get_ncpus(), " workers"
    for index in xrange(parts):
        starti = start+index*step
        endi = min(start+(index+1)*step, end)
        jobs.append(job_server.submit(part_sum, (starti, endi)))
   
    # Retrieve all the results and calculate their sum
    part_sum1 = sum([job() for job in jobs])
    # Print the partial sum
    print "Partial sum is", part_sum1, "| diff =", math.log(2) - part_sum1

    print "Time elapsed: ", time.time() - start_time, "s"
    print
job_server.print_stats()

运行结果:

Starting  1  workers
Partial sum is 0.69314720556 | diff = -2.50000427027e-08
Time elapsed:  3.40600013733 s

Starting  2  workers
Partial sum is 0.69314720556 | diff = -2.50000427027e-08
Time elapsed:  2.04699993134 s

Starting  4  workers
Partial sum is 0.69314720556 | diff = -2.50000427027e-08
Time elapsed:  1.6740000248 s

Starting  8  workers
Partial sum is 0.69314720556 | diff = -2.50000427027e-08
Time elapsed:  1.66700005531 s

Starting  16  workers
Partial sum is 0.69314720556 | diff = -2.50000427027e-08
Time elapsed:  1.67000007629 s

Starting  1  workers
Partial sum is 0.69314720556 | diff = -2.50000427027e-08
Time elapsed:  3.36299991608 s

Job execution statistics:
 job count | % of all jobs | job time sum | time per job | job server
       384 |        100.00 |      29.3340 |     0.076391 | local
Time elapsed since server creation 15.2060000896
0 active tasks, 1 cores

 

posted on 2013-02-05 21:09  |残阳|露  阅读(521)  评论(0编辑  收藏  举报

导航