MPI java多线程
我的计算机是24核的工作站,想进行并行计算。现在有两种选择:java的多线程和MPICH+mpiJava的MPI编程。请问二者有什么区别呢?哪个会更快一点?我搜了一下,好像说MPI是多进程的,这是不是说MPI能更好的利用多个CPU?假如我用了20个线程的话,java多线程编程能不能把计算任务分配到20个CPU上啊?
如果bai是单节点的,利用多线程的就du可以了。mpi一般zhi使用在多dao节点上的,就zhuan是好几个工作站一起计shu算的时候,采用mpi实现。
多线程操作系统是自动分配cpu的,可以实现一台电脑上的分配。
mpi的通讯在以电脑上的速度肯定比不上多线程的,因为线程的通讯可以基于共享内存的。
java并行计算 JAVA的MPI---MPJ
mpirun -np部分决定vasp程序实际使用多少个节点并行
1.MPI全称是message passing interface,即信息传递接口,是用于跨节点通讯的基础软件环境。它提供让相关进程之间进行通信,同步等操作的API,可以说是并行计算居家出游必备的基础库。
一个 MPI 程序包含若干个进程。每个 mpi 进程都运行一份相同的代码,进程的行为由通讯域(communication world)和该通讯域下的 id(rank id)所决定。
MPI的编程方式,是“一处代码,多处执行”。编写过多线程的人应该能够理解,就是同样的代码,不同的进程执行不同的路径。
2.它是一个库,不是一门语言。可以被fortran,c,c++等调用。MPI允许静态任务调度,显示并行提供了良好的性能和移植性,用MPI编写的程序可直接在多核集群上运行。在集群系统中,集群的各节点之间可以采用 MPI 编程模型进行程序设计,每个节点都有自己的内存,可以对本地的指令和数据直接进行访问,各节点之间通过互联网络进行消息传递,这样设计具有很好的可移植性,完备的异步通信功能,较强的可扩展性等优点。
3.MPI常用命令
对于登录集群计算而言,我们只需要掌握两种mpi运行指令即可,它们分别是:mpirun、mpiexec。
简而言之mpirun和mpiexec均是MPI程序运行命令:
mpirun:MPI程序快速执行命令,运行前不必运行mpdboot开启守护进程。mpiexec:MPI程序运行命令,运行前必须开启mpd守护进程。
守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。
简单来说,在服务器配置良好的情况下,绝大多数情况不需要考虑选项的配置,基本语句如下:
mpirun -n 20 vasp_std //20核心并行vasp_std程序,vasp_std需要加入环境变量
mpiexec.hydra -n 20 vasp_std //20核心并行vasp_std程序,vasp_std需要加入环境变量
此时节点和核心的分配完全由PBS系统进行分配,跨节点运行时也会自动进行核心和节点的匹配
另外,在实际操作过程中,我发现部分同学对于PBS和mpirun -np的作用可能不太理解,在这里想简单解释如下:
- PBS是作业分配系统,通过.pbs脚本像PBS作业管理软件申请相应的核心数量和节点数量。
- 但要注意,这并不意味着通过分配的作业会完全按照申请的资源运行。下面看一个小小的例子:
1 |
#PBS -l nodes=2:ppn=20 |
这意味着#PBS -l命令部分决定问集群申请多少计算资源。
MPI java多线程的更多相关文章
- 40个Java多线程问题总结
前言 Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多.越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的.这篇文章主要是对多线程的问题进行 ...
- Java多线程基础知识篇
这篇是Java多线程基本用法的一个总结. 本篇文章会从一下几个方面来说明Java多线程的基本用法: 如何使用多线程 如何得到多线程的一些信息 如何停止线程 如何暂停线程 线程的一些其他用法 所有的代码 ...
- Java多线程系列--“JUC锁”03之 公平锁(一)
概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...
- Java多线程系列--“JUC锁”04之 公平锁(二)
概要 前面一章,我们学习了“公平锁”获取锁的详细流程:这里,我们再来看看“公平锁”释放锁的过程.内容包括:参考代码释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系 ...
- Java多线程--让主线程等待子线程执行完毕
使用Java多线程编程时经常遇到主线程需要等待子线程执行完成以后才能继续执行,那么接下来介绍一种简单的方式使主线程等待. java.util.concurrent.CountDownLatch 使用c ...
- Java多线程 2 线程的生命周期和状态控制
一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就 ...
- java 多线程 1 线程 进程
Java多线程(一).多线程的基本概念和使用 2012-09-10 16:06 5108人阅读 评论(0) 收藏 举报 分类: javaSE综合知识点(14) 版权声明:本文为博主原创文章,未经博 ...
- 一起阅读《Java多线程编程核心技术》
目录 第一章 Java多线程技能 (待续...)
- 第一章 Java多线程技能
1.初步了解"进程"."线程"."多线程" 说到多线程,大多都会联系到"进程"和"线程".那么这两者 ...
- java从基础知识(十)java多线程(下)
首先介绍可见性.原子性.有序性.重排序这几个概念 原子性:即一个操作或多个操作要么全部执行并且执行的过程不会被任何因素打断,要么都不执行. 可见性:一个线程对共享变量值的修改,能够及时地被其它线程看到 ...
随机推荐
- "NU1605: 错误形式的警告: 检测到包降级"的解决办法
这两行的意思是需要我们升级Maui.Controls的版本在8.0.14,取高版本. 同理,再次进行: 最后:
- MySQL设置字符集、排序规则和区分字母大小
摘要:在MySQL中,设置字符集和排序规则,在查询时区分字母大小写,utf8mb4支持emoji表情,而utf8不支持. 问题综述 在工作中,设置的一些唯一标志字符串和登录密码都是区分大小写的,但 ...
- ThinkBook16p2023(i9-13900H)使用m2转接oculink外接RTX4070Ti Super跑分
ThinkBook16p2023(i9-13900H)使用m2转接oculink外接RTX4070Ti Super跑分 自媒体跑分 内屏 NVIDIA GeForce RTX 4070 Ti SUPE ...
- 初探CAP定理及其不可兼得性
一.对CAP定理的理解 CAP定理是分布式系统设计的核心理论.由Eric Brewer在2000年提出,后由Gilbert和Lynch在2002年严格证明.分别是指Consistency一致性,Aav ...
- [原创]《C#高级GDI+实战:从零开发一个流程图》第02章:画一个矩形,能拖动!
一.前言 就像开发的教程都从"Hello World!"开篇一样,系列开始,我们也从一个最最简单的功能开始:画一个能拖动的矩形. 顺便说一下,另一篇教程:(原创)[C#] GDI+ ...
- java把mysql的数据同步到prometheus
1.mysql的数据 2.java代码 建立指标Collector类,指标类必须继承Collector import cn.hutool.extra.spring.SpringUtil; impo ...
- 函数使用十四:BAPI_PO_CREATE1
*&---------------------------------------------------------------------* *& Report ZBAPI_PO_ ...
- Spring AI 玩转多轮对话
AI "失忆"怎么办?本文带你用 Spring AI 一招搞定多轮对话,让你的 AI 应用拥有超强记忆!从 ChatClient.Advisors 到实战编码,三步打造一个能记住上 ...
- C# WinForm 选择文件夹对话框
选择文件夹只有选择 FolderBrowserDialog,这种选择对话框让人有些抓狂,特别当文件目录比较深.需要多次选择文件夹操作时. 参考:自定义文件夹选择对话框 - 我也是个傻瓜 - 博客园 ( ...
- 学习spring cloud记录11-Feign初体验
前言 Feign英语单词,主要用作为动词,用作动词译为"装作;假装,伪装;捏造(借口.理由等);创造或虚构,假装;装作;作假;佯作" Feign是一个声明式的http客户端,起作用 ...