Distributed memory programming, typically through the MPI library, is the de facto standard for programming large scale parallelism, with up to millions of individual processes. Its dominant paradigm of Single Program...
详细信息
Distributed memory programming, typically through the MPI library, is the de facto standard for programming large scale parallelism, with up to millions of individual processes. Its dominant paradigm of Single Program Multiple Data (SPMD) programming is different from threaded and multicore parallelism, to an extent that students have a hard time switching models. In contrast to threaded programming, which allows for a view of the execution with central control and a central repository of data, SPMD programming has a symmetric model where all processes are active all the time, with none privileged, and where data is distributed. This model is counterintuitive to the novice parallel programmer, so care needs to be taken how to instill the proper 'mental model'. Adoption of an incorrect mental model leads to broken or inefficient code. We identify problems with the currently common way of teaching MPI, and propose a structuring of MPI courses that is geared to explicit reinforcing the symmetric model. Additionally, we advocate starting from realistic scenarios, rather than writing artificial code just to exercise newly-learned routines. (C) 2018 Published by Elsevier Inc.
The performance of parallel algorithms is often inconsistent with their preliminary theoretical analyses. Indeed, the difference is increasing between the ability to theoretically predict the performance of a parallel...
详细信息
The performance of parallel algorithms is often inconsistent with their preliminary theoretical analyses. Indeed, the difference is increasing between the ability to theoretically predict the performance of a parallel algorithm and the results measured in practice. This is mainly due to the accelerated development of advanced parallel architectures, whereas there is still no agreed model for parallel computation, which has implications for the design of parallel algorithms and for the manner in which parallelprogramming should be taught. In this study, we examined the practical performance of Cormen's Quicksort parallel algorithm. We determined the performance of the algorithm with different parallelprogramming approaches and examine the capacity of theoretical performance analyses of the algorithm for predicting the actual performance. This algorithm is used for teaching theoretical and practical aspects of parallelprogramming to undergraduate students. We considered the pedagogic implications that may arise when the algorithm is used as a learning resource for teaching parallel programming. (C) 2020 Elsevier Inc. All rights reserved.
As multicore computers become widespread, the need for software programmers to decide on the most effective parallelization techniques becomes very prominent. In this case study, we examined a competition in which fou...
详细信息
ISBN:
(纸本)9781538626719
As multicore computers become widespread, the need for software programmers to decide on the most effective parallelization techniques becomes very prominent. In this case study, we examined a competition in which four teams of graduate students parallelized two sequential audio analysis applications. The students were introduced with PThreads, OpenMP and TBB parallelprogramming models. Use of different profiling and debugging tools was also taught during this course. Two of the teams parallelized libVorbis audio encoder and the other two parallelized the LAME encoding engine. The strategies used by the four teams to parallelize these applications included the use of taught programming models, focusing on both fine-grained and coarse-grained parallelism. These strategies are discussed in detail along with the tools utilized for the development and profiling. An analysis of the results obtained is also performed to discuss speedups and audio quality of the encoded output. A list of the lessons to be remembered while parallelizing an application has been provided as well. These lessons include best pedagogical methods, importance of understanding the program before choosing a programming model, concentrating on coarse-grained parallelism first, looking for dependency relaxation, parallelism beyond the predefined language constructs, the need of practice or prior experience in parallelprogramming and the need for assisting tools in parallelization.
Knowledge of parallelprogramming is an essential requirement in multicore era. To meet this requirement, teaching parallel programming is important at university level. Further, students should have an exposure to di...
详细信息
ISBN:
(纸本)9781479918768
Knowledge of parallelprogramming is an essential requirement in multicore era. To meet this requirement, teaching parallel programming is important at university level. Further, students should have an exposure to different parallel architectures and programming models as well. In order to achieve this objective, it is appropriate to use an integrated system having different parallel architectures and supporting programming languages. Though it is difficult to find a system as stated above, Multi Core Students Experimental Processor (MCSEP) designed on the base of Students Experimental Processor provides an opportunity to develop such system. The MCSEP can be configured to one of the five architectures: SISD, SIMD, MIMD, Multiple-SIMD, and Multiple-MIMD. Each architecture can further be configured to one of six Instruction Set Architectures: Memory-Memory, Accumulator, Extended Accumulator, Stack, Register Memory, and Load Store. As there are no programming tools for the MCSEP, a compiler and a simplified programming language, SEPCom has been developed for using all the features of the multicore processor MCSEP. The SEPCom is a Java like programming language with parallelprogramming features. The test results show that SEPCom performs well in all architectures available in the MCSEP. Therefore SEPCom can be used for writing parallel programs for different parallel architectures. Consequently, students can develop appropriate programs to do their experiments, and moreover to analyze and measure performances in different parallel architectures. Further, students can also use it as a case study for learning compiler design.
Python is gaining popularity in academia as the preferred language to teach novices serial programming. The syntax of Python is clean, easy, and simple to understand. At the same time, it is a high-level programming l...
详细信息
Python is gaining popularity in academia as the preferred language to teach novices serial programming. The syntax of Python is clean, easy, and simple to understand. At the same time, it is a high-level programming language that supports multi programming paradigms such as imperative, functional, and object-oriented. Therefore, by default, it is almost obvious to believe that Python is also the appropriate language for teaching parallel programming paradigms. This paper presents an in-depth study that examines to what extent Python language is suitable for teaching parallel programming to inexperienced students. The findings show that Python has stumbling blocks that prevent it from preserving its advantages when shifting from serial programming to parallelprogramming. Therefore, choosing Python as the first language for teaching parallel programming calls for strong justifications, especially when better solutions exist in the community.
One promising approach to teaching parallel programming is to use high-level parallelprogramming languages, which handle some of the more mundane details of parallelprogramming and allow both instructors and student...
详细信息
ISBN:
(纸本)9781450318686
One promising approach to teaching parallel programming is to use high-level parallelprogramming languages, which handle some of the more mundane details of parallelprogramming and allow both instructors and students to focus on the main ideas. How does one go about selecting the language to use? We present short descriptions of a variety of languages (Chapel, Cilk, CUDA, Habanero Java, Hadoop, OpenACC, OpenMP and Scala), including our assessment of their strengths and weaknesses, plus some general considerations to keep in mind when teaching parallel programming.
暂无评论