C++/g++;:并行程序 我得到了一个C++程序(源码),据说是并行工作的。然而,如果我用g++编译它(我使用的是ubuntu10.04和g++4.4.3)并运行它,我的两个CPU核心中的一个将满负荷运行,而另一个“什么都不做”
所以我和给我这个程序的人谈了。我被告知我必须为g++设置特定的标志,以便为2个CPU核编译程序。然而,如果我查看代码,我无法找到任何指向并行性的行 所以我有两个问题:C++/g++;:并行程序 我得到了一个C++程序(源码),据说是并行工作的。然而,如果我用g++编译它(我使用的是ubuntu10.04和g++4.4.3)并运行它,我的两个CPU核心中的一个将满负荷运行,而另一个“什么都不做”,c++,g++,parallel-processing,concurrency,flags,C++,G++,Parallel Processing,Concurrency,Flags,所以我和给我这个程序的人谈了。我被告知我必须为g++设置特定的标志,以便为2个CPU核编译程序。然而,如果我查看代码,我无法找到任何指向并行性的行 所以我有两个问题: 是否有用于多线程应用程序的C++内部函数,例如,是否可以在没有任何额外库的情况下编写并行代码(因为我没有发现包含任何非标准库) 确实有g++的标志告诉编译器编译2个CPU核的程序,并编译它以使其并行运行(如果:它们是什么),这是真的吗 AFAIK没有编译器标志设计用于使单线程应用程序利用并行性(这肯定是一个非平凡的操作),但循环
- 是否有用于多线程应用程序的C++内部函数,例如,是否可以在没有任何额外库的情况下编写并行代码(因为我没有发现包含任何非标准库)
- 确实有g++的标志告诉编译器编译2个CPU核的程序,并编译它以使其并行运行(如果:它们是什么),这是真的吗
如前所述,gcc(和其他)实现了与的一些并行方式。我唯一能想到的是or(openMosix的继承者)。如果代码使用进程,那么进程“迁移”技术就可以将进程放在不同的机器上工作(安装了指定的linux发行版) 检查代码中的线程(grep-i线程)、进程(grep fork)。如果这些都不存在,那么检查.MPI需要一些额外的配置,因为我记得(仅在教员的一些家庭作业中使用)
如gcc(及其他)所述使用实现了一些并行方式。谢谢指针,但没有使用OpenMP。我的猜测是:该程序使用posix线程进行并发编程。此外,除非设置正确的标志,否则有宏使代码顺序。很抱歉,它也没有使用posix。我想我只是得到了一个非并行版本。因此,你不能要求你第一次问过的人是谁?即使你得到一个基于pthread的代码,你希望如何在内核间分配线程?pthread没有这种支持,至少还没有。感谢指针,但OpenMP没有使用。我的猜测是:该程序使用posix线程来进行并发编程。此外,还有一些宏使除非您设置了正确的标志,否则按顺序编码。很抱歉,它也没有使用POSIX。我想我只是得到了一个非并行版本。因此,您不能询问您第一次询问的人?即使您得到了基于pthread的代码,您希望如何跨核分发线程?pthread没有这种支持,至少目前还没有。有一些使您的代码并行的pragma-OpenMP(请参阅我的回答)。还有一些使您的代码并行的pragma-OpenMP(请参阅我的回答)。