并行编程==multithreading编程?

并行编程==multithreading编程?

multithreading编程是并行的,但并行编程不一定是multithreading的。

除非multithreading发生在单个内核上,在这种情况下它只是并发的。

不一定 。 你可以在多个进程甚至多个机器之间分配作业 – 我不会把这个作为“multithreading”编程,因为每个进程可能只使用一个线程,但它当然是并行编程。 诚然,你可以争辩说,有多个进程在系统内有多个线程作为一个整体…

最终,像这样的定义只在上下文中才有用。 在你的具体情况下,它会有什么不同? 或者这只是出于兴趣?

编号multithreading编程意味着你有一个单一的进程,这个过程会产生一堆线程。 所有线程同时运行,但它们都处于相同的进程空间下:它们可以访问相同的内存,具有相同的打开文件描述符,等等。

并行编程作为一个定义有点“一般”。 在MPI中,通过多次运行相同的进程来执行并行编程,不同的是每个进程获得不同的“标识符”,所以如果需要,可以区分每个进程,但不是必需的。 而且,这些进程是相互独立的,它们必须通过pipe道或networking/ unix套接字进行通信。 MPI库提供了特定的function,以同步或asynchronous方式将数据移动到节点。

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

OpenMP的优点是非常透明。 有一个循环并行? 只需添加一些指令,编译器将其分块,并将每个循环分配给不同的处理器。 不幸的是,你需要一个共享内存的体系结构。 具有基于节点的体系结构的集群不能在集群级别使用OpenMP。 MPI允许您在基于节点的体系结构上工作,但是您必须付出更复杂且不透明的使用情况的代价。