UW AMath High Performance Scientific Computing
AMath 483/583 Class Notes
Spring Quarter, 2013

Table Of Contents

Previous topic

Lab 11: Tuesday May 6, 2014

Next topic

Lab 13: Tuesday May 13, 2014

This Page

Lab 12: Thursday May 8, 2014

Programming problem

Work on this in groups!

  1. In Lab 11 you worked on a program to compute the mean of n random numbers. A sample solution can be found at $UWHPSC/labs/lab11/mean.f90.

    Write a Fortran program that runs over different values of n, and for each n generates a vector x containing n random numbers and then computes the mean of these. Also compute the fraction of the numbers that lie in the first quartile (the fraction of x(i) values that are between 0 and 0.25) and the fraction that lie in the fourth quartile (between 0.75 and 1.0). Since the random_number routine returns numbers uniformly distributed between 0 and 1, we expect each of these fractions to be about 0.25.

    Use OpenMP to make the loop on i from 1 to n into a parallel do loop.

    Running this code should give something like this if you take as the n values \(n = 10^k\) for \(k=2,3,\ldots,8\):

     Number of threads:            2
     input seed
     seed1 for random number generator:       12345
           n          mean        quartile 1    quartile 4
           100     0.51902466     0.22000000     0.24000000
          1000     0.47476778     0.27800000     0.22500000
         10000     0.49606601     0.25670000     0.25190000
        100000     0.50121669     0.24815000     0.25130000
       1000000     0.50001034     0.24986300     0.24979800
      10000000     0.49998532     0.24994350     0.24992770
     100000000     0.49995944     0.25003764     0.24995608
  2. If you haven’t already, study the code in $UWHPSC/codes/openmp/pisum2.f90 and make sure you understand how this coarse grain parallelism works. Discuss with your neighbors.

  3. If you have time, try to follow this model to make your code that computes the mean and quartiles work in a similar manner, where you break up the different values of n to be tested between different threads, e.g. in the above example one thread would take the first three values of n and the second thread would take the final two values of n.

  4. Discuss with your neighbors whether this is a sensible way to try to use two threads on this problem.

  5. There is a quiz for this lab.

  6. Sample solutions can now be found in $UWHPSC/labs/lab12.