用Java实现并行编程教学外文翻译资料

 2022-11-13 17:37:34

Teaching Parallel Programming Using Java

lowast;

sect;

Bryan Carpenter

School of Computing,

University of Portsmouth (UK)

Aamir Shafi , Aleem

dagger;

Dagger;

Akhtar , Ansar Javed

SEECS, National University of

Sciences and Technology

(NUST), Pakistan

ABSTRACT

1. INTRODUCTION

This paper presents an overview of the “Applied Parallel

Computing” course taught to final year Software Engineer-

ing undergraduate students in Spring 2014 at NUST, Pakistan.

The main objective of the course was to introduce practical

parallel programming tools and techniques for shared and

distributed memory concurrent systems. A unique aspect of

the course was that Java was used as the principle program-

ming language. The course was divided into three sections.

The first section covered parallel programming techniques

for shared memory systems that include multicore and Sym-

metric Multi-Processor (SMP) systems. In this section, Java

threads was taught as a viable programming API for such

systems. The second section was dedicated to parallel pro-

gramming tools meant for distributed memory systems in-

cluding clusters and network of computers. We used MPJ

Express—a Java MPI library—for conducting programming

assignments and lab work for this section. The third and the

final section covered advanced topics including the MapRe-

duce programming model using Hadoop and the General

Purpose Computing on Graphics Processing Units (GPGPU).

The emergence of multicore hardware has brought parallel

computing into the limelight. It has also put the burden

of improving performance of applications on the software

programmers [1]. The only option to increase performance

of existing sequential applications is to utilize some form of

parallelism. This obviously implies that the software de-

velopment community—including current and future soft-

ware engineers—must learn parallel programming models

and tools to write optimized code for multicore processors

and High Performance Computing (HPC) hardware.

Realizing the importance of teaching concurrency at the un-

dergraduate level, a 2 1 credit hours elective course titled

“Applied Parallel Computing” was added to the Bachelors

of Software Engineering program1 at NUST, Pakistan. The

program spans four years—distributed in eight semesters—

and 136 credit hours. This particular course on parallel

computing was taught in the eighth and the last semester.

Course contents were mostly adapted from a Parallel and

Distributed Computing (PDC) course taught at the Univer-

sity of Portsmouth, UK.

Categories and Subject Descriptors

The course began with an introduction of parallel computing,

which motivated the need for such computing to solve some

of the biggest possible problems in the least possible time.

Some important concepts including shared/distributed mem-

ory systems, performance measurement metrics, and hard-

ware accelerators were introduced. After the initial introduc-

tion, the course was divided into three sections. The first

section covered programming techniques for shared mem-

ory systems including multicore processors and Symmetric

Multi-Processors (SMPs). These included Java threads [2],

OpenMP [3], and Intel Cilk Plus [4]. Note that all practical

work including assignments, labs, and code samples during

lectures were Java-based. The second section covered pro-

gramming tools and APIs for distributed memory systems

including commodity clusters. For this section, the course

focused on writing parallel applications using a Java MPI-

like software called MPJ Express [5], which implements the

mpiJava 1.2 API specification [6]—this is equivalent to MPI

version 1.1. Being a Java MPI library, MPJ Express allows

writing parallel Java applications for clusters and network of

computers. To allow easy configuration and installation for

students, MPJ Express provides a multicore mode, where Java

threads are used to simulate parallel MPI processes in a single

K.3.2 [COMPUTERS AND EDUCATION]: Computer and

Information Science Education—Computer science education

General Terms

Algorithms, Languages, Performance

Keywords

Parallel Programming Education; Java; Java MPI; MPJ Ex-

press

lowast;

aamir.shafi@seecs.edu.pk

dagger;

aleem.akhtar@seecs.edu.pk

Dagger;

ansar.javed@seecs.edu.pk

sect;

bryan.carpenter@port.ac.uk

1

//

http: seecs.nust.edu.pk academics doc bese.php

/

/

/

JVM. Our students found this to be an extremely useful fea-

ture since initially they were able to write, execute, and test

parallel Java code on their personal laptops/PCs. Once stable,

the same code would also execute on a cluster or a network

of computers using the MPJ Express cluster mode. In the sec-

ond section on distributed memory systems programming, a

range of topics including synchronous/asynchronous point-

to-point communication, collective communication, and syn-

chronization were covered. The third and the final section

covered advanced topics including the MapReduce program-

ming model using Hadoop and the General Purpose Com-

