首页 文章

并行编程==多线程编程?

提问于
浏览

3 回答

  • 28

    不必要 . 您可以在多个进程甚至多台机器之间分配作业 - 我当然不会编程并行编程 . 不可否认,您可以争辩说,对于多个进程,整个系统中存在多个线程......

    最终,这样的定义仅在上下文中有用 . 在你的特殊情况下,它会有什么不同?或者这只是出于兴趣?

  • 31

    多线程编程是并行的,但并行编程不一定是多线程的 .

    除非多线程发生在单个核心上,在这种情况下它只是并发的 .

  • 25

    多线程编程意味着您只有一个进程,并且此进程会生成一堆线程 . 所有线程都在同一时间运行,但它们都在同一个进程空间下:它们可以访问相同的内存,具有相同的打开文件描述符,依此类推 .

    并行编程作为定义更具“通用性” . 在MPI中,您通过多次运行相同的进程来执行并行编程,不同之处在于每个进程都获得不同的“标识符”,因此如果需要,您可以区分每个进程,但这不是必需的 . 此外,这些进程彼此独立,并且必须通过管道或网络/ unix套接字进行通信 . MPI库提供特定的功能,以同步或异步方式在节点之间移动数据 .

    相比之下,OpenMP通过多线程和共享内存实现并行化 . 您可以为编译器指定特殊指令,并自动为您执行并行执行 .

    OpenMP的优势在于它非常透明 . 有一个并行化的循环?只需添加几个指令,编译器将其分块,并将每个循环分配给不同的处理器 . 不幸的是,您需要一个共享内存架构 . 具有基于节点的体系结构的群集无法在群集级别使用OpenMP . MPI允许您处理基于节点的体系结构,但您必须付出更复杂且不透明的使用价格 .

相关问题