Parallel Processing & Distributed Systems - Chapter 8: Parallel Paradigms & Programming Models
Parallel programming paradigms
Programmability Issues
Parallel programming models
–Implicit parallelism
–Explicit parallel models
–Other programming models
ying parallel programs – How much the system supports for various parallel algorithmic paradigms Programmability is the combination of – Structuredness – Generality – Portability -5-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM A program is structured if it is comprised of structured constructs each of which has these 3 properties – Is a single-entry, single-exit construct – Different semantic entities are clearly identified – Related operations are enclosed in one construct The structuredness mostly depends on – The programming language – The design of the program -6-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM A program class C is as general as or more general than program class D if: – For any program Q in D, we can write a program P in C – Both P & Q have the same semantics – P performs as well as or better than Q -7-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM A program is portable across a set of computer system if it can be transferred from one machine to another with little effort Portability largely depends on – The language of the program – The target machine’s architecture Levels of portability 1. Users must change the program’s algorithm 2. Only have to change the source code 3. Only have to recompile and relink the program 4. Can use the executable directly -8-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Widely-accepted programming models are – Implicit parallelism – Data-parallel model – Message-passing model – Shared-variable model ( Shared Address Space model) -9-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM The compiler and the run-time support system automatically exploit the parallelism from the sequential-like program written by users Ways to implement implicit parallelism – Parallelizing Compilers – User directions – Run-time parallelization -10-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM A parallelizing (restructuring) compiler must – Performs dependence analysis on a sequential program’s source code – Uses transformation techniques to convert sequential code into native parallel code Dependence analysis is the identifying of – Data dependence – Control dependence -11-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Data dependence Control dependence When dependencies do exist, transformation techniques/ optimizing techniques should be used – To eliminate those dependencies or – To make the code parallelizable, if possible X = X + 1 Y = X + Y If f(X) = 1 then Y = Y + Z; -12-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Privatization technique Some Optimizing Techniques for Eliminating Data Dependencies Do i=1,N P: A = … Q: X(i)= A + … … End Do ParDo i=1,N P: A(i) = … Q: X(i) = A(i) + … … End Do Q needs the value A of P, so N iterations of the Do loop can not be parallelized Each iteration of the Do loop have a private copy A(i), so we can execute the Do loop in parallel -13-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Some Optimizing Techniques for Eliminating Data Dependencies(cont’d) Reduction technique Do i=1,N P: X(i) = … Q: Sum = Sum + X(i) … End Do ParDo i=1,N P: X(i) = … Q: Sum = sum_reduce(X(i)) … End Do The Do loop can not be executed in parallel since the computing of Sum in the i-th iteration needs the values of the previous iteration A parallel reduction function is used to avoid data dependency -14-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Users help the compiler in parallelizing by – Providing additional information to guide the parallelization process – Inserting compiler directives (pragmas) in the source code User is responsible for ensuring that the code is correct after parallelization Example (Convex Exemplar C) #pragma_CNX loop_parallel for (i=0; i <1000;i++){ A[i] = foo (B[i], C[i]); } -15-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Parallelization involves both the compiler and the run-time system – Additional construct is used to decompose the sequential program into multiple tasks and to specify how each task will access data – The compiler and the run-time system recognize and exploit parallelism at both the compile time and run-time Example: Jade language (Stanford Univ.) – More parallelism can be recognized – Automatically exploit the irregular and dynamic parallelism -16-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Advantages of the implicit programming model – Ease of use for users (programmers) – Reusability of old-code and legacy sequential applications – Faster application development time Disadvantages – The implementation of the underlying run-time systems and parallelizing compilers is so complicated and requires a lot of research and studies – Research outcome shows that automatic parallelization is not so efficient (from 4% to 38% of parallel code written by experienced programmers) -17-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Data-Parallel Message-Passing Shared-Variable -18-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Applies to either SIMD or SPMD modes The same instruction or program segment executes over different data sets simultaneously Massive parallelism is exploited at data set level Has a single thread of control Has a global naming space Applies loosely synchronous operation -19-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM main() { double local[N], tmp[N], pi, w; long i, j, t, N=100000; A: w=1.0/N; B: forall(i=0; i<N; i++) { P: local[i]=(i +0.5)*w; Q: tmp[i]=4.0/(1.0+local[i]*local[i]); } C: pi=sum(tmp); D: printf(“pi is %f\n”, pi*w); } //end main Data-parallel operations Reduction operation Example: a data-parallel program to compute the constant “pi” -20-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Multithreading: program consists of multiple processes – Each process has its own thread of control – Both control parallelism (MPMD) and data parallelism (SPMD) are supported Asynchronous Parallelism – All process execute asynchronously – Must use special operation to synchronize processes Multiple Address Spaces – Data variables in one process is invisible to the others – Processes interact by sending/receiving messages -21-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Explicit Interactions – Programmer must resolve all the interaction issues: data mapping, communication, synchronization and aggregation Explicit Allocation – Both workload and data are explicitly allocated to the process by the user -22-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM #define N 1000000 main() { double local, pi, w; long i, taskid, numtask; A: w=1.0/N; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &taskid); MPI_Comm_size(MPI_COMM_WORLD, &numtask); B: for (i=taskid;i<N;i=i+numtask) { P: local= (i +0.5)*w; Q: local=4.0/(1.0+local*local); } C: MPI_Reduce(&local, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); D: if (taskid==0) printf(“pi is %f\n”, pi*w); MPI_Finalize(); } //end main Example: a message-passing program to compute the constant “pi” Message-Passing operations -23-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Has a single address space Has multithreading and asynchronous model Data reside in a single, shared address space, thus does not have to be explicitly allocated Workload can be implicitly or explicitly allocated Communication is done implicitly – Through reading and writing shared variables Synchronization is explicit -24-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM #define N 1000000 main() { double local, pi=0.0, w; long i; A: w=1.0/N; B: #pragma parallel #pragma shared (pi,w) #pragma local(i,local) { #pragma pfor iterate (i=0;N;1) for(i=0;i<N;i++){ P: local= (i +0.5)*w; Q: local=4.0/(1.0+local*local); } C: #pragma critical pi=pi+local; } D: if (taskid==0) printf(“pi is %f\n”, pi*w); } //end main -25-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Structuredness Portability Generality Correctness Determinacy Termination Irregularity Aggregation Synchronization Communication Allocation issues Parallelism issues Cray Craft, SGI Power C SP2 MPL, Paragon Nx CM C*Platform-dependent examples X3H5PVM, MPIFortran 90, HPF, HPC++ Kap, ForgePlatform-independent examples Shared-VariableMessage-passingData-parallelImplicitIssues -26-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Implicit parallelism – Easy to use – Can reuse existing sequential programs – Programs are portable among different architectures Data parallelism – Programs are always determine and free of deadlocks/livelocks – Difficult to realize some loosely sync. program -27-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Message-passing model – More flexible than the data-parallel model – Lacks support for the work pool paradigm and applications that need to manage a global data structure – Be widely-accepted – Expoit large-grain parallelism and can be executed on machines with native shared-variable model (multiprocessors: DSMs, PVPs, SMPs) Shared-variable model – No widely-accepted standard programs have low portability – Programs are more difficult to debug than message-passing programs -28-Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM Functional programming Logic programming Computing-by-learning Object-oriented programming
File đính kèm:
- Parallel Processing & Distributed Systems - Chapter 8 Parallel Paradigms & Programming Models.pdf