首页 > 其他分享 >用于提速的一些Rust编译器的编译选项

用于提速的一些Rust编译器的编译选项

时间:2023-06-18 16:33:16浏览次数:32  
标签:opt level 代码 编译 编译器 优化 Rust

在TIO中怎么用?

Compiler flags中添加这么几行:

  • -Copt-level=3: -C opt-level=1, -C opt-level=2, -C opt-level=3: 这些标志用于控制代码优化级别。-C opt-level=1 表示较低的优化级别,而 -C opt-level=2 和 -C opt-level=3 表示递增的优化级别,其中 -C opt-level=3 是最高级别的优化。较高的优化级别可能会产生更高效的代码,但也可能导致编译时间增加。
  • -Clto=fat: 这个标志用于配置链接时优化(Link-Time Optimization,简称 LTO)生成的代码。-Clto=fat 选项指定生成 "fat" LTO 代码。"fat" LTO 生成包含了多个目标平台的优化代码,以便在不同的平台上都能运行。这样可以提供更好的兼容性和可移植性,但可能会增加编译时间和生成的代码大小。
  • -Ctarget-cpu=native: 这个标志用于指定目标 CPU 的优化级别。-Ctarget-cpu=native 表示编译器会根据当前机器的 CPU 类型进行优化。编译器会自动检测当前机器的 CPU 特性,并生成与之最兼容的优化代码。这有助于确保生成的代码能够最大限度地利用当前机器的性能特性。

有哪些

以下是用于提速 Rust 编译器的一些常用标志:

-C opt-level=1, -C opt-level=2, -C opt-level=3: 这些标志用于控制代码优化级别。-C opt-level=1 表示较低的优化级别,而 -C opt-level=2 和 -C opt-level=3 表示递增的优化级别,其中 -C opt-level=3 是最高级别的优化。较高的优化级别可能会产生更高效的代码,但也可能导致编译时间增加。

-C lto: 这个标志用于启用链接时优化(Link-Time Optimization,简称 LTO)。LTO 可以在整个程序的链接阶段进行优化,产生更高效的代码。但这可能会导致编译时间延长。

-Clto=fat: 这个标志用于配置链接时优化(Link-Time Optimization,简称 LTO)生成的代码。-Clto=fat 选项指定生成 "fat" LTO 代码。"fat" LTO 生成包含了多个目标平台的优化代码,以便在不同的平台上都能运行。这样可以提供更好的兼容性和可移植性,但可能会增加编译时间和生成的代码大小。

-Ctarget-cpu=native: 这个标志用于指定目标 CPU 的优化级别。-Ctarget-cpu=native 表示编译器会根据当前机器的 CPU 类型进行优化。编译器会自动检测当前机器的 CPU 特性,并生成与之最兼容的优化代码。这有助于确保生成的代码能够最大限度地利用当前机器的性能特性。

-C codegen-units=: 这个标志用于指定编译器生成的代码单元的数量。增加代码单元的数量可以并行编译代码,加快编译速度。例如,-C codegen-units=16 表示生成 16 个代码单元。

--release: 这个标志用于编译发行版本的代码,会启用一系列优化选项,包括较高的优化级别和启用 LTO。

--crate-type=: 这个标志用于指定要生成的 crate 类型。默认情况下,编译器会生成可执行文件,但通过指定其他 crate 类型(如静态库或动态库),可以提高编译速度,因为只需要编译所需的部分。

-C incremental: 这个标志用于启用增量编译。增量编译只重新编译发生更改的代码,而不是整个程序,可以大幅减少重新编译的时间。

这些标志可以根据你的需求和项目特定的优化需求进行调整。请注意,优化级别和编译速度之间存在权衡,较高的优化级别可能会导致编译时间增加。因此,建议根据项目的具体需求进行调整。

在 Rust 编译器中,没有直接对应于 C++ 中 -march=native 和 -mtune=native 的等效标志。Rust 的编译器(rustc)在编译时会自动根据目标平台进行优化,无需显式指定 CPU 架构和调整优化级别。

Rust 的编译器会默认使用适用于目标平台的优化级别,并生成与该平台最兼容的代码。这种自动化的处理有助于确保生成的代码在各种不同的目标平台上都能正确运行。

如果你想进一步优化 Rust 代码,可以考虑使用其他的编译器标志和优化技术,如指定 -C opt-level 来设置优化级别、启用 LTO(链接时优化)等。同时,使用 Rust 的工具链(如 cargo)可以更方便地控制编译参数和优化选项。

