集群mpirun并行,把同样的任务重复跑了几十遍

集群mpirun并行,把同样的任务重复跑了几十遍,第1张

我会。入门的话你学习下MPI编程,目前并行计算基本上有:MPI、OPENMP、OPENCL、OPENGL、CUDA你只是想体验的话用OPENMP最省事了,一句话就可以达到并行的效果代码我可以给你,但你要配好环境。先给你裸敲一个hello world的MPI程序吧<pre t="code" l="cpp">includeltstdio.h

includeltmpi.h

int main (int argc,char *argv[])

{

int mypid ,numprocs

MPI_Init(ampargc,ampargv)// 并行开始

MPI_Comm_size(MPI_COMM_WORLD,ampnumprocs)//获取进程数

MPI_Comm_rank(MPI_COMM_WORLD,ampmypid)//获取本进程ID号

printf(hello world! i am %d process of %d processes,mypid,numporcs)

MPI_Finalize()//并行结束

}这就是MPI版的hello world 程序,你需要在编译的时候确定同时打开几个进程,比如说4个,程序可能运行结果为:hello world! i am 2 process of 4 processeshello world! i am 1 process of 4 processeshello world! i am 0 process of 4 processeshello world! i am 3 process of 4 processes为什么说可能呢,因为四个进程同时在执行上面的那段代码,哪个进程先结束哪个就先输出就这个道理。想学并行编程的话,建议你在linux下学习。

它非常适合用来快速配置一个集群中的所有运行相同服务和具备相同配置的计算机节点。现在有大量的开源管理工具,都可以实现这样的管理,比如dsh、SUSE Manager等。下面是用ClusterSSH管理多台Linux服务器的具体过程。

如果你是一名Linux系统管理员,那你每天一定会和许许多多的机器打交道,因为你要定期监测和维护这些机器,如一批Web服务器,如果你要同时在多台机器上敲入相同的命令,你可能会通过SSH登录,然后逐台敲入,如果使用ClusterSSH,可以为你节省不少类似的工作时间。

ClusterSSH是用Tk/Perl包装XTerm和SSH后形成的新工具,就其本身而言,它可以运行在任何兼容POSIX的 *** 作系统上,我曾经在Linux,Solaris和Mac OS X上运行过它,它需要Perl库Tk(在Debian或Ubuntu上就是perl-tk)和X11::Protocol(在Debian或Ubuntu上就是libx11-protocol-perl),此外,xterm和OpenSSH是必不可少的。

安装在Debian或Ubuntu上安装ClusterSSH是相当简单的,只需要敲入sudo apt-get install clusterssh就可以安装好,至于依赖包你也不必担心,一切都会为你装好的,它也提供了适合Fedora的rpm包,在FreeBSD上可通过port系统安装,还为Mac OS X准备了MacPort版本,因此你可以在你的苹果电脑上安装ClusterSSH,当然,如果你是极客,也可以下载源代码自己编译。

配置可以通过ClusterSSH的全局配置文件/etc/clusters,或用户home目录下的。csshrc文件来配置它,我喜欢用户级的配置方式,这样同一个系统中的不同用户可以根据自己的喜好进行配置,ClusterSSH定义了一个“cluster”机器组,你可以通过一个界面来控制这个组中的所有机器,在配置文件的顶端“clusters”部分,你可以详尽地列出你的集群,然后用独立的段落来描述每个集群。

例如,假设我有两个集群,每个集群由两台机器组成,“Cluster1”由“Test1”和“Test2”两台机器组成,“Cluster2”由“Test3”和“Test4”两台机器组成,~.csshrc(或/etc/clusters)配置文件的内容看起来应该是:

clusters = cluster1 cluster2

cluster1 = test1 test2

cluster2 = test3 test4你也可以创建中间集群(包含其它集群的集群),如果你想创建一个名叫“all”的集群包含所有的机器,有两种实现手段,首先,你可以创建一个包含所有机器的集群,如:

clusters = cluster1 cluster2 all

cluster1 = test1 test2

cluster2 = test3 test4

all = test1 test2 test3 test4但我更喜欢的方法是使用一个包含其它集群的中间集群:

clusters = cluster1 cluster2 allcluster1 = test1 test2


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7445860.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存