Sample Chapel Exercises (SC 12 Ed Program)

Feel free to follow your interests in exploring Chapel, but here are some suggestions:

Suggestions for hands-on session one:

  1. Write a procedure to compute the dot product of two vectors. One possible signature for the method is
         proc getDotProduct(v : [] real, w : [] real) {
    For testing, you may find it helpful to create random vectors. You can do this by adding use Random; at the top of file and then using the fillRandom function:
    where numbers has already been declared as an array. This also works on 2D (or higher) arrays.
  2. Define a function for matrix-vector products. A possible signature:
         proc matrixVectorProduct(matrix : [] real, vector : [] real) {
    If you want to use your dot product routine, you can get the range of row values using matrix.domain.dim(1) and you can extract a single row of the matrix by accessing it with only one coordinate: matrix[index].
  3. Define a node class and use it to make a linked list. (nil is the name of a null reference in Chapel.) Write functions for inserting, removing, printing the list, etc.
  4. Implement binary search.
  5. Use a reduction to sum a Taylor series (e.g. to estimate ex)
  6. Write a custom reduction to identify the 2nd smallest value. What about the kth smallest?

Suggestions for hands-on session two:

(You can also continue with the session one problems...)

  1. See if you can implement the Game of Life by following the algorithm descriptions.
  2. Write a function to split a one-dimensional range into two equal pieces. For a range R, you can get the lowest value, the highest value, and the stride (distance between consecutive elements) using R.low, R.high, and R.stride respectively.
  3. Write a function to perform bubble sort. Next, try to do a parallel version: Repeatedly compare each even-indexed element with its successor and then each odd-indexed element with its successor. After n repetitions of this, the array should be sorted.
  4. Implement binary search by changing the domain.