代码之家  ›  专栏  ›  技术社区  ›  phimuemue

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

  •  1
  • phimuemue  · 技术社区  · 14 年前

    我得到了一个C++程序(源码),据说是并行工作的。但是,如果我用G++编译它(我使用的是Ubuntu10.04和G++4.4.3),并运行它,那么我的两个CPU核心中的一个将得到满负荷,而另一个则“什么都不做”。

    所以我和给我这个节目的人谈过了。我被告知我必须为G++设置特定的标志,以便为2个CPU核心编译程序。但是,如果我看代码,我就找不到任何指向并行性的行。

    所以我有两个问题:

    • 对于多线程应用程序,是否存在任何C++ -内联函数,即是否可以在没有任何额外的库的情况下编写并行代码(因为我没有找到任何非标准库)?
    • 是否确实有g++的标志告诉编译器编译2个CPU内核的程序并编译它,使其并行运行(如果:它们是什么)?
    4 回复  |  直到 8 年前
        1
  •  3
  •   Matteo Italia    14 年前

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

        2
  •  2
  •   Edward Strange    14 年前

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

        3
  •  1
  •   anon    14 年前

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

        4
  •  1
  •   INS    14 年前

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

    检查螺纹( GRIP-I线程 )过程 绿叉 )在你的代码中。如果这些都不存在,则检查 MPI . MPI需要一些额外的配置,因为我记得(只在教师的一些家庭作业中使用)。

    如前所述,gcc(和其他)实现了与 OpenMP with some pragmas .