【问题标题】:Does gcc automatically use -j4? Is there anything I can do to optimize my compilation?gcc 会自动使用 -j4 吗?我可以做些什么来优化我的编译吗?
【发布时间】:2015-11-19 21:01:05
【问题描述】:

你好,我是Linux平台的初学者,所以我对终端命令不熟悉。

我正在用 C++ 编写一个应用程序,我预计它会消耗大量的处理能力。所以我想确保我在我的设备上使用了所有可用的内核(它有 4 个内核)。

我正在使用以下内容来创建可执行文件:

gcc -o blink -l rt blink.c -l bcm2835

其中 bcm2835 是我用于 I/O 的库。所以我的问题是,这个命令是使用所有可用的内核还是我可以做些什么来优化它?我愿意使用所有可用的东西来扔厨房水槽,如果它能让这段代码运行得更快的话。

【问题讨论】:

  • make -j4 不会让你的代码使用多核,它会让构建系统使用多核。
  • 我明白了,我会从问题中删除它。所以我的问题仍然是:我在运行代码时是否使用了所有内核,如果没有,我可以做些什么来确保这种情况发生。
  • 如果你想利用多核,你需要研究多线程,我认为这个话题太宽泛,无法在一个 SO 问题中涵盖。
  • 我明白了。我会这样做的,谢谢。
  • @OE1:这是一个“O”,而不是一个零;通常你把它放在命令行的开头。如果缺少它,编译器会生成一个非常简单的 C++ 代码到机器模式的转换(但这在调试中很有用,因为它更容易将源代码行映射到生成的代码);启用优化后,编译器对代码执行各种魔法(内联、表达式折叠、更好的寄存器使用、自动矢量化、死代码消除、指令重新排序以更好地利用管道......)以使其运行得更快。跨度>

标签: c++ gcc compilation compiler-optimization


【解决方案1】:

-j 作业选项适用于 make 而不是 gcc

当与make 一起使用时,它将导致多个“配方”并行执行。在这种情况下,您的gcc 行就是一个秘诀。

问题修改后

如果您希望代码使用多个内核,则需要使用线程或进程。查看 pthreads。

【讨论】:

  • 我明白了,我删除了 make 部分,这只是一个示例。我想知道整个代码执行是否有类似的过程。或者操作系统是否会在执行后自动专用所有代码?我只是想确保我使用了所有可用的东西。
  • 您的操作系统绝对不能“让您的代码在多个 cpu 上运行”。任何其他系统也没有。您需要修改代码以使其使用线程。
【解决方案2】:

由于您使用的是 C++,因此您已经为您集成了这个足够好的跨平台线程库 (>=C++11)。

只需确保添加-std=c++11 以便

gcc -o blink -l rt blink.c -l bcm2835 

变成

gcc -std=c++11 -o blink -l rt blink.c -l bcm2835

http://www.cplusplus.com/reference/thread/thread/的文档和基本示例
http://en.cppreference.com/w/cpp/thread/thread 上的文档看起来更漂亮

你仍然需要自己编写线程的程序。

【讨论】:

    猜你喜欢
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 2010-09-22
    相关资源
    最近更新 更多