Pipelined parallelism may exist at different levels of abstraction like loops, functions and algorithmic stages.
The extent of parallelism depends upon the programmers' ability to make best use of this concept.
It also depends upon factors like identifying and separating the independent tasks and executing them parallelly.
Parts of data that are recurring and consume significant amount of execution time are good candidates for loop-level parallelism.
Some common applications of loop-level parallelism are found in mathematical analysis that uses multiple-dimension matrices which are iterated in nested loops.
Hence, we can completely separate out this function and run it parallelly using DOALL parallelism.
On the other hand, Statements F1 and F2 are dependent (explained above), therefore we split them into two different loops and execute them in a pipelined fashion.
DOALL parallelism mainly works on principle of divide and conquer.