是否可以并行编译单个C++翻译单元?

问题描述 投票:0回答:2

是否可以并行编译单个 C++ 翻译单元?

如果是这样,怎么办? (具体如何使用 clang 或 gcc 来完成)

不然为什么不呢?

c++ gcc clang
2个回答
2
投票

我非常怀疑是否可以并行编译。

C 和 C++ 语言取决于求值顺序。文件中较高的 #define 可能会更改其后面所有内容的含义。在 C++ 中,运算符可能会调用函数或执行其他操作,具体取决于运算符覆盖函数的存在。事实上,符号名称的存在或不存在可能会影响它是否被解释为变量或类型。

可以在不参考符号表的情况下并行完成的简单解析部分非常容易做到,以至于对它们进行线程化几乎没有意义。而困难的部分本质上是序列化的。

一种语言可能被设计为允许在单个单元中并行编译,但它不会是 C。


1
投票

理论上可能,但实践中毫无意义。

预处理器线程可以发出一系列要编译的标记,而实际的编译线程可以在生成这些标记时拾取它们。类似地,链接器线程可以在生成编译函数时输入它们,因为它可以在知道最后一个函数之前启动。

根据定义,窥孔优化也可以并行完成。但这需要与其他优化步骤(例如内联)交替进行,这有点难以并行执行。

但正如评论所指出的,任何实际程序的翻译单元都比内核的数量还要多。您必须为单个 TU 同步两个线程,这会浪费时间。

链接当然是完全不同的事情。

© www.soinside.com 2019 - 2024. All rights reserved.