Posts

Showing posts with the label MPI

Parallel Beam Tracing and Visualization of 200 Million Sonar Points

Image
For the final project in the UIC Spring 2013 Parallel Processing Class, I worked with a classmate to optimize our current implementation of a sonar beam tracer used for  The NASA ENDURANCE Project . The beam tracer is used to process the raw data collected by the ENDURANCE AUV in Lake Bonney, Antarctica, and correct sound beam paths using information about the water chemistry. The data is clustered and noise filtered to generate a final 3D Point cloud that can be visualized in our CAVE2 system. The ENDURANCE Sonar data in CAVE2. Photo(c) Lance Long. A lot of corrections and adjustments need to be applied to this data before the final results are acceptable. Some of the corrections derive from the sound speed estimation through the water column, AUV navigation corrections, water level changes and noise filtering thresholds. All this parameters influence the final result, and ideally researchers can tweak them and see the result of their actions in real time. Given the siz...

Parallel Gaussian Elimination Using MPI

Image
In this project, we had to implement a parallel solver for linear equation systems, using a technique known as Gaussian elimination (GE). As with many other algorithms for solving linear equation systems, GE is performed on the matrix representation of the system, Ax = b, where A is the coefficient matrix and b is the vector of known values. GE works by applying a set of elementary row operations (swapping rows, multiplying a row by a non-zero number, adding a multiple of one row to another) in order to turn the coefficient matrix into upper triangular form. The algorithm has been implemented in C, using the Message Passing Interface (MPI) API. The parallel GE program measured execution times for its four main components: data distribution, Forward Elimination , Pivot row identification, Back substitution. Read the full report here

Distributed Sum on a 2D mesh using MPI

Image
For a recent class project, we had to implement an algorithm to sum an array of integers on a computer cluster. This problem is one of the easiest applications of the map-reduce approach: Since a sum is an associative operation, we can simply assign a portion of the array to each of our processing resources, and incrementally collect and merge all the partial sums until we get the final result. The Message Passing Interface (MPI) actually has primitives that support map-reduce algorithms directly. To make the project a little more challenging, we had to implement our distributed algorithm considering this additional requirements: We could only use MPI_Send and MPI_Recv primitives: in other words, all communication needed to be explicit, point-to-point messaging. We had to assume our computational resources were organized as a 2D mesh: each computation element would have an index (i, j) and could only communicate with elements on its same row or column. We wanted to m...