puting on Graphics Processing Units (GPGPU).

velop shared and distributed memory versions using threads

and messaging in the first and second sections of the course.

Typically parallel computations can be roughly divided into

two categories based on their requirements to communicate

during the computation phase. Applications that do

剩余内容已隐藏,支付完成后下载完整资料


用Java实现并行编程教学

Aamir Sha fi,Aleem Akhtar,Ansar Javed SEECS,国立科技大学(NUST),巴基斯坦

Bryan Carpenter 计算机学院,朴茨茅斯大学(英国)

摘要:本文介绍了“应用并行”的概述计算“课程到最后一年软件工程师 - 2014年春季在巴基斯坦NUST大学本科生。课程的主要目的是介绍实用并行编程工具和技术共享和分布式内存并发系统。一个独特的方面课程是使用Java作为主要程序 -ming语言。课程分为三个部分。第一部分涉及并行编程技术对于包括多核和Sym-公制多处理器(SMP)系统。在本节中,Java线程被教为一种可行的编程API系统。第二部分专门用于平行,用于分布式存储系统的语法分析工具 - 包括集群和计算机网络。我们使用MPJExpress-a Java MPI库 - 用于进行编程本部分的作业和实验室工作。第三和最后部分介绍了高级主题,包括MapRe-duce编程模型使用Hadoop和General图形处理单元(GPGPU)上的目的计算。

  1. 绪论:

多核硬件的出现带来了并行计算成了风头。它也带来了负担提高软件应用程序的性能程序员。增加性能的唯一选项的现有顺序应用程序是利用某种形式的并行性。这显然意味着,开发社区 - 包括当前和未来的软 - 软件工程师必须学习并行编程模型以及为多核处理器编写优化代码的工具和高性能计算(HPC)硬件。意识到在并行处理中并发教学的重要性,升学水平,2 1学分选修课“应用并行计算”被添加到学士学位软件工程项目1在巴基斯坦NUST。的计划跨越四年 - 分布在八个学期 - 和136学时。这个特别的课程是平行的计算在第八个和最后一个学期教授。课程内容主要来自于Parallel和分布式计算(PDC)课程,Univer-朴茨茅斯大学,英国。该课程开始介绍并行计算,这激发了对这样的计算的需要来解决一些的最大可能的问题在最短的时间。一些重要的概念包括共享/ory系统,性能测量度量,加速器。在初始引入 - 该课程分为三个部分。第一部分覆盖的编程技术,包括多核处理器和Symmetric多处理器(SMP)。这些包括Java线程[2]OpenMP [3]和Intel Cilk Plus [4]。注意所有实用工作,包括作业,实验室和代码样本讲座是基于Java的。第二部分包括:用于分布式内存系统的语法分析工具和API包括商品集群。对于本节,课程专注于使用Java MPI-像MPJ Express [5]这样的软件,它实现了mpiJava 1.2 API规范[6] - 这相当于MPI版本1.1。作为一个Java MPI库,MPJ Express允许编写针对集群和网络的并行Java应用程序电脑。允许容易配置和安装学生,MPJ Express提供了一种多核模式,其中Java线程用于在单个JVM中模拟并行MPI进程。我们的学生发现这是一个非常有用的fea-自从最初他们能够写,执行和测试并行Java代码在他们的个人笔记本电脑/ PC。一旦稳定,相同的代码也将在集群或网络上执行的使用MPJ Express群集模式的计算机。在秒 - 分布式内存系统编程的一节主题范围,包括同步/点对点通信,集体通信,长期化。第三和最后部分涵盖高级主题,包括MapReduce程序 - ming模型使用Hadoop和通用Com-穿上图形处理单元(GPGPU)。

1.1、使用Java的动机

