The detection of informational and logical program step dependencies is a key problem when performing equivalent transformations. In this article we consider this problem for systems of loops which represent concentration of mass computations and are the biggest challenge in parallel execution. The prototype of program formalization is C language just because of it's popularity and it being an intermediate language for compilation of most programming languages including object-oriented ones. We present a shorter version of proof of existence of an algorithm for transforming any system of loops to separated form where data selection for processing is represented as a chain of procedures that select data at least for the immediately following procedures. Last procedure is called a loop kernel; other procedures are referred to as loop controllers. For such programs informational dependencies of loop iterations are determined by a system of natural number equations that connect loop controller functions and index expressions of array variables or array pointers. For the programs where these functions are linear, the solution of such systems is an algorithmically solvable problem. For more complex cases, for example when the functions are arbitrary polynomials, the problem is algorithmically unsolvable. This result points a way to construct programming languages with algorithmically detectable parallelism in the loop kernels. We introduce a notion of data fullness for program classes as ability to select array data elements with any algorithmic function. This characteristic is different from an algorithmic fullness for the classes-class may be full in one sense but not in another.
Read full abstract