[comp.arch] Dynamic parallelism

chkim@pollux.usc.edu (Chinhyun Kim) (11/12/89)

This is my second posting of the same article.  If you have seen it please
disregard and I apologize.  This article is a request for some answers to
the questions I have regarding the research I am doing now.

In numerical analysis, arrays being indexed by other arrays as shown below
are supposed to be very common in programs involving sparse matrices,
fluid flow simulations, etc.  If one wanted to parallelize this loop during
compilation, he/she would have to know the values of B(i) and C(i).  If they
are not known at compile time, it will be impossible to parallelize the
operations in the loop and thus must be executed in sequential manner.

There are, however, ways to parallelize the operations in the loop by checking
data dependency during run time and letting operations which are free of data
dependency to execute in parallel. This kind of parallelism which can be
determined only during run time is called, "dynamic parallelism".

A(i) = .....		; A(i)'s are initialized.
B(i) = ....		; B(i)'s are determined.
C(i) = ....		; C(i)'s are determined.

DO i = 1..N
    A(B(i)) = .....	        ; Array A is updated.
    T(i) = A(C(i)) + ..	        ; Array A is consumed for some operation.
ENDDO

I am currently working on ways to exploit dynamic parallelism as opposed to
static parallelism which the compiler assesses parallelism during compilation.
The model of computation is data-flow and the specific type of data-flow
computer model is tagged token data-flow computer.  I am using a mechanism
known as "token relabeling" to do this.

The results of my simulation so far is good.  However, I have some fundamental
questions to ask.

Q1. In exactly what type of numerical simulations do such loops appear and why
    are they necessary?

Q2. Are there other ways to do it without having the subscripts unknown at
    compile time, i.e. is exploitation of dynamic parallelism avoidable while
    still achieving parallel execution?

Q3. Is it possible for me to get the fragment of the simulation program which
    has such loop? i.e. assuming answer to the first part of question 1 is
    true.

Answers to these questions will be appreciated very much.

Thank you,

Chinhyun Kim
chkim@pollux.usc.edu