Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenMP、多线程还是多处理(C)?_C_Multithreading_Multiprocessing_Ipc_Openmp - Fatal编程技术网

OpenMP、多线程还是多处理(C)?

OpenMP、多线程还是多处理(C)?,c,multithreading,multiprocessing,ipc,openmp,C,Multithreading,Multiprocessing,Ipc,Openmp,我在理解OpenMP的工作原理时遇到了一些困难。我知道它并行执行任务,是一个多处理工具,但这意味着什么 它使用“线程”,但同时它是一个多处理工具?这两种方法不是相互排斥的吗?你使用一种方法,而不是另一种?你能解释一下是哪一个吗 为了澄清,我只使用POSIX pthreads处理多线程。这与使用fork、exec和共享内存的多处理完全不同 谢谢。的开发目的是为并行架构提供一个抽象层,使用多线程和共享内存,这样您就不必从头开始编写常用的并行代码。注意,通常线程仍然可以访问共享内存(主线程的内存已分配

我在理解OpenMP的工作原理时遇到了一些困难。我知道它并行执行任务,是一个多处理工具,但这意味着什么

它使用“线程”,但同时它是一个多处理工具?这两种方法不是相互排斥的吗?你使用一种方法,而不是另一种?你能解释一下是哪一个吗

为了澄清,我只使用POSIX pthreads处理多线程。这与使用fork、exec和共享内存的多处理完全不同

谢谢。

的开发目的是为并行架构提供一个抽象层,使用多线程和共享内存,这样您就不必从头开始编写常用的并行代码。注意,通常线程仍然可以访问共享内存(主线程的内存已分配)。它利用多个处理器,但使用线程


是分布式系统的对应项。这可能更像您所想到的传统“多处理”版本,因为所有“列组”在没有共享内存的情况下彼此独立运行,并且必须通过散点/map/reduce等概念进行通信。

OpenMP是一种用于多线程的应用程序。我非常深入地介绍了如何使用OpenMP和陷阱:

它的工作原理与POSIX pthreads非常相似,只是没有什么麻烦。它的开发目的是将其合并到已经开发的代码中,然后使用适当的编译器重新编译(g++,clang/llvm目前无法工作)。如果你点击我上面的链接,你会注意到线程支持多处理,因为它可以在任何可用的处理器上执行

这意味着,如果只有一个内核,线程的执行速度仍然会更快,因为处理器在所有程序之间共享时间。如果您有多个处理器,您和多个线程可以同时从不同的处理器访问线程,因此执行速度更快

此外,OpenMP允许共享(和非共享内存),具体取决于实现,我相信您也可以将OpenMP与POSIX线程一起使用,尽管如果正确使用pthreads,您不会获得任何优势

以下是指向OpenMP优秀指南的链接:


我一直认为我们真正需要的是将两者结合起来的东西。在MPI分布式系统中,由于这两个线程是分开的,所以重新安排一个人的代码以便将OpenMP线程移动到不同的服务器是一件麻烦事。如果只有一个分发/并行化工具,那么这样的移动可能仅仅是一个重新配置工作。