Practical Parallel Programming - Project

main page - practicum

Objectives

For a (frequently occurring) computational problem you should develop different parallel solutions, at least the ones discussed in the practica: vectorization, multi-threading and message-passing.

Below, in the deliverables section, we described what we expect from the performance study.

Organization

Here are the rules for the project:

We expect the following deliverables:

Topics

You are free in choosing a topic. For instance, you can parallelize the algorithm of your thesis, or another one that interests you.
For each topic we will give some pointers to problem descriptions together with a number of possible implementations.
We will also try to give an estimation of the difficulty level and feasibility.

Here some suggestions:
  1. Reductions: sum, product, mul-add or max of an array.
    1. Compare with a non-reduction operation having the same number of computations. E.g. compare the global sum with adding a constant to all elements of a vector. The number of operations is the same, except that the reduction needs a specific structure with synchronization.
  2. Sorting. Although an very common algorithm, it will still be interesting to see some results. For vectorization, some special intrinsic functions exist.
  3. Convolutions, like a sobel filter or a Gaussian blur. With large filters good speedups can be achieved.
  4. Discrete Optimization Problem. Choose a problem, like the shift puzzle explained here. See the theory chapter devoted to it.
  5. Genetic algorithms.

More topics

Topics 2016-2017 (click here)

a) Pattern recognition in signals

Consider the following large, historical 1D signal consisting of 2 variables that fluctuate in time:

Let's index the two arrays as follows:

Now we want to find matches of a given, limited signal - the query - in the historical data.
Example:

Indexed as follows:



To find a match we slide the query over the historical data and for each offset calculate the distance between both:
  => 
Here the sum of absolute differences is taken as distance metric.

b) Algorithms on matrices
for (i=n;i>=1;i--) {
    if (i < n) {
        if (g) {
            for (j=l;j<=n;j++) Double division to avoid possible underflow.
                v[j][i]=(a[i][j]/a[i][l])/g; // (*) calculating column
            for (j=l;j<=n;j++) {
                for (s=0.0,k=l;k<=n;k++) s += a[i][k]*v[k][j]; // (*) row x column (reduction)
                for (k=l;k<=n;k++) v[k][j] += s*v[k][i];  //(*) factor x column
            }
        }
        for (j=l;j<=n;j++) v[i][j]=v[j][i]=0.0;  // (*) setting column and row
    }
    v[i][i]=1.0;
    g=rv1[i];
    l=i;
}

c) Solving linear equations