




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 云计算中的并行数据处理朱虎明2目录l背景背景l并行处理硬件系统并行处理硬件系统l并行处理软件系统并行处理软件系统l消息传递接口消息传递接口l大规模异构并行架构大规模异构并行架构31. 背景背景l物联网、云计算=?l麦肯锡:l“数据,已经渗透到当今每一个行业和业务职能领域,成为重要的生产因素。人们对于海量数据的挖掘和运用,预示着新一波生产率增长和消费者盈余浪潮的到来。” 4BigDatalMay 2011,麦肯锡 ,Big Data:The next generation frontier for innovation, competition and productivity l2012年
2、3月,美国奥巴马政府宣布投资2亿美元启动“大数据研究和发展计划”, l2012年12月24日 人民日报发表当“大数据”来敲门 5国内l2012年9月计算机学会通讯刊登了李国杰院士等撰写的学术界谈大数据的专题文章 l人民日报发表当“大数据”来敲门等相关文章 l第一届中国云计算大会 ,2009年5月l主办单位:中国电子学会l第五届,指导单位:工业和信息化部、国家发展和改革委员会、科学技术部 6领域1.搜索引擎2.电子商务 (淘宝网,)3.生物4.天气预报5.核物理6. 3D动漫7.图像处理7遥感大数据l“十二五”期间的目标100颗卫星在轨稳定运行l4月26日,我国高分辨率对地观测系统首发星“高分一
3、号”成功发射 l2012年,我国首颗高分辨率测绘卫星“资源三号”在太原卫星发射 ;每天接收、处理和存储的数据达到1790GB lNASA在2011 年10 月1 日至2012年9 月30 日期间统计lEOSDIS 平均每日数据存档增长为6.4 TB/d, 终端用户平均每日分发数据量为17.1TB/d, l总存档数据量达7.4 PB.8遥感的数据处理平台l加拿大PCI Geomatica l美国的ENVI l美国ERDAS公司的ERDAS IMAGING l法国的像素工厂(Pixel Factory) l中国测绘科学研究院研制的PixelGrid 9并行遥感数据分析lESRI provides
4、several cloud-based GIS solutions: ArcGIS Server on Amazon EC2, l云检索 l 云存储l 云订购 l云服务l 云发布10IBM超级计算机再次战胜人类 大数据分析l由IBM和美国德克萨斯大学联合研制的超级计算机“沃森”(Watson)近日在美国最受欢迎的智力竞猜电视节目危险边缘中击败该节目历史上两位最成功的选手肯-詹宁斯和布拉德-鲁特,成为危险边缘节目新的王者。lWatson由90台IBM Power 750服务器和lDeepQA分析软件组成,(2880 cores and 16 Terabytes of memory )11技术分析
5、lWatson通过摄像头拍下屏幕上的文字,然后进行光学识别,得到以文字而不是图像形式存储的题目文本:l信息检索能力+信息的提取以及分析+自动推理+Natural Language Processing lwatson需要一个语音合成引擎将这个答案的文本转换成语音并播放出来就可以了。 12大数据与云计算 l以“大数据大带宽推动云计算应用与创新”为主题的第五届中国云计算大会 l在以客户为中心,来构建大网络和大数据,最终以云计算服务模式来交付,以达到最终的愿景:即正确的时间、精确的位置、适当的方法和终端,让客户得到所需的服务。” l采集l存储l分析13大数据与云计算14目录l背景背景l并行处理硬件系
6、统并行处理硬件系统l并行处理软件系统并行处理软件系统l消息传递接口消息传递接口l大规模异构并行架构大规模异构并行架构15 世界Top50016IBM Sequoia(红杉) compute nodes :32*16*2*96=9830417 国内Top10018 天河一号 l103个机柜、占地面积近千平方米、总重量155吨 ,每年电费可高达1800万元 l计算结点B(Intel XeonEP+NVIDIA GPU):7168个,含14336个CPU、7168个GPU;l点点通信带宽40Gbps ;延迟1.2us 总容量为1PB;19国产三台千万亿次机 名称名称完成时间完成时间研制单位研制单位主
7、要特点主要特点天河1号2010年10月国防科大、浪潮公司等采用异构混合体系结构,部分采用国产飞腾处理器,峰值性能每秒4700万亿次,实测Linpack性能2507万亿次,在2010年11月中发布的世界高性能计算机TOP500榜中排在第一位。曙光6000(星云)2010年5月中科院计算所、曙光公司等采用混合体系结构,系统峰值性能每秒3000万亿次,Linpack性能为1.27千万亿次每少,功耗2600千瓦,在2010年6月份世界TOP500中排名第二。下一步将采用国产处理器龙芯3B。神威蓝光神威蓝光2010年年底年年底江南计算所江南计算所全部采用自主的多核高性能处理器实现,在我们全部采用自主的多
8、核高性能处理器实现,在我们国家高性能计算机发展史上具有里程碑的意义,国家高性能计算机发展史上具有里程碑的意义,同时探索万万亿次体系结构和高性能技术。同时探索万万亿次体系结构和高性能技术。20国家超算中心l上海超级计算中心l天津超级计算中心 (投资6亿元 )l深圳超级计算中心(总投资8亿元) l长沙超级计算中心( 总投资7.2亿元) l济南超级计算中心 (投资6亿元 )l广州超级计算中心 (投资16亿元 )l 。21高校高性能计算平台建设l南京大学高性能计算机系统南京大学高性能计算机系统 l花费二千万元建成的。 在“2009年第七,在全国高校系统“科学计算/教育”领域中排名第一。 南京微结构国家
9、实验室 l吉林大学高性能计算中心吉林大学高性能计算中心 1300万元万元 , 40万亿次,在2010年6月TOP500 第239位,居全国高校首位。 l清华大学清华大学 3千万元,100T , CPU计算峰值可达104万亿, GPGPU部分的计算峰值可达68万亿次/秒,百万亿次超算系统在9个机柜中即可实现 22地方政府l北京亦庄的北京云计算基地 l上海云海计划 l成都云计算中心 l无锡城市云计算中心 l鄂尔多斯绿色云计算数据中心 23并行计算基础并行计算基础-计算机计算机体系结构体系结构并行计算机l 共享存储的对称多处理器系统 SMP l 分布存储的大规模并行处理系统(MPP) l 计算机集群
10、系统(Cluster) l集群系统优点: 可靠性、扩展性和性价比 24图 世界500强计算机体系结构发展趋势图 集群系统的发展集群系统的发展 25系统总体架构2627集群系统集群系统 由节点和集群互连网络组成,由节点和集群互连网络组成,再配置上全局软件,是一种松散耦再配置上全局软件,是一种松散耦合的多机系统合的多机系统.通过各节点的并行运通过各节点的并行运行,可以实现高性能的并行计算行,可以实现高性能的并行计算. 节点节点:机架式或者刀片式机架式或者刀片式 网络网络:InfiniBand和千兆以太网和千兆以太网. 28性能评测性能评测29集群性能评测集群性能评测理论峰值主频每个时钟周期浮点运算
11、的次数CPU数HPL(High Performance Linpack) 3223()/32NNt 30Green500 &Graph500 lGreen500也有一个衡量指标,即每瓦功耗所获取的运算性能(MFLOPS/W)。lGraph500 benchmark; Data intensive computing31软件环境组成操作系统作业调度系统管理和监控软件并行开发软件客户端软件32High performance Linpack l1、操作系统 LINUXl2、并行软件MPICH2 l3、数学库 Gotoblas,BLAS(Basic Linear Algebra Subpro
12、grams) l4、 HPL 3334并行计算平台的使用并行计算平台的使用l申请帐号l熟悉软件 :putty 和winscpl熟悉常用Linux命令l掌握MPI函数lLinuxLinux环境下环境下vivi编辑器编写程序 或者本地编写后上传程序 lLinux编译链接运行35lCPU发展规律:l“摩尔定律” :由于物理定律的限制,采用提高CPU制程和主频的办法遇到了工艺上的壁垒,暂时无法突破lGPU发展规律:l1993年开始,GPU的性能以每年2.8倍的速度增长峰值发展趋势带宽发展趋势36lCPU和GPU的联系l都是计算机体系结构中的重要部分l超大规模集成电路元件l能够完成浮点运算功能lGPU的
13、设计目标与CPU是不同的:lCPU的微架构是按照兼顾“指令并行执行”和“数据并行运算”的思路而设计。lCPU的大部分晶体管主要用于构建控制电路和CachelCPU的5%是ALU,控制电路设计更加复杂lCPU的内存延迟是GPU的1/10lGPU其实是由硬件实现的一组图形函数的集合。lGPU控制电路相对简单,而且对Cache的需求小,所以可以把大部分的晶体管用于计算单元lGPGPU的40%是ALUlGPGPU的内存带宽是CPU的10倍37GPU(graphics processing unit )lNVIDIA公司在1999年发布GeForce256图形处理芯片时首先提出GPU的概念。 l1999
14、年,T&L(Transform and Lighting,多边形转换与光源处理)l 2000年 ,微软发布了DirectX 8.0,像素渲染 (Pixel Shader)与顶点渲染 (VertexShader),使GPU真正成为了可编程的处理器, l 38GPU对对3D图形的处理图形的处理图形的生成渲染图形的生成渲染 l1、顶点生成、顶点生成l2、顶点处理、顶点处理l3、光栅化计算、光栅化计算 l4、纹理帖图、纹理帖图 l5、像素处理、像素处理l6、最终输出、最终输出39RADEON X1900 Architecture 40 统一渲染架构和几何着色 l2006,微软发布了Direct
15、X 10.0,统一渲染架构和几何着色 。41l4个Graphics Processing Clusters (GPC )l每个GPC由2SMX组成l每个SMX当中包含192CUDA Core核心 l共拥有1536个CUDA Core l3.09 TFLOPs 42C2050 GPGPUK20 应用领域加速卡高性能运算服务器 处理器内核频率1.15 GHz1.5GHz处理器核心数目4482496 单精度浮点峰值1.03 TFlops3.52 TFlops双精度浮点峰值515Gflops1.17 TFlops专用内存3GB5GB内存位宽384位 GDDR5320位 GDDR5内存带宽144GB/s
16、208GB/s功耗238W225W43l2006年7月24日,AMD购并ATI, l2011,7970,7950 lHD 7970 具有2048个流处理器 l(单精度浮点 3.79TFlops ,l双947GFlops ),lTahiti拥有32个GCN阵列,l每个GCN阵列里面包括4个SIMD单元,l每个SIMD包括16个1D标量运算单元 44Future-融合lCPU向多核化,GPU向众核化发展lGPU-CPU融合lIntel -Sandy Bridge lAMD-Accelerated Processing Unit (APU) lNvidia-Project Denver 45GPU是
17、一种高度并行的,多线程的,众核处理器; 非常适合处理计算密集型的数据并行任务;Sandy Bridge:每颗CPU核心、高速缓存段、核显和内核管理中心等可以互相交换数据GPU普适性46Intel HD Graphics lHD Graphics (6 execution units) lHD Graphics 2500 (6 ) lHD Graphics 4000 (16) lHaswelllHD Graphics (GT1, 6) lHD Graphics 4200, 4 XXX, (GT2, 20) lHD Graphics 5000, Iris Graphics 5100 (GT3, 4
18、0lIris Pro Graphics 5200 47Accelerated Processing UnitlAPU ,CPU通过北桥访问内存;采用Fusion Compute Link来将北桥、GPU、IO连接在一起,l同时在GPU和北桥之间搭建Radeon Memory Bus,目的是让GPU与内存进行高速数据交换,l从而提升3D性能与并行计算性能。 48GPU开发软件lDirectX(MS) OpenGLlCUDA (2007年6月, NVIDIA)lOpen CLlDirect Compute,C+AMPlMatlablOpenACC lPortlandGroup(PGI),PGI A
19、ccelerator 49CUDAl2006年11月与G80一同诞生l2007年6月,1.0版与Teslal 2013年5 ,CUDA 5.5 50Compute Unified Device Architecture51Open Computing Languagel苹果发起,Khronos开发l2008年6月苹果公司提出lAMD, Intel, ARM, NVIDIA, Qualcomm, Nokia, IBM, Samsung, TI等lMicrosoft是例外l适合CPU、GPU、CELL、DSP架构lAMD lAMD Accelerated Parallel Processing S
20、DK 2.5,全面支持OpenCL 1.1lNVIDIAl支持OpenCL52开发工具lintel 2012年,推出SDK for OpenCL Applications http:/ AMD 2012年,推出了CodeXL 1.0 beta 帮助开发者更好利用CPU, GPU和APU计算性能的综合开发工具套装,具有强大的GPU调试、CPU和GPU代码分析、及静态的OpenCL kernel性能分析等能力。 53OpenACC l英伟达、Cray、Portland Group (PGI) 以及 CAPS lOpenACC: Directives for GPUs ,OpenMPlvoid sa
21、xpy_parallel(int n, float a, float *x, float *restrict y) l #pragma acc kernels lfor (int i = 0; i n; +i) lyi = a*xi + yi;l 54图形图形APIAPI DirectX OpenGL1.0 September 30, 1995 January 1992.2.0 1996 September 7, 2004 3.0 September 15, 1996 July 11, 2008 4.0 Never launched March 11, 20105.0 August 4, 19
22、97 6.0 August 7, 1998 7.0 September 22, 1999 8.0 November 12, 2000 9.0 December 19, 2002 10.0 November 30, 2006 11 october 22, 2009 55DirectComputel2009年10月22日,微软公司正式发布Windows 7,DirectX 11集成在Windows 7 中同步登场 lDirectCompute是Microsoft DirectX的一部分。 DirectX 10: DirectCompute 4.0 DirectX 10.1:DirectComput
23、e 4.1 DirectX 11: DirectCompute 5.0 。l2011,6月16,AMD Fusion开发者峰会上,微软发布了C+ AMP,(Accelerated Massive Parallelism ) 56C+AMPl微软于11年6月推出的一个异构并行编程编程框架,Visual Studio 11开发者预览版起支持。 l六个特征 l C+ 而不是 C l主流 l最小的改动 l可移植的 l通用且不会过时 l开放 57MIC-Xeon Phi l入门级入门级3100l高端高端5100l顶级顶级7100 lXeon Phi 5110P拥有60个核心,每一个核心l都有着4个线程,
24、1.05GHz,2级缓存为l30MB,最大支持8GB的GDDR5l内存寻址,内存带宽高达320Gbps,双精度l浮点计算能力能够达到1TFLOPSl$2,649 58Xeon Phil开发代号为KnightsCorner lPCI Express lVector Processing Unit (VPU). lOS由Linux修改, uOS Micro Operating System l包括C、C+和Fortran l支持OpenMP、pThread、MPI 59计算的发展l1997年,top 1,美国桑迪亚国家实验室的“ASCI 红”,是世界上首个突破每秒一万亿次(TeraFLOPS)浮点
25、运算的系统,它采用了9298个英特尔奔腾 Pro处理器,成本约每一万亿次55,000,000美元。,l2011年,每一万亿次(TeraFLOPS)的拥有成本降到了低于1000美元。高性能计算确确实实已经为所有人触手可及。 60云终端 lImagination Technologies ,PowerVR的的SGX系列系列 (PowerVR G6230/6430, 100GFLOPS l高通(高通(QUALCOMM) Adreno320, OpenCL 1.2 l博通(博通(Broadcom)BCM系列系列lNVIDIA TegralARM的的Mali图形处理单元图形处理单元。l Mali-T62
26、8核心数量4-8个, OpenCL 61并行处理软件系统并行处理软件系统l基础知识lOpenMPl消息传递接口消息传递接口lMatlablOpenCL62负载均衡问题负载均衡问题 63负载均衡问题负载均衡问题 64负载均衡问题经典算法负载均衡问题经典算法 65负载均衡问题负载均衡问题 66性能分析性能分析67Amdahl定律定律68Gustafson定律定律 69加速比性能定律lSun & Nis Law: Base on Memory Boundingl充分利用存储空间等计算资源,尽量增大问题规模以产生更好/更精确的解。是Amdahl定律和Gustafson定律的推广。l公式推导:
27、设单机上的存储器容量为M,其工作负载W=fW+(1-f)W 当并行系统有p个结点时,存储容量扩大了pM,用G(p)表示系统的存储容量增加p倍时工作负载的增加量。则存储容量扩大后的工作负载为W=fW+(1-f)G(p)W,所以,存储受限的加速为 特别地: 当G(p)=1时, 为Amdahl定律; 当G(p)=p时, 为Gustafson定律;ppGffpGffpWpGffWWpGffWSp/ )()1 ()()1 (/)()1 ()()1 ( pffSSpp/ )1 (1 ) 1( pfpSSpp70Open Multiprocessing (OpenMP) l支持C、C+ 和 Fortranl
28、编译指导语句l而GCC 4.4 支持OpenMP 3 标准lMicrosoft Visual Studio 支持 l 适用于共享存储架构 71Fork-Join执行模式l在开始执行的时候,只有主线程的运行线程存在l主线程在运行过程中,当遇到需要进行并行计算的时候,派生出(Fork,创建新线程或者唤醒已有线程)线程来执行并行任务l在并行执行的时候,主线程和派生线程共同工作l在并行代码结束执行后,派生线程退出或者挂起,不再工作,控制流程回到单独的主线程中(Join,即多线程的会和)。 72并行Hello worldl#include l#include lint main(int argc, ch
29、ar *argv)l l int nthreads, thread_id; l printf(I am the main thread.n); l #pragma omp parallel private(nthreads, thread_id) l l nthreads = omp_get_num_threads(); l thread_id = omp_get_thread_num(); l printf(Hello. I am thread %d out of a team of %dn, thread_id, nthreads); l lprintf(Here I am, back t
30、o the main thread.n); l return 0;l 73几点说明l#pragma omp parallel,l创建并行区:并行区里每个线程都会去执行并行区中的代码。l控制并行区中线程的数量 l并行区内线程数=系统中核的个数。lset OMP_NUM_THREADS=4 lgcc : gcc -fopenmp hello.c -o hello 74循环并行化l循环并行化是是把一个循环分成多部分在不同的进程上执行。#pragma omp parallel for for(int i=0; in; i+) zi = xi+yi;l工作原理:将for循环中的工作分配到一个线程组中,线
31、程组中的每一个线程将完成循环中的一部分内容;75消息传递接口( MPI ) lMPI库函数 MPI目前支持C、C+和FORTRAN语。l一个MPI并行程序由一组运行在相同或不同计算机上的进程构成。l进程组(process group)l进程号(rank)76消息传递接口( MPI ) 下面给出基于C语言的并行程序框架#include 并行库int main(int argc , char *argv ) 使用MPI_Init函数初始化并行计算环境; 使用MPI_Comm_size函数返回指定通信器中进程的数目; 使用MPI_Comm_rank函数返回指定通信器中本进程的进程号; 并行程序代码和
32、进程通信代码; 使用MPI_Finalize退出并行计算环境,并行程序结束; Return 0;77并行Hello world l#include mpi.hlint main( argc, argv )lint argc; char *argv;ll int rank, size;l MPI_Init( &argc, &argv );l MPI_Comm_size( MPI_COMM_WORLD, &size );l MPI_Comm_rank( MPI_COMM_WORLD, &rank );l printf( Hello world from proces
33、s %d of %dn, rank, size );l MPI_Finalize();l return 0;lHello world from process 0 of 3Hello world from process 1 of 3Hello world from process 2 of 378MPI程序的的编译与运行lmpif77 o hello hello.f 或lmpicc o hello hello.cl生成hello的可执行代码.lmpirun np 4 hellol4 指定np的实参,表示进程数,由用户指定.lhello 要运行的MPI并行程序.%小写o%np:The numb
34、er of process.79通信模式通信模式点对点通信(point to point communication)阻塞型:MPI_Send和MPI_Recv。非阻塞型:MPI_Isend和MPI_Irecv。聚合通信(collective communication)一对多通信: 广播MPI_Bcast多对一通信:数据收集MPI_Gather, 多对多通信:全交换MPI_Alltoall80发送消息语法 lMPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) l将缓冲区
35、中的count个datatype数据类型的数据发送到目的进程dest,本次发送的消息标志是tag,使用这一标志就可以把本次发送的消息和本进程向同一日的进程发送的其它消息区别开来;MPI_SEND操作指定的发送缓冲区是由count个类型为datatype的连续数据空间组成 81接收消息语法lMPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,MPI_Commn comm., MPI_Status *status)l从指定的进程source接收消息,其它参数意义与发送操作类似;应该注意的是,接收到消息的
36、长度必须小于或等于接收缓冲区的长度,这是因为如果接收到的数据过大,而MPI没有截断机制,接收缓冲区会发生溢出错误。 82/* first.c */l#include “mpi.h”/*MPI的头函数,lint main(int argc, char * argv )llint rank, size, tag=333;lint buf20lMPI_Status status lMPI_Init( &argc, &argv );/*MPI的初始化函数*/lMPI_Comm_rank( MPI_COMM_WORLD, &rank );/*该进程的编号*/lMPI_Comm_s
37、ize( MPI_COMM_WORLD, &size );/*总的进程数目*/lif (rank=0) l MPI_Send( buf, 20, MPI_Int, 1, tag, MPI_COMM_WORLD);lif (rank=1) l MPI_Recv( buf, 20, MPI_Int, 0, tag, MPI_COMM_WORLD, &status);lMPI_Finalize();/*MPI的结束函数*/lreturn 0;l 83聚合通信 (Collective Communication ) l从一个进程到本组内的所有l进程的播送 broadcastl从本组所有
38、进程收集数据到l一个进程gatherl从一个进程分散数据到l本组内的所有进程sactter84852021年11月MPI并行程序设计85/217数据聚集ReduceAllreduceReduce-scatterScanMPI 预定义全局数据运算符:MPI_MAX / MPI_MIN; MPI_SUM 求和 MPI_PROD 求积MPI_LAND 逻辑与 MPI_LOR 逻辑或 MPI_MAXLOC/MPI_MINLOC 最大/小值求下相应位置 868788int p, myrank; float buf;MPI_Comm comm;MPI_Init(&argc, &argv);
39、/*得进程编号得进程编号*/MPI_Comm_rank(comm, &my_rank);/* 得进程总数得进程总数 */MPI_Comm_size(comm, &p);if(myrank=0) buf = 1.0;MPI_Bcast(&buf,1,MPI_FLOAT,0, comm);Broadcast - 数据广播databuf.MPI_Bcast();.data.MPI_Bcast();.data.MPI_Bcast();.Process 0myrank = 0Process 1myrank = 1Process p-1myrank = p-1int MPI_Bca
40、stint MPI_Bcast ( ( void void * *buffer,/buffer,/* *发送发送/ /接收接收bufbuf* */ / int count, int count,/ /* *元素个数元素个数* */ / MPI_Datatype datatype MPI_Datatype datatype, , int root,int root,/ /* *指定根进程指定根进程* */ / MPI_Comm comm MPI_Comm comm) ) 根进程既是发送缓冲区也是接收缓冲区根进程既是发送缓冲区也是接收缓冲区89Gather - 数据收集int p, myrank;
41、 float data10;/*分布变量分布变量*/float* buf;MPI_Comm comm;MPI_Init(&argc, &argv);/*得进程编号得进程编号*/MPI_Comm_rank(comm,&my_rank);/* 得进程总数得进程总数 */MPI_Comm_size(comm, &p);if(myrank=0)buf=(float*)malloc(p*10*sizeof(float);/*开辟接收缓冲区开辟接收缓冲区*/MPI_Gather(data,10,MPI_FLOAT,buf,10,MPI_FlOAT,0,comm);data.
42、MPI_Gather();.data.MPI_Gather();.data.MPI_Gather();.Process 0myrank = 0Process 1myrank = 1Process p-1myrank = p-1根进程接收其他进程来的消息根进程接收其他进程来的消息( (包括根进程包括根进程), ),按每在进程按每在进程在通信组中的编号在通信组中的编号依次联接在一依次联接在一下下, ,存放在根进程的接收缓冲区中存放在根进程的接收缓冲区中. .int MPI_Gather ( void *sendbuf, int sendcnt, MPI_Datatype sendtype, voi
43、d *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm ) buf90Scatter - 数据分散int p, myrank; float data10;float* buf;MPI_Comm comm;MPI_Init(&argc, &argv);/*得进程编号得进程编号*/MPI_Comm_rank(comm,&my_rank);/* 得进程总数得进程总数 */MPI_Comm_size(comm, &p);if(myrank=0)buf = (float*)mall
44、oc(p*10*sizeof(float);/*开辟开辟发送发送缓冲区缓冲区*/MPI_Scatter(buf,10,MPI_FLOAT,data,10,MPI_FlOAT,0,comm);data.MPI_Scatter();.data.MPI_ Scatter();.data.MPI_ Scatter();.Process 0myrank = 0Process 1myrank = 1Process p-1myrank = p-1根进程中存储了根进程中存储了p p个消息个消息, ,第第i i个消息将传给第个消息将传给第i i个进程个进程. .int MPI_Scatter ( void *s
45、endbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm ) buf91Reduce - 全局数据运算int p, myrank; float data = 0.0;float buf;MPI_Comm comm;MPI_Init(&argc, &argv);/*得进程编号得进程编号*/MPI_Comm_rank(comm,&my_rank);/*各进程对各进程对data进行不同的操作进行不同
46、的操作*/data = data + myrank * 10;/*将各进程中的将各进程中的data数相加并存入根进数相加并存入根进程的程的buf中中 */MPI_Reduce(&data,&buf,1,MPI_FLOAT,MPI_SUM,0,comm);data.MPI_Scatter();.data.MPI_ Scatter();.data.MPI_ Scatter();.Process 0myrank = 0Process 1myrank = 1Process p-1myrank = p-1对组中所有进程的发送缓冲区中的数据用OP参数指定的操作进行运算,并将结果送回到根进程
47、的接收缓冲区中. int MPI_Reduce ( void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm )buf+92类型函数功能数据移动MPI_Bcast一到多,数据广播MPI_Gather多到一,数据汇合MPI_GathervMPI_Gather的一般形式MPI_AllgatherMPI_Gather的一般形式MPI_AllgathervMPI_Allgather的一般形式MPI_Scatter一到多,数据分散MPI_ScattervMPI_Sc
48、atter的一般形式MPI_Alltoall多到多,置换数据(全互换)MPI_AlltoallvMPI_Alltoall的一般形式数据聚集MPI_Reduce多到一,数据归约MPI_Allreduce上者的一般形式,结果在所有进程MPI_Reduce_scatter结果scatter到各个进程MPI_Scan前缀操作同步MPI_Barrier同步操作MPI集合通信函数All:表示结果到所有所有进程.V:Variety,被操作的数据对象和操作更为灵活.%93避免死锁deadlockl发送和接收是成对出现的,忽略这个原则 很可能会产生死锁总会死锁的通信调用次序总会死锁的通信调用次序94安全的通信调
49、用次序安全的通信调用次序95实例分析:求PI96串行代码h=1.0/(double)n;sum=0.0;for (i=1; i=n; i+) x=h*(double)i 0.5);sum += f(x);pi=h*sum;double f(double a)return (4.0/(1.0+a*a);97并行代码h=1.0/(double)n;sum=0.0;for (i=myid+1; i=n; i+=numprocs) x=h*(double)i 0.5);sum += f(x);mypi=h*sum; MPI_Reduce(&mypi, &pi, 1, MPI_DOUBL
50、E, MPI_SUM, 0, MPI_COMM_WORLD);double f(double a)return (4.0/(1.0+a*a);98cpi.c#include mpi.h#include #include double f( double );double f( double a ) return (4.0 / (1.0 + a*a);99cpi.cint main( int argc, char *argv) int done = 0, n, myid, numprocs, i; double PI25DT = 3.141592653589793238462643; doubl
51、e mypi, pi, h, sum, x; double startwtime = 0.0, endwtime; int namelen; char processor_nameMPI_MAX_PROCESSOR_NAME; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); MPI_Get_processor_name(processor_name,&namelen); fprintf(stderr,P
52、rocess %d on %sn, myid, processor_name);100cpi.c n = 100; while (!done) if (myid = 0) startwtime = MPI_Wtime(); MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); 101cpi.c if (n = 0) done = 1; else h = 1.0 / (double) n; sum = 0.0; for (i = myid + 1; i = n; i += numprocs) x = h * (double)i - 0.5); sum
53、 += f(x); mypi = h * sum; 1022021年11月MPI并行程序设计cpi.c MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (myid = 0) printf(pi is approximately %.16f, Error is %.16fn, pi, fabs(pi - PI25DT); endwtime = MPI_Wtime(); printf(wall clock time = %fn, endwtime-startwtime); MPI_Final
54、ize(); return 0;103CUDA架构发展 104CUDA逻辑结构及内存结构l在CUDA的程序架构中,程序执行区域分为两个部分:Host 与Device。lHost 指在CPU上执行的部分lDevice指在GPU 上执行的部分,这部分又称为“kernel”l通常,Host 程序会将需要并行计算的数据复制到 GPU 的显存,再由 GPU 执行 Device程序,完成后再由Host 程序将结果从GPU 显存中取回105示例,cuda.cu l#include /* 运行在运行在GPU端的程序端的程序 */_global_ void vectorADD(int* a, int* b, i
55、nt* c) int index = threadIdx.x;/获得当前线程的序号获得当前线程的序号 if(index blockDim.x) c = a + b;int main () /* 定义定义10个个GPU运算线程运算线程 */ int N = 10; /* 本地开辟三个数组存放我们要计算的内容本地开辟三个数组存放我们要计算的内容 */ int* h_a = (int*) malloc (N * sizeof(int); / *h_b ,int* h_c ; /* 初始化数组初始化数组A, B和和C */ for(int i=0; iN; i+) h_a = i; h_b = i;
56、h_c = 0; 106示例,cuda.cul int size = N * sizeof(int); /* 计算计算10个个int型需要的空间型需要的空间 */ /* 在在GPU上分配同样大小的三个数组上分配同样大小的三个数组 */ int* d_a; int* d_b; int* d_c; cudaMalloc(void*)&d_a, size); / d_b, d_c /* 把本地的数组拷贝进把本地的数组拷贝进GPU内存内存 */ cudaMemcpy(d_a, h_a, size, cudaMemcpyHostToDevice); d_bh_b; d_c h_c /* 定义一个
57、定义一个GPU运算块运算块 由由 10个运算线程组成个运算线程组成 */ dim3 DimBlock = N; /* 通知通知GPU用用10个线程执行函数个线程执行函数vectorADD */ vectorADD(d_a, d_b, d_c); /* 将将GPU运算完的结果复制回本地运算完的结果复制回本地 */ cudaMemcpy(h_c, d_c, size, cudaMemcpyDeviceToHost); /* 释放释放GPU的内存的内存 */ cudaFree(d_a); /d_b, d_c; /* 验证计算结果验证计算结果 */ 107数据并行与任务并行l数据并行是所有线程中执行的
58、内核(kernel)是相同的,只是处理的数据会根据内核代码分支等原因而不同。l任务并行则在每个线程中执行不同的代码 108OpenCLl开放计算语言lOpen Computing Languagel苹果发起,Khronos开发l2008年6月苹果公司提出lAMD, Intel, ARM, NVIDIA, Qualcomm, Nokia, IBM, Samsung, TI等lMicrosoft是例外l适合CPU、GPU、CELL、DSP、ARM、FPGA、Altera109OpenCLl由一个并行计算API和一种针对此类计算的编程语言组成lC99编程语言并行扩展子集;l适用于各种类型异构处理器的
59、坐标数据和基于任务并行计算API;l基于IEEE 754标准的数字条件;l与OpenGL、OpenGL ES和其他图形类API高效互通l提供了基于任务分割和数据分割的并行计算机制lKhronos Groupl/opencl/110OpenCL四种模型 lOpenCL allows parallel computing on heterogeneous deviceslCPUs, GPUs, Cell, DSPs, etc)lProvides portable accelerated codel平台模型(Platform Model)l执行模型(Exec
60、ution Model)l内存模型(Memory Model) l编程模型(Programming Model) 111Platform ModellEach OpenCL implementation (i.e. an OpenCL library from AMD, NVIDIA, etc.) defines platforms which enable the host system to interact with OpenCL-capable deviceslCurrently each vendor supplies only a single platform per implementationlOpenCL uses an “Installable Client Driver” modellThe goal is to allow platforms from different vendors to co-existlCurrent systems device
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 急性腹膜炎病人的护理
- 2025年锥虫焦虫病防治药合作协议书
- 尿路感染的治疗与护理
- 护理学新生儿黄疸
- 2025年电网系统电力电缆项目合作计划书
- 2025年中小学生安全教育日活动方案
- 陕西航空职业技术学院《生涯辅导》2023-2024学年第二学期期末试卷
- 陕西铁路工程职业技术学院《安全工程专业英语》2023-2024学年第二学期期末试卷
- 随州市广水市2025届五年级数学第二学期期末调研模拟试题含答案
- 2025年交联电力电缆项目合作计划书
- 2023年福建省中学生生物学初赛试题-(附答案解析)
- 南开大学商学院管理综合历年考研真题汇编(含部分答案)
- 胸椎结核护理查房课件
- 学校三公经费管理制度
- 新外研版高中英语选择性必修一Unit5 developing ideas课件
- 2024年中考语文备考之基础专项语言运用:拟写新闻标题(方法+真题解析)
- 星环大数据方案介绍课件
- 语言表达与运用 试卷(含答案解析)-1
- 牙齿发育异常 畸形根面沟
- 2023年全国职业院校技能大赛赛项承办校申报书
- 苏教版二年级数学下册第二三单元测试卷含答案
评论
0/150
提交评论