这种并行计算的一个有趣和独特的方面课程喜欢Java比传统的本地HPC lan-如C和Fortran在课程的实践部分。这有几个原因。与C或Fortran相比,Java pro-语法包括高级编程语言cepts,改进的编译时间和运行时检查,因此,更快的问题检测和调试。在广告中-dition,Java的自动垃圾收集,当被利用时仔细地,减轻程序员的许多陷阱低级语言。内置的线程支持,提供了一种在Java应用程序中插入并行性的方法。的Java开发工具包(JDK)包括大量的库可以由开发人员重复使用的快速应用程序devel-opment。另一个有趣的论据支持Java是开发者的大池 - 主要原因是Java是被教授为许多大学的主要语言之一在全球范围内。应用的一个非常有吸引力的特点用Java编写的是它们可以移植到任何硬件或操作系统,只要有一个Java虚拟Ma-chine(JVM)。 JVM的贡献是重要的,记住它允许程序员重点关注与其应用和领域相关的问题利息,而不是系统异质性。为了方便编写用于共享的并行Java代码内存系统,Java配备了一个功能丰富的线程 - API。 为了教授编程分布式内存系统,我们有选择在各种Java之间MPI库包括MPJ Express [5],FastMPJ [7]和打开MPI Java [8]。 在这种情况下,我们选择MPJ Express正在巴基斯坦NUST开发和维护。对于课程的第三和最后一节,我们选择Apache Hadoop软件[9]用于实现MapRe-duce应用程序,这是一个流行的开源软件过程自动并行化 - 大量数据的。

本文的其余部分组织如下。 第2节介绍HPC工作负载在整个过程中用作示例应用程序课程。 第3节概述课程大纲,后面是a详细讨论课程内容。 第4节总结全章。

  1. 、HPC工作负载:

本节介绍用作示例应用程序的HPC工作负载,阳离子。我们首先介绍顺序版本的这些应用程序。学生们被邀请使用线程开发共享和分布式内存版本并在课程的第一和第二部分的消息。通常,并行计算可以大致分为两类基于他们的沟通需求在计算阶段。应用程序,在计算阶段调用任何通信尴尬的并行计算,而其他需要计算阶段的周期通信称为同步计算。我们选择三个em-并行计算,包括pi;Calcu-led,Mandelbrot集计算和矩阵Mul-tiplication。此外,我们选择两个同步计算包括康威的生命游戏和拉普拉斯方程求解器。其余部分提供每个的概述样品应用。

2.1、pi;计算:

有很多方法来近似计算数学常数。 一种“强力”方法是基于下列公式:

其中N是步数,h是单个的大小步。 我们将N设置为1000万,这是足够大的pi;的精确估计。 上述计算公式pi;只是一个大的独立项。 清单1显示pi;计算代码的顺序版本。

for(int i = 0; i lt;numSteps; i ){

double x =(i 0.5)* step;

sum = 4.0 /(1.0 x * x);

}

double pi = step * sum; //清单1:串行pi;计算代码

计算数学常数pi;是令人尴尬的并行应用,它提供了良好的起点学习并行编程技术。

