我得到了一个据说并行工作的C ++程序(源代码)。但是,如果我用g ++编译它(我使用的是Ubuntu 10.04和g ++ 4.4.3)并运行它,我的两个CPU核心中的一个会满负荷而另一个正在“无所事事”。
所以我跟那个给我这个程序的人说过话。有人告诉我,我必须为g ++设置特定的标志,以便为2个CPU内核编译程序。但是,如果我查看代码,我就找不到任何指向并行性的行。
所以我有两个问题:
答案 0 :(得分:3)
AFAIK没有编译器标志,旨在使单线程应用程序利用并行性(它绝对是一个非常重要的操作),除了循环迭代的并行化(-ftree-parallelize-loops),仍然必须是小心激活;即使没有明确的线程创建,也可能有一些OpenMP指令来并行化几个指令序列。
答案 1 :(得分:2)
在源代码中查找“thread”和/或“std :: thread”的出现。
答案 2 :(得分:1)
当前的C ++语言标准不支持语言或标准库中的多处理。建议的C ++ 0x标准确实对线程,锁等有一些支持。我不知道g ++的任何标志会神奇地使你的程序进行多处理,并且很难看出这样的标志可以做什么。
答案 3 :(得分:1)
我唯一能想到的是openMosix或LinuxPMI(openMosix的继承者)。如果代码使用进程,那么进程“迁移”技术可以使进程在不同的机器上运行(它们安装了指定的linux发行版)。
检查代码中的线程( grep -i thread ),进程( grep fork )。如果不存在,则检查MPI。我记得MPI需要一些额外的配置(仅用于教师的一些家庭作业)。
如前所述,gcc(和其他人)使用OpenMP with some pragmas实现了一些并行方式。