C ++ / g ++:并发程序

时间:2010-06-14 07:32:00

标签: c++ g++ parallel-processing concurrency flags

我得到了一个据说并行工作的C ++程序(源代码)。但是,如果我用g ++编译它(我使用的是Ubuntu 10.04和g ++ 4.4.3)并运行它,我的两个CPU核心中的一个会满负荷而另一个正在“无所事事”。

所以我跟那个给我这个程序的人说过话。有人告诉我,我必须为g ++设置特定的标志,以便为2个CPU内核编译程序。但是,如果我查看代码,我就找不到任何指向并行性的行。

所以我有两个问题:

  • 是否存在用于多线程应用程序的C ++内在函数,即是否可以在没有任何额外库的情况下编写并行代码(因为我没有找到任何非标准库)?
  • 是否确实存在g ++标志,告诉编译器为2个CPU内核编译程序并编译它以便它并行运行(如果:它们是什么)?

4 个答案:

答案 0 :(得分:3)

AFAIK没有编译器标志,旨在使单线程应用程序利用并行性(它绝对是一个非常重要的操作),除了循环迭代的并行化(-ftree-parallelize-loops),仍然必须是小心激活;即使没有明确的线程创建,也可能有一些OpenMP指令来并行化几个指令序列。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

当前的C ++语言标准不支持语言或标准库中的多处理。建议的C ++ 0x标准确实对线程,锁等有一些支持。我不知道g ++的任何标志会神奇地使你的程序进行多处理,并且很难看出这样的标志可以做什么。

答案 3 :(得分:1)

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

检查代码中的线程( grep -i thread ),进程( grep fork )。如果不存在,则检查MPI。我记得MPI需要一些额外的配置(仅用于教师的一些家庭作业)。

如前所述,gcc(和其他人)使用OpenMP with some pragmas实现了一些并行方式。