for(int i=0; ilt;N; i ) {

for(int j=0; jlt;N; j ) {

double x=step * i - 2.0; // -2lt;=xlt;=2

double y=step * j - 2.0; // -2lt;=ylt;=2

complex c=(x, y), z=c;

int k = 0;

while (klt;CUTOFF amp;amp; abs(z)lt;2.0) {

}

z=c z * z;

k ;

} //清单2:串行Mandelbrot集计算代码

2.3矩阵乘法:

另一个令人尴尬的并行计算在该课程包括矩阵矩阵和矩阵向量乘法。 它是一个有用的科学内核,lelism不仅有助于提高代码性能,但是也允许在并行硬件上求解更大的矩阵。 El-通过乘法产生结果矩阵C的元素矩阵A和B如下:

清单3示出了用于乘以两个方阵A和B的伪代码。

2.4康威的生命之旅:

Conway的生命游戏是一个在2D网格上的单元格自动机如图1(b)所示,其中每个单元取值0(死)或1(活)。 作为模拟的一部分,更新一代的细胞根据预定义的标准进行。 在每个时间步,每个单元格的新值取决于它旧值和相邻小区的旧值。 清单图4示出了用于顺序版本的伪代码生命之游戏。 单元数组是主要的数据结构而辅助数组和保持单元元素的和在和相位之后相邻于单元(i,j)。 当时循环执行,存储在单元阵列中的单元值进化从一代到另一代。

清单4:Conway的生活游戏代码

2.5拉普拉斯方程求解器:

二维拉普拉斯方程是这样的方程在物理和数学的几个地方。 我们选择拉普拉斯方程作为本课程中的示例应用程序因为它是一个相对简单的数值问题 - 能够通过并行预处理来解决,语法。 拉普拉斯方程的离散版本a二维网格点可以表示为:

清单5显示了求解拉普拉斯等式的顺序代码,这里主要的数据结构是phi数组,其中存储方程的未知变量作为其元素。 一个迭代数值方法求解方程式就是最初设置我们必须解决的phi的所有元素一些值如零,然后重复更改单个phi[i] [j]元素为其邻居的平均值。 要是我们重复这个本地更新足够多次,phi ele-min收敛到方程的全局解。 这个称为松弛法。

清单5:串联拉普拉斯方程求解器

3:课程内容

本节讨论本课程的内容课程。 我们首先介绍课程syl-拉布斯。 之后是覆盖共享和分布式存储器并行编程技术。 截面图包括对高级话题的讨论,这是一部分的课程。

3.1课程大纲:

本小节介绍课程大纲的概述。讲座,实验室和作业的每周分发是如表1所示。课程的持续时间为18年周。在第六周有两个一小时测试(OHT这是一个2 1学分课程,这意味着两个小时每周讲座和一个实验室。有三个联系人每周实验室的时间。共享内存部分课程在第一个四周后进行了第六周的第一次OHT。类似地,分布式存储器部分的课程从星期五到十一年由第二个OHT在第十二周。最后一周,从十三到十七岁的先进主题,然后是第十八周的ESE。表2显示了我们的分级政策,分配给理论和实践部分的课程。每周实验室在一个典型的教学实验室进行包括四十个PC通过千兆以太网连接到其他。每个PC由英特尔组成R CoreTM i5-3470 CPU和4 GB的主内存。

3.2共享内存并行编程

这个子节概述共享内存并行程序,本课程涵盖了ming技术。 在这方面,课程审查了Java线程API作为可行的选择编写共享内存并发程序。 讲座cov作为本节的一部分,演示使用线程im令人尴尬的并行和同步在第2节前面介绍这些HPC工作负载,教师说明重要

并行概念包括问题分解/定位,负载均衡和同步。 两个主要分区技术,即块方式和循环方式,关于代码模式的清单6两个分布。

1 // Original for loop

for (int i=0; ilt;N; i )}

// me=current thread; P=total threads

// block-wise distribution of each thread

for (int i=me*N/P; ilt;(me 1)*N/P; i )

// cyclic distribution of each thread

for (int i=me; ilt;N; i =P)

清单6:使用块/循环分布的分解

Mandelbrot集:作为我们关于paralleliz-使用Java线程进行尴尬的并行计算在共享内存平台上,有一个讨论多核启用Mandelbrot Set代码。此对话框也演示了关键主题,包括分区和负载平衡 - 抗拒。我们最初尝试开发一个多线程Mandelbrot集计算代码基于除(x,y)平面分成垂直和水平的两半。在垂直划分中观察到较差的负载平衡如图3(a)所示。原因是核心0有更多通过划分(x,y)平面水平分成两半,我们注意到完美的负载平衡由于Mandelbrot集的对称性 - 这可以看出图3(b)。然而,如果执行水平分割在四个核心,然后我们还观察到负载均衡差因为核0和3具有总计算的小部分工作 - 这在图4中描述讲课,这个特定的问题可以通过使用循环来解决分布,这是很难实施和有时由于高速缓存的使用不良导致的效率低,而且具有优点在某些应用程序如Mandelbrot集计算。矩阵乘数:ParallelizingMatrix-MatrixandMatrix,接下来讨论了使用Java线程的向量计算。对于密集矩阵,可以实现良好的加速利用传统的垂直块方式分区。怎么样-我们注意到这种传统的分区策略

不适用于稀疏矩阵。此外,ces不必要地浪费内存,如果存储在二维数组格式由于大量的零。这解决了通过利用跟踪行的特殊数据结构,列,以及矩阵中每个非零元素的值。该信息可以以a的形式存储为三元组数组列表或链表。现在可以实现并行化通过划分三元组列表而不是原始稀疏列表Matrix Conway的生活游戏:作为我们对paralleliz-使用Java线程的同步计算,我们开始与康威的生命游戏。讨论开始对序列代码的评论 - 如清单4所示包括称为sum和update的两个计算阶段。在和相位中,代码计算所有邻居的和的单元[i] [j] - 这个和被存储在sums [i] [j]中。在里面更新阶段,则将新值写入单元[i] [j]。在我们第一次尝试,我们开发了一个使用的线程版本常规块方式分区策略来执行和并在多个线程中同时更新阶段。这个版本在代码中引入了一个竞争条件导致不可预测的行为。由于缺乏任何同步,并发线程之间的阳离子。描述了此问题在图5中,其中核心0正在写入边界黑色单元(in更新阶段),同时这样做,它也读取所有灰色单元(在和相)。一般来说,tical条纹由所有者线程写入并读取

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[137204],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。