代码之家  ›  专栏  ›  技术社区  ›  gsamaras a Data Head

MPI_Init()VS MPI_Intit_thread()

  •  7
  • gsamaras a Data Head  · 技术社区  · 10 年前

    哪一个是区别,哪一个应该实际使用?我找到了这个 IBM 链接和这个问题 MPI - one function for MPI_Init and MPI_Init_thread 如果有关系的话,我只对C感兴趣。


    两种功能的描述相同:

    MPI_Init_线程 初始化MPI执行环境

    正如你在他们的参考文献中看到的: MPI_Init() 和 MPI_Init_thread() , 但是 论点不同。

    1 回复  |  直到 9 年前
        1
  •  8
  •   Vladimir F Героям слава    10 年前

    无论程序何时使用线程,都应该使用 MPI_Init_thread() .

    这取决于线程的使用情况 required 你会通过的。 OpenMPI手册参考:

    MPI_THREAD_SINGLE仅执行一个线程。

    MPI_THREAD_FUNNELED如果进程是多线程的,则只有调用MPI_Init_THREAD的线程才会进行MPI调用。

    MPI_THREAD_SERIALIZED如果进程是多线程的,一次只有一个线程调用MPI库。

    MPI_THREAD_MULTIPLE如果进程是多线程的,则多个线程可以无限制地同时调用MPI。

    通常 必修的 被区别对待的是 MPI_THREAD_MULTIPLE 。如果多个线程可以同时调用MPI函数,则传递此值。不幸的是,在这种情况下,MPI库的性能通常很差。

    其他的通常在MPI库中被同等对待。尽管如此,如果在构建OpenMPI时禁用了对线程的支持,它仍然会抱怨 provided 值为 MPI_THREAD_SINGLE 即使 MPI_FUNNELED 和 MPI_SERIALIZED 也会起作用。