总的来说,Rust 的设计目标之一是提供可移植性和跨平台的能力,因此默认情况下它会根据目标平台自动进行优化,而无需手动指定 CPU 架构和调优选项。

标签:opt,level,代码,编译,编译器,优化,Rust
From: https://www.cnblogs.com/yhm138/p/17472779.html

相关文章

  • 用于提速的一些C++ 编译器的编译选项
    C++Compilerflags在TIO中怎么用?在C++Compilerflags新建几行:-Ofast:这个编译器优化选项启用所有-O3级别的优化,并进一步启用一些可能会破坏标准精度的优化,如忽视IEEE或ISO规定的某些数学准则的优化。这可能会使得程序运行得更快,但也可能会降低精度,因此只有在你可以接......
  • 编译原理实验二 使用lex创建词法分析器
    实验二直接上代码吧,其实我也不怎么知道哪里是致命的,课上听老师的课后,将代码写上,但是运行在环境里面还是不行,把注释去掉就可以了,不知道会不会是注释的问题%{#include<stdio.h>#include"define.h"intlineno=1; TokenTypeid2keyword(constchar*token);%}newline ......
  • Windows 下编译 OpenCV 和 OpenCV-contrib
    文章目录导言环境准备源码获取环境获取配置CMake并编译ConfigureGenerate生成项目总结导言在本文中,我们将介绍如何在Windows系统下编译OpenCV和OpenCV-contrib。OpenCV是一个开源的计算机视觉库,它包含了许多图像处理和计算机视觉的功能。而OpenCV-contrib则是一个由社......
  • Linux编译静态库、动态库
     一、Linux上编译静态库#1.编译成.o文件gcc-ca.cb.c//2.编译成静态库ar-rliba.aa.ob.o//3.链接成可执行文件gccmain.c-omain-L[库所在路径]-l[库名]g++main.cpp-omain-L./-la  二、Linux上编译动态库//1.把cpp封装成so库g++-fPIC-sh......
  • 《编译原理》实验四:自下而上的语法分析(SLR分析法)
    本实验采用SLR分析法,对PL/0语言的算术运算进行语法分析。本程序由我个人独立完成,代码为C++98,因此可能较丑陋,且不能保证完全正确,还请见谅 ( ̄□ ̄;)一.设计思想1.文法因实验二、三中的文法均不是LR(0)文法,所以本次实验采用了实验三中的文法进行SLR分析。(1)EBNF<表达式>::=[+|-]<......
  • 用声明式宏解析 Rust 语法之 enum parser
    上一篇用声明式宏解析Rust语法我们的"macroparser"解析了function和struct,这篇来尝试parse一下更复杂的enum为什么说enum更复杂?因为它不像struct结构内都是identifier:type那样规律。enum内部的EnumItem可能是一个简单的identifier,也可能是tuple或......
  • 用声明式宏解析 Rust 语法
    在上一篇Rust声明式宏中的Metavariables有哪些的基础上,今天尝试解析一下Rust中的几种item。我们知道一个crate是由item组成的,每一个fnstructenumimplmod等定义都是一个item,这篇文章就简单解析一下Function和structFunction先看一个最简单的函数fnfoo(......
  • Linux 使用交叉编译工具链编译boost
    参考:Boost交叉编译执行./bootstrap.sh后,会生成project-config.jam。修改project-config.jam文件:#if!gccin[feature.values<toolset>]#{#usinggcc:;#}if!gccin[feature.values<toolset>]{usinggcc::/cross-tools/aarch64-poky-linux-gcc--sysro......
  • CMakeLists --- 设置rpath_link方法 编译报错try using -rpath or -rpath-link)
    指令:add_link_options("LINKER:-rpath-link,${THIRD_LIBS_DIR}")THIRD_LIBS_DIR:需要链接的库的目录作用:编译生成一个可执行文件时,依赖一个动态库A,动态库A同时又依赖动态库B.如果我们没有显示集成动态库B时,链接器会去-rpath-link设置的目录中寻找依赖项。 例子:1.库A,依赖库B......
  • QGIS3.22.0+VS2019 window10编译
    首先感谢博客 济南友泉软件有限公司提供的顺序教程。博客地址:https://blog.csdn.net/qq_26221775/article/details/122792445这篇博客主要是表示编译时遇到的坑。1.一定使用vs2019进行编译。我刚开始想使用vs2017编译。因此遇到了两个坑。(1)vs2017编译qgis_cor......