映射到C vs C ++:CPU指令范围

时间:2016-12-30 11:39:18

标签: c++ c instruction-set transpiler

我正在考虑将语言(本土DSL)转换为C vs C ++的问题。

我还没有做过任何本地人的事。编程超过15年,所以我想检查一下我的假设。

我是否正确地假设转换到最新的C ++版本(17)将使本机编译器能够使用更广泛的“现代”版本。英特尔/ AMD CPU指令,导致更高效的可执行文件(超出C ++的多线程/内存模型部分,这本身就已经足以成为C ++的理由)?

换句话说,不是最近的一部分' CPU指令永远不会由C编译器生成,只是因为它有关于程序员意图的信息太少,因为C的语法更简单?我知道我可以使用汇编程序访问所有CPU指令,但这正是我不想做的事情。理想情况下,我希望生成的代码仍然尽可能与平台无关。

1 个答案:

答案 0 :(得分:6)

关于编程语言与“现代CPU指令”之间关系的所有假设都是错误的。

让我们考虑一下GNU Compiler Collection。

这里的语言选择并不重要,因为语言的前端都会产生相同的中间形式,称为GIMPLE。然后优化过程就可以了。

可以发出的CPU指令范围由-mtune选项控制。对于x86,GCC能够在优化一些非常简洁的C代码时发出现代AVX 512指令。自动循环矢量化是一个强大的功能。试一试:实现memcpy并查看生成的程序集。

我的建议:生成干净,不聪明的C代码,并提高优化级别。就像你手工编写代码一样。

您也可以考虑直接将您的语言作为GCC或LLVM的前端实现,而不必转换为C或C ++。 LLVM是为此目的而设计的,旨在使新语言的实现变得简单,并且仍然利用现代优化方法。