##// END OF EJS Templates
Lots of work on exception handling, including tests for traceback printing....
Lots of work on exception handling, including tests for traceback printing. We finally have some tests for various exception mode printing, via doctests that exercise all three modes! Also changed handling of sys.exit(X) to only print the summary message, as SystemExit is most often a 'handled' exception. It can still be 100% silenced via '%run -e', but now it's much less intrusive. Added a new %tb magic to print the last available traceback with the current xmode. One can then re-print the last traceback with more detail if desired, without having to cause it again.

File last commit:

r2345:cf784db2
r2440:0caaf43a
Show More
parallelpi.py
54 lines | 1.6 KiB | text/x-python | PythonLexer
"""Calculate statistics on the digits of pi in parallel.
This program uses the functions in :file:`pidigits.py` to calculate
the frequencies of 2 digit sequences in the digits of pi. The
results are plotted using matplotlib.
To run, text files from http://www.super-computing.org/
must be installed in the working directory of the IPython engines.
The actual filenames to be used can be set with the ``filestring``
variable below.
The dataset we have been using for this is the 200 million digit one here:
ftp://pi.super-computing.org/.2/pi200m/
"""
from IPython.kernel import client
from matplotlib import pyplot as plt
import numpy as np
from pidigits import *
from timeit import default_timer as clock
# Files with digits of pi (10m digits each)
filestring = 'pi200m-ascii-%(i)02dof20.txt'
files = [filestring % {'i':i} for i in range(1,16)]
# Connect to the IPython cluster
mec = client.MultiEngineClient(profile='mycluster')
mec.run('pidigits.py')
# Run 10m digits on 1 engine
mapper = mec.mapper(targets=0)
t1 = clock()
freqs10m = mapper.map(compute_two_digit_freqs, files[:1])[0]
t2 = clock()
digits_per_second1 = 10.0e6/(t2-t1)
print "Digits per second (1 core, 10m digits): ", digits_per_second1
# Run 150m digits on 15 engines (8 cores)
t1 = clock()
freqs_all = mec.map(compute_two_digit_freqs, files[:len(mec)])
freqs150m = reduce_freqs(freqs_all)
t2 = clock()
digits_per_second8 = 150.0e6/(t2-t1)
print "Digits per second (8 cores, 150m digits): ", digits_per_second8
print "Speedup: ", digits_per_second8/digits_per_second1
plot_two_digit_freqs(freqs150m)
plt.title("2 digit sequences in 150m digits of pi")