MPJ Express 内容总结

2023-11-23 15:50
文章标签 总结 内容 express mpj

本文主要是介绍MPJ Express 内容总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Towords Scalable Java HPC with Hybrid and Native Communication Devices in MPJ Express 内容总结

2.相关工作

本文关注:

clipboard.png

  • 当前的一些实现

clipboard.png

  • Open MPI Java Bindings 只能使用Open MPI 座位底层通信库。

  • 随着处理器核数的增加,需要混合并行计算。

  • Hybrid MPI 使用单线程MPI进程。

  • 在Hybrid MPI中,单节点的多核处理器通过共享堆内存进行通信。因此需要安装一个自定义堆内存管理器,用来把共享堆内存的分配给MPI进程,这些进程可以相互访问其内存。

clipboard.png

  • 在Java领域提出MPJ Express。

clipboard.png

3.MPJ Express 架构

clipboard.png

4.MPJ Express中的缓冲层

  • 利用池机制。

clipboard.png

  • API的使用

    • 在MPJ Express 高层,点对点通信中:

    clipboard.png

  • 举例:发送一个int型数组的10个元素

    clipboard.png

  • Java:

    • JDK1.4引入NIO,在NIO中,JVM操作一系列buffer类来对文件和socket进行读写。ByteBuffer类实现了一个字节数组,但存储在JVM堆内存外部(所谓的直接字节缓冲区)。
      所以,当用户想传一个int型数组的10个元素时,可将其复制到一个ByteBuffer中,类似的,如果想传递一个派生数据类型,则可以把派生数据类型中的每个基本数据类型打包,存到ByteBuffer中,这样软件的高层个底层就可以通过缓冲层提供的的功能对基本数据类型和高级数据类型进行通信。对于专用网络,NIO可以直接读取直接字节缓冲区,这样可以消除使用JNI带来的额外复制。

clipboard.png

  • 缓冲策略利用池机制来降低通信开销————减少通信buffer的创建时间。

4.1 Open MPI Java 和 FastMPJ 中的缓冲层

通信层中是否有缓冲对Java消息库的性能影响极大

clipboard.png

  • 由于缺乏统一标准,Java MPI库为了性能最优,其遵循的标准各不相同。由此提出:要解决标准统一的问题。

5.通信device的实现

clipboard.png

5.1 Hybrid device

  • hybrid device 的设计

    • 基于现有的device进行设计,这样可以选用任何一个网络device进行节点间通信,同时有利于代码的服用,便于以后维护。

  • 实现hybrid device时,首先遇到的问题:

clipboard.png

  • MPJ Express 运行时系统负责启动计算节点上的进程。

  • bybdev的设计具有在使用运行时系统的单个计算节点上启动一个或多个网络device实例的灵活性

  • smpdev是一个多个通信device,在那里,不同的线程代表不同的MPJ Express进程,每一个线程有一个包含UUID的进程ID(PID)

  • smpdev的一个具有挑战性的需求是:smpdev依赖于xdev层中各线程中的共享变量,而用户程序中的变量禁止共享。

    • 解决:smpdev和bybdev用过一种智能的类加载机制来满足这个要求。这个类加载机制是:MPJ Express软件的不同包被分为2组,然后分别用不同的的类加载器进行加载。

  • 用户通过指定进程数和可用节点数来执行并行Java应用。基于此:

    1. MPJ Express运行时动态地决定每个节点中运行的线程数

    2. hybdev创建一个连接网络中所有JVM的网络device实例

    3. 每个节点创建一个smpdev实例

    4. smpdev线程共享网络device,以便在网络中进行通信

  • 网络中的每个节点用网络device的PID进行标识,这个PID座位网络ID

  • 网络中的smpdev线程用他们的PID进行标识,这些PID也叫作线程ID

  • 每个节点仅使用一个网络device或固定数量的线程使得MPJ Express 能够利用更多的Java线程而不是进程,这样可以极大地减少device的初始化时间和网络资源开销。

5.1.2通信

clipboard.png

  • 到达的信息被放入队列,用户调用MPI.Recv()取出消息

clipboard.png

  • smpdev和niodev实现了RecvQueue以用来保存当前用户发出的Recv()方法请求后还没有完全接受的信息。

  • ArriveQueue用来保存已经完全接受到的信息,但Recv()方法不是由用户发出的

  • 网络device座位smpdev线程间的共享网络通道。

    • 当同一节点中的2个线程想获得一条来自某个远程source的信息时,就会发生接受错误。任何线程都能得到被定向到对等县城的信息。

      • 解决:在key中增加destination线程的UUID,这样,niodev就能区分destination线程。source和destination的UUID在信息的头部

  • MPJ Express 可以用MPI.ANY_SOURCE来检测通配符信息

    • 在hybdev中,首先要解决用哪个device来检索这样的信息

    • 解决:在hybdev中启动一个新进程,该进程在smpdev队列和正在被使用的网络device中搜索通配符信息,找到后取出信息。

5.1.3 控制网络拥塞
  • hybdev通信device利用单个计算节点中的多线程,这些单个计算节点在节点间通信时,共享单个网络通道,在之前的试验中发现,共享单个网络通道会在这个通道上发生拥塞(尤其是在多核节点中)。

    • 解决:每个节点引入多个网络通达————>每个节点创建多个bybdev实例,每个实例在单独的JVM中。这样,每个节点有多个hybdev实例,每个bybdev实例有自己的用于多节点通信的网络通道。bybdev的实例数有每个节点创建的的进程数决定,而进程是MPJ Express软件的可配参数。

5.2 Native Device

clipboard.png

clipboard.png

clipboard.png

  • 对于点对点通信,native device 使用叫作mpjbuf的MPJ Express中间缓冲层。

  • mpjbuf实现类 ————> NIO Buffer

  • 使用NIO Buffer 时,应用数据以字节形式被复制到ByteBuffer中,然后送到mpjdev层 ,java NIO yong allocateDirect()方法吧ByteBuffer分配到JVM内存外面,这样native device就能直接获取ByteBuffer内存。native device得到地址后,把地址传给底层的本地MPI库。此处要注意,因为正在使用ByteBuffer进行数据通信,MPI_BYTE数据类型被用作所有的点对点通信。

6.性能评估

clipboard.png

clipboard.png

这篇关于MPJ Express 内容总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/419024

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern