首页 > 其他分享 >并行计算部分总结

并行计算部分总结

时间:2023-04-20 22:32:30浏览次数:34  
标签:总结 数据 数据类型 MPI 序列 并行计算 进程 部分 位移


1。计算机的峰值为主频x4。
2。计算机读取数组时,一次会读入一行,要最大限度的利用已读入的数据,减少频繁读写的次数。
3。多线程内存共享,多进程需要消息传递来交换变量。
4。利用管道在不同程序之间传递内容(可以是管道符|或mkfifo mypipe)
5。平均不同节点的计算量,尽量做到负载平衡。
6。数据分块是每块大小尽可能为cache的1/3。
7。MPI_CHAR 为一个字符,但不一定是一个字节。
8。在MPI_Init()之后再处理命令行参数。
9。MPI_Recive()出现在MPI_Send()前一定阻塞。
10。让计算和通信重叠进行,通常先等待receive的完成,然后做计算,再等待send的完成。
11。采用MPI_Test()检测传输是否结束时,需要再调用MPI_Wait()或MPI_Request_free(),指针释放后要置为空指针。
12。在分析复杂问题时,可简化为有限元分析。
13。分析并行程序要有并行的思想,看多个并发的结果,要考虑不同进程的速度对结果的影响。
14。尽量避免多个进程同时读写同一个变量,常用解决办法是加锁。
15。对于危险区域(可能涉及到多个进程的变量)要加上个障碍,然后看看去掉障碍后有什么影响。
16。保证等号左边的变量在任何进程是唯一的。
17。MPI无全局变量,各个变量分布在不同节点上,属于节点私有。因此在矩阵存储后,索引会发生变化。
18。ps auwx | grep myc可获得进程号 gdb myc pid(进程号)
19。c的程序可打印出进程号以便调试getpid() or getppid()。
20。在共享内存的并行机中所有的全局变量由不同的处理器共享,要避免对同一个变量的同一读写,加锁,栅栏。
21。栅栏能够使不同的进程同步,当一个进程到达栅栏时,它等待所有的相关进程到达栅栏再继续执行,避免了不同程序的赛跑比赛。
22。并行程序多为数据并行,程序中的循环是并行的出发点,有时候循环中的并行需要通过转换才比较明显,要有好的任务调度。
23。降低进程中依赖性的方法:采用局部变量,代码转换,采用特殊的调度技术。
24。数组间接索引时不能保证数组的元素不具有重复。
25。MPI编程子程序会被拷贝到每个处理器上。
26。定义数据类型可以使数据作为一个整体进行发送,减少通信开销。
27。数据在内存中存放时按块进行,内存线读取数据时也是读取一定宽度的数据。因此要保证数据存放在一个快中。
28。32位系统double的对界量是4。
29。定义结构体时,让长数据类型在前,短数据类型最好为4的倍数。
30。MPI_Aint一种数据类型,
31。两个数据等效是指这两个数据在内存中分布相同,上下界一样。
32。prev = (nprocs + myrank - 1) % nprocs; next = (myrank + 1) % nprocs;(myrank为当前进程号,nprocs为总进程数)
33。并行计算的效率达到100%甚至更高时的原因是减少了数据在硬盘个内存中多次读取,利用并行机的大内存节省时间。
34。SMP(shared memory processors)共享内存的并行机上并行的关键是减少同步、负载平衡。
35。数据类型的域表示数据被访问一次之后在内存中的偏移量,与数据类型的大小没有直接关系,可通过MPI_UB的偏移量来设定域指定数据的相对移动。

--------2010。06。08更新--------------

36。MPI_Sendrecv(dst,src)的dst是指本进程发送出去的目的地,src是指本进程接收数据的源地址。

37。发送连续的数据类型时,下个数据的起始为紧邻前一个数据末尾的后一个元素。
----------------------------------------------------------------
MPI
20。阻塞型函数需要等待指定操作的实际完成,或至少涉及的数据已被MPI系统安全地备份后才返回。MPI_Send调用返回时表明数据已被发出或被MPI系统复制,随后对发送缓冲区的修改不会改变所发送的数据。而MPI_Recv返回时表明数据接收已经完成。阻塞型函数的操作是非局部的,它的完成可能需要与其它进程进行通信。阻塞型函数使用不当容易引起死锁。非阻塞型函数的调用总是立即返回,而实际操作则由MPI系统在后台进行。用户必须随后调用其它函数来等待或查询操作的完成情况。在操作完成前对相关数据区的操作是不安全的,因为随时可能与正在后台进行的操作发生冲突。非阻塞型函数的调用是局部的,因为它的完成不需要与其它进程进行通信。可以实现计算与并行的重叠进行。
21。一个MPI数据类型由两个n元序列构成,n为正整数,第一个序列包含一组数据类型,称为类型序列Typesig = {type0,type1,……,typen}.第二个序列包含一组整数位移,称为位移序列Typedisp = {disp0,disp1,……,dispn}。位移序列中位移总是以字节为单位计算的。类型序列刻划了数据的类型特征,位移序列刻划了数据的位置特征。类型序列和位移序列的元素一一配对构成的序列Typemap = {(type0,disp0),(type1,disp1),……,(typen,dispn)}称为类型图。假设数据缓冲区的起始地址为buff,则由上述类型图所定义的数据类型包含n+1快数据,第i块的地址为buff+dispi,类型为typei。
22。位移序列中的位移不必是单调上升的,表明数据类型中的数据块不要求按顺序存放。位移也可以是负的,即数据类型中的数据可以位于缓冲区起始地址之前。
23。数据类型的大小指该数据类型中包含的数据长度(字节数),它等于类型序列中所有基本数据类型的大小之和。数据类型的大小就是消息传递时需要发送或接收的数据长度。
24。数据类型的下界定义为数据的最小位移。数据类型的上界定义为数据的最大位移加1,再加上个使得数据类型满足操作系统地址对界要求的修正量。数据类型的域定义为上界与下界之差。
25。一个数据类型的对界量定义如下:原始数据类型的对界量由编译系统决定,而复合数据类型的对界量则定义为它的所有基本数据类型的对界量的最大值。地址对界要求指一个数据类型在内存中的(字节)地址必须是它的对界量的整数倍。
26。MPI_Type_vector和MPI_Type_hvector唯一的区别是前者的stride以oldtype的域为单位,后者以字节为单位。前者的可移植性更强。
27。以字节作位移通常是不可移植的,用字节作位移单位时使用MPI_Aint,是相对于缓冲区的偏移量。
28。MPI_Type_indexed与MPI_Type_vector的区别在于每个数据块的长度可以不同,数据块间也可以不等距。
29。MPI_Type_struct与MPI_Type_hindexed的区别在于各数据块可以由不同的数据类型构成,处理不同类型时只能用struct。
30。数据类型使用之前要提交,用完要释放。中间类型可不用提交,同时一旦创建了下一个数据类型,即可将其依赖类型释放。
31。相邻两个数据块的位移差为两个数据块头到头的位移差。
32。MPI_Pack常用于少量的混乱的发送次数少的数据,数据在打包、拆包前position都需要初始化为零。
33。经过MPI_Pack打包后的数据发送时MPI_Send中的count为缓冲区的字节数。
34。MPI_Pack_size返回一个数据打包后的大小,可用来计算所需的缓冲区的长度。
35。聚合通信函数要求所有进程都调用。
36。MPI_Gather中recvcount为每个进程收到的数,而不是全体进程count求和。
37。MPI_Alltoall相当于将数据/进程进行依次转置。假设一个二维数组按行分块存储在各个进程中,则调用该函数可很容易地将它变成按列分块存储在各进程中。

标签:总结,数据,数据类型,MPI,序列,并行计算,进程,部分,位移
From: https://blog.51cto.com/u_16077014/6210839

相关文章

  • 【考后总结】4 月清北营模拟赛 2
    胡测7我怎么这么菜!我怎么这么菜!我怎么这么菜!T1命题从内到外考虑,设\(f(i,s1,s2)\)为当前位置\(i\),\([i+1,n]\)部分\(x\)取值为\(s2\),\([1,i]\)部分每个位置上是全称量词或存在量词取值为\(s1\)的情况下命题是否成立,这样DP时从\(i-1\)到\(i\)的转移就是第\(i......
  • 2023.4.20每日总结
    政策查询javapackagewangzhan;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;publicclassThesql{publicConnectionconnect;publicThesql()throwsException{Cla......
  • 4.20每日总结
    <%@pageimport="wangzhan.Pd_zhengce"%><%@pageimport="wangzhan.Thesql"%><%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtm......
  • 每日总结-23.4.20
    复制代码<!DOCTYPEhtml><html><head><metacharset="utf-8"/><title>首页</title><linkrel="stylesheet"href="css/page.css"/><scripttype="......
  • 4月19日总结
    android调用相机拍照以及调用相册Java代码publicclassMainActivityextendsAppCompatActivity{publicstaticfinalintTAKE_PHOTO=1;publicstaticfinalintCHOOSE_PHOTO=2;privateButtonmTakePhoto,mChoosePhoto;privateImageViewpicture;......
  • 编写你的第一个 Django 应用程序,第8部分
    本教程从教程7停止的地方开始。我们已经构建了我们的网络投票应用程序,现在将查看第三方软件包。Django的优势之一是丰富的第三方软件包生态系统。它们是社区开发的包,可用于快速改进应用程序的功能集。本教程将展示如何添加Django调试工具栏,一个常用的第三方包。近年来,Djang......
  • 每日总结2023-04-20
    今天完成了对于界面的初步优化,但对于基于通过dialog对话框的跳转的传值不理解,无法将主界面的信息通过dialog传递到另一个页面。 初步完成的页面: 剩余任务还有Android的网络获取定位输出详细地址。 ......
  • 4.20每日学习总结
    昨天完成了科技政策查询的修改和功能完善,今天打算继续与队友合作完成团队项目,遇到的问题是要做成理想的页面效果需要不断地尝试。 ......
  • 第三章部分例题(4)
    例3-9题目描述:用递归算法从n个人中选择k个人组成一个委员会的不同组合数。设计思路:1.从n个人中选一个,在从n-1个人中选k-1个。2.从n-1中选1个,从n-2中选k-2个。3.到k=0时结束。流程图: 代码实现:#include<iostream>usingnamespacestd;intmain(){intn,k;......
  • 蓝桥杯总结
    蓝桥杯总结基础篇1、数码管显示2、LED3、蜂鸣器4、继电器5、独立按键6、矩阵按键7、定时器8、PWM9、串口10、NE555定时器11、DS18B20(温度传感器)12、DS1302(RTC实时时钟)13、AT24C02(EEPROM)14、PCF8591(A/D转换)15、超声波测距提高篇1、LCD122322、1602点阵3、......