C++/g++;:并行程序 我得到了一个C++程序(源码),据说是并行工作的。然而,如果我用g++编译它(我使用的是ubuntu10.04和g++4.4.3)并运行它,我的两个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没有编译器标志设计用于使单线程应用程序利用并行性(这肯定是一个非平凡的操作),但循环

所以我和给我这个程序的人谈了。我被告知我必须为g++设置特定的标志,以便为2个CPU核编译程序。然而,如果我查看代码,我无法找到任何指向并行性的行

所以我有两个问题:

  • 是否有用于多线程应用程序的C++内部函数,例如,是否可以在没有任何额外库的情况下编写并行代码(因为我没有发现包含任何非标准库)
  • 确实有g++的标志告诉编译器编译2个CPU核的程序,并编译它以使其并行运行(如果:它们是什么),这是真的吗

AFAIK没有编译器标志设计用于使单线程应用程序利用并行性(这肯定是一个非平凡的操作),但循环迭代的并行化(-ftree parallelize loops)除外,这仍然必须小心激活;尽管如此,即使没有显式的线程创建,也可能有一些指令来并行化多个指令序列。

AFAIK除了循环迭代的并行化之外,没有设计编译器标志来让单线程应用程序利用并行性(这绝对是一个非平凡的操作)(-ftree并行化循环)但是,即使没有明确的线程创建,也可能有一些指令来并行化多个指令序列。

< P>当前的C++语言标准不支持语言或标准库中的多处理。C++的0x标准对THE有一定的支持。广告、锁等。我不知道任何G+的标志,它会神奇地使你的程序做多处理,很难看到这些标志可以做什么。

< P>当前的C++语言标准不支持语言或标准库中的多处理。建议的C++ 0x标准确实支持线程、锁等。。我不知道有任何g++标志会神奇地使您的程序执行多重处理,很难看到这些标志可以做什么。

查找源代码中出现的“线程”和/或“std::thread”。

查找出现的“线程”和/或“std::thread”在源代码中。

我唯一能想到的是或(openMosix的后继者)。如果代码使用进程,那么进程“迁移”技术可以使进程在不同的机器上工作(安装了指定的linux发行版)

检查代码中的线程(grep-i线程)、进程(grep fork)。如果这些都不存在,那么检查.MPI需要一些额外的配置,因为我记得(仅在教员的一些家庭作业中使用)


如前所述,gcc(和其他)实现了与的一些并行方式。

我唯一能想到的是or(openMosix的继承者)。如果代码使用进程,那么进程“迁移”技术就可以将进程放在不同的机器上工作(安装了指定的linux发行版)

检查代码中的线程(grep-i线程)、进程(grep fork)。如果这些都不存在,那么检查.MPI需要一些额外的配置,因为我记得(仅在教员的一些家庭作业中使用)


如gcc(及其他)所述使用实现了一些并行方式。

谢谢指针,但没有使用OpenMP。我的猜测是:该程序使用posix线程进行并发编程。此外,除非设置正确的标志,否则有宏使代码顺序。很抱歉,它也没有使用posix。我想我只是得到了一个非并行版本。因此,你不能要求你第一次问过的人是谁?即使你得到一个基于pthread的代码,你希望如何在内核间分配线程?pthread没有这种支持,至少还没有。感谢指针,但OpenMP没有使用。我的猜测是:该程序使用posix线程来进行并发编程。此外,还有一些宏使除非您设置了正确的标志,否则按顺序编码。很抱歉,它也没有使用POSIX。我想我只是得到了一个非并行版本。因此,您不能询问您第一次询问的人?即使您得到了基于pthread的代码,您希望如何跨核分发线程?pthread没有这种支持,至少目前还没有。有一些使您的代码并行的pragma-OpenMP(请参阅我的回答)。还有一些使您的代码并行的pragma-OpenMP(请参阅我的回答)。