我有一个系统使用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环境中运行它。
非常感谢
不,您需要严格更改程序才能使用MPI功能集而不是pthread。我可以在这里给出的唯一答案是去看看MPI的参考资料,没有一个灵丹妙药。 – slugonamission 2013-02-15 20:21:50
谢谢。任何文件解释如何做到这一点? – West14 2013-02-16 11:09:31
MPI和线程之间最基本的差异在于,当MPI数据被显式作为线程共享其内存(共享内存)时具有单独内存空间(分布式内存)的实体之间的消息传递时。这可能需要对程序中的数据结构和算法进行大量更改,以使它们更适合分布式存储,例如,最大限度地减少传递的消息的数量/数量。 – 2013-02-18 16:52:47