2013-02-15 69 views
-1

我有一个系统使用POSIX编译我的程序与g ++,但是,我有机会访问一个有多个处理器的大机器,它必须有mvapich2和openmpi模块,我认为openmpi应该是我的系统迁移的正确选择。 问题是,我没有太多的openmpi经验,我不知道如何将我的程序迁移到这个新的环境。程序从pthread(posix)迁移到openmpi

读一点我认为我必须使用MPI函数来执行我的系统在这个环境中工作并更改POSIX函数?

在本节中,我调用pthread函数来处理线程,我认为这些线程是常用指令。

Thread::Thread(PFUNC func, void * arg) 
{ 
     pthread_detach(pthread_self()); 
     pthread_attr_t attr; 
     pthread_attr_init(&attr); 
     pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); 
     int s = pthread_create(&xThreadId, &attr, func, arg); 
    if (s != 0) 
      throw EXCEPT_NOTHREAD; 

     pthread_attr_destroy(&attr); 
     pthread_detach(pthread_self()); 

} 

我的系统的工作原理,以及用旗语,互斥,我需要更换,以及使用信号量和互斥的?怎么样?。请告知如何解决这个问题,如果我真的需要更改我的程序或者有一个技巧,请避免更改我的程序并在openmpi环境中运行它。

非常感谢

+2

不,您需要严格更改程序才能使用MPI功能集而不是pthread。我可以在这里给出的唯一答案是去看看MPI的参考资料,没有一个灵丹妙药。 – slugonamission 2013-02-15 20:21:50

+0

谢谢。任何文件解释如何做到这一点? – West14 2013-02-16 11:09:31

+1

MPI和线程之间最基本的差异在于,当MPI数据被显式作为线程共享其内存(共享内存)时具有单独内存空间(分布式内存)的实体之间的消息传递时。这可能需要对程序中的数据结构和算法进行大量更改,以使它们更适合分布式存储,例如,最大限度地减少传递的消息的数量/数量。 – 2013-02-18 16:52:47

回答

0

从多线程程序的并行MPI程序去,这不是一个简单的任务,你将有机会学习MPI并有可能是没有办法解决这个。

我会先从基本的MPI的例子有一个快速google search

很多发现也向我推荐参考文档,你MPI实现(你提到openmpi),也指MPI standard documentation

+0

感谢您的回复,我会真正appreaciate如果你有任何网站,我可以找到这两种方法之间的区别。谢谢。 – West14 2013-02-17 11:47:46

+0

@Edison通过快速的谷歌搜索检查我找到的链接.... – pyCthon 2013-02-17 15:41:38