- How to Program, Part I
- How to Program, Part II
- How to Program, Part III
- How to Program, Part IV
- How to Program, Part V
- exercises
- pyMPI tutorial
- Calculating PI, Part I
- Calculating PI, Part II
- Calculating PI, Part III
- Poogle - Web Search
- Mandelbrot Sets
- Mandelbrot, The Code
- Mandelbrot, The Images
- Conway's Life, Part I
- Life Code Listing
- Conway's Life, Part II
- MPI Life Code Listing
| Poogle - Web Search
Our next application is a web search program.
It will take a series of search terms (the items in the list
called "inputs") and search through the various web pages (in the
"pages" list) and count the number of pages where a match is found.
You can edit the list of pages and/or search terms to find your
own results.
file: poogle.py |
1 | # Challenge, return number of matches within a page |
2 | import mpi |
3 | import urllib |
4 | |
5 | # what we are searching for |
6 | inputs = [ |
7 | "seidel", |
8 | "beck", |
9 | "loni", |
10 | "eastman", |
11 | "brandt"] |
12 | |
13 | # collection of web pages our search engine knows about |
14 | pages = [ |
15 | 'http://www.cct.lsu.edu/about/overview/', |
16 | 'http://www.cct.lsu.edu/projects/Coastal_Modeling/', |
17 | 'http://www.cct.lsu.edu/projects/SURASCOOP/', |
18 | 'http://www.cct.lsu.edu/projects/CactusCode/', |
19 | 'http://www.cct.lsu.edu/about/employment/employment.php', |
20 | 'http://www.cct.lsu.edu/projects/GridChemCCG/', |
21 | 'http://www.cct.lsu.edu/about/people/faculty/all.php', |
22 | 'http://www.cct.lsu.edu/about/focus/', |
23 | 'http://www.cct.lsu.edu/projects/Enlightened/', |
24 | 'http://www.loni.org/', |
25 | 'http://www.loni.org/plan/', |
26 | 'http://www.cct.lsu.edu/news/news/289'] |
27 | |
28 | n = len(pages)/mpi.size |
29 | ilo = mpi.rank*n |
30 | ihi = (mpi.rank+1)*n-1 |
31 | |
32 | # each mpi proc searches a subset of pages from ilo to ihi |
33 | c = range(ihi+1) |
34 | for i in range(ilo,ihi+1): |
35 | c[i] = urllib.urlopen(pages[i]).read().lower() |
36 | |
37 | for input in inputs: |
38 | matches = [] |
39 | |
40 | for i in range(ilo,ihi+1): |
41 | if c[i].find(input) >= 0: |
42 | matches.append(pages[i]) |
43 | |
44 | # proc zero receives the results of all searches |
45 | if mpi.rank == 0: |
46 | for i in range(1,mpi.size): |
47 | other_matches = mpi.recv(mpi.ANY_SOURCE)[0] |
48 | for match in other_matches: |
49 | matches.append(match) |
50 | else: |
51 | mpi.send(matches,0) |
52 | |
53 | if mpi.rank == 0: |
54 | print input,len(matches) |
> mpirun -np 2 pyMPI poogle.py
seidel 2 beck 0 loni 4 eastman 0 brandt 0
|
| |