## INTRODUCTION

The following examples are meant to demonstrate some concrete examples of how the different parallelism constructs from Tech Pack 1 may be applied. There are two broad categories of example -- Method examples and Mini-Applications. The Method examples are constructed to demonstrate key numerical techniques that may be useful in a variety of situations. The Mini-Application examples take this to a more advanced level, demonstrating solutions to specific game or science problems.

## Method Examples

__Finding the area under a curve -- Numerical Integration__

Numerical integration is an important technique for solving many different problems. To demonstrate the method, we utilize one type of numerical integration in order to calculate the value of Pi, since the end result is an easy one to compare to.

*Implementations: serial, openmp, tbb, pthreads, winthreads, go, mpi, cuda, arbb*

Find out more

__Depth-first search of graph__

Finding a particular value that has been stored in a graph requires a strategy. Depth-first search is one such strategy. The implementations here demonstrate the technique using

*Implementations: serial, windows threads, (tbb)*

Find out more

__Finding the area under a curve -- Monte Carlo Methods__

For some surfaces, the approach used in the numerical integration section may be difficult to apply. Monte Carlo methods utilize statistics and random sampling to estimate the area instead of directly calculating it. Again, by way of demonstration we utilize the method to calculate Pi.

*Implementations: serial, openmp, mpi, pthreads, go, (cuda?, cilk plus?)*

## Mini-Application Examples

__Drug Design problem__

We take a map-reduce strategy for computations to match candidate drug molecules to a target protein, implemented in common multi-core parallel computing technologies and in the Hadoop map-reduce framework that is often used in cloud computing.

*Implementations: serial, OpenMP, Boost threads, go, Hadoop; TBB containers*

Find out more

__Akari__

Akari is a game designed by Nikoli that has elements of sudoku, mine sweeper, and several classic chess problems. This mini-application builds a program to automatically solve this problem using a search pattern called branch-and-bound.

*Implementations: serial, openmp tasks (implemented 3 ways), (tbb tasks, cilk tasks)*

Find out more

__Game of Life__

The Game of Life is a cellular automata devised by mathematician John Conway in 1970. It has found its way into screen savers, graphic backgrounds, and, indeed, games. The application here demonstrates basic techniques for cellular automata simulations — techniques which often also find application in image convolution and matrix multiplication.

*Implementations: serial C, CUDA*

Find out more