• 2024-10-30LLVM技术在GaussDB等数据库中的应用
    万物互联的态势下,数据量的激增使得“如何提升数据处理性能”成为各家数据库共同面临的挑战。作为编译优化技术的代表,基于LLVM的CodeGen技术,能为每个查询生成定制的机器码替代原本的通用函数,减少实际查询时冗余的条件逻辑判断、虚函数调用并提高数据局域性,从而达到提升查询整体性能
  • 2024-10-29【转载】LLVM 简介
    LLVM简介(一) LLVM项目LLVM是一个开源的项目,是一个编译器框架,是一系列模块化、可重用的编译器以及工具链技术的集合。LLVM的核心是LLVM库。同时LLVM还实现了一些周边工具。LLVM的一个设计思想是优化可以渗透在整个编译流程中各个阶段,比如编译时、链接时、运行时等。
  • 2024-10-29LLVM技术在GaussDB等数据库中的应用
    万物互联的态势下,数据量的激增使得“如何提升数据处理性能”成为各家数据库共同面临的挑战。作为编译优化技术的代表,基于LLVM的CodeGen技术,能为每个查询生成定制的机器码替代原本的通用函数,减少实际查询时冗余的条件逻辑判断、虚函数调用并提高数据局域性,从而达到提升查询整体性能
  • 2024-10-27《LLVM编译器原理与实践》新书推荐(已出版)
    《LLVM编译器原理与实践》,机械工业出版社出版,已于2024年10月出版。在京东、淘宝天猫、当当等网上都有出售。内容全面详实,实战实践示例多。全面阐述了LLVM原理、尤其突出LLVM实践实战技术,是目前网上全面解析LLVM的最新书籍,内容紧跟LLVM新时代和新潮流。本书内容经过机械工业出版社
  • 2024-10-15三大编译器
    编译器的一般构成三个部分:前端(frontEnd)+优化器(Optimizer)+后端(backEnd)前端:词法和语法分析优化器:承前基础+优化代码=更加高效后端:将中间代码转化为各个平台的机器代码!GCC可以处理C++FortranPascalObjective-CJavaAda等LLVM(LowLevelV
  • 2024-10-07clang-format的代码格式化
    1.VSCodesettings.json{"C_Cpp.default.intelliSenseMode":"windows-msvc-x64",//"C_Cpp.clang_format_fallbackStyle":"Google","C_Cpp.clang_format_path":"D:/software/clang+llvm-18.1.8-x86_64-p
  • 2024-09-15Debian 中安装 llvm 最新版
    在github上只能下载一个clang和llvm的捆绑的二进制文件包,clang+llvm-18.1.8-x86_64-linux-gnu-ubuntu-18.04.tar.xz这个二进制文件,那么可以通过以下步骤将其安装到Debian系统中:步骤1:解压文件首先,你需要解压这个.tar.xz文件。假设这个文件位于你的主目录下,你可以这
  • 2024-09-13demo:tvm优化resnet50 llvm后端cpu上推理
    这是一个完整的例子。使用预训练的resnet50模型,经过tvm优化调整,target=llvm,在cpu上进行推理。最后打印结果是1这个索引代表goldfish importonnxfromtvm.contrib.downloadimportdownload_testdatafromPILimportImageimportnumpyasnpimporttvm.relayasrel
  • 2024-08-22减小编译出来的 .so 文件的尺寸方法
    要减小编译出来的.so文件的尺寸,可以通过去除符号表、调试信息等非必要的内容来实现:一、Linux系统下方法1.使用strip命令strip命令可以删除.so文件中的符号表和调试信息,从而减小文件大小。strip--strip-unneededlibyourlibrary.so--strip-unneeded参数只会
  • 2024-08-21【源码解析】C/C++开源代码解析引擎
    1. 背景说明针对Simulink或其他MBD环境的模型生成代码,及其他的外部C/C++代码工程,做相应的后端代码优化处理工作,例如如下场景,统计代码内的全局变量声明及其内存占用情况;提取代码内的逻辑判断条件结合Z3Prover定理证明器进行形式化验证;...因此需要对C/C++代码进行语法
  • 2024-08-17LLVM - 编译器后端-目标描述
    一:概述        LLVM具有非常灵活的架构。我们可以向其添加新的目标后端。后端的核心是目标描述。在本篇文章中,我们将学习如何在LLVM中添加一个CPU后端。        在本章中,我们将涵盖以下内容:        •为新的后端搭建环境,学习M88kCPU架构,并介绍从
  • 2024-08-08LLVM中四种寄存器分配算法及开启选项
    在LLVM编译器中,一共有四种寄存器分配算法:BasicRegisterAllocator、FastRegisterAllocator、PBQPRegisterAllocator、GreedyRegisterAllocator。FastRegisterAllocator这种分配器是局部的,作用于各个基本块,它尽量地将值保持在寄存器中并重用它们。BasicRegisterAl
  • 2024-08-07VS设置 LLVM-Clang 编译器进行编译C++项目
    在VS中默认的C++编译器一般为MSVC编译器,可以根据自己的需要将其设置为LLVM-Clang编译器。主要有两种方案:1)直接使用VisualStudioInstaller来自动下载对应的Clang编译器和构建工具,后续无需再进行配置,便可直接使用。2)使用自己编译或者单独下载的LLVM-Clang编译器,以及通
  • 2024-08-05给vscode配置clangd插件
    一般情况下,我们在vscode里编辑C/C++代码时用的都是微软的c++package,但是这个插件包很多时候无法正确分析出语法,导致大量虚假错误报告,为了解决这个问题,我们首先禁用掉C++插件包,然后准备更换clangd。clangd是一个基于Clangd的分析服务器,方便我们分析代码语法。为了使用它,
  • 2024-08-04LLVM编译Fortran语言的全过程
    以一个给数组求和的程序来作为例子,编译器使用的是LLVM18.1.8!sum.f90programsum​ integer,parameter::n=30 real(4),dimension(n)::array real(4)::result integer::i​ doi=1,n   array(i)=i enddo​ 
  • 2024-07-22GMSSL2.x编译鸿蒙静态库和动态库及使用
    一、编译环境准备1.1开发工具DevEco-Studio下载。1.2SDK下载​ 下载编译第三方库的SDK有两种方式,第一种方式从官方渠道根据电脑系统选择对应的SDK版本,第二种方式通过DevEco-Studio下载SDK。本文只介绍通过DevEco-Studio下载SDK的方式。安装SDK到本地根据SDK安装位
  • 2024-07-12关于最近看到的一些前沿技术
    看了一下新技术,感觉自己所了解的技术真的太窄了。什么新技术呢? WebAssembly官网https://webassembly.org https://developer.mozilla.org/zh-CN/docs/WebAssemblyWebAssembly是一种新的编码方式,可以在现代的Web浏览器中运行——它是一种低级的类汇编语言,具有紧凑的
  • 2024-07-12编译器
    本页面主要介绍了各系统下各类编译器/解释器的安装步骤。GCCWindows手动下载安装访问MinGW-w64的下载页面,有多个构建版本。方便起见,我们使用由WinLibs提供的构建版本。首先前往WinLibs下载最新的安装包,选择合适的版本,本文选择了GCC12.3.0+LLVM/Clang/LLD/LLDB16.0
  • 2024-07-07调试 hipcc 的llvm llc gpu目标代码生成模块
    源码:hello_vectorAdd.hip:__global__voidvectorAdd(constfloat*A,constfloat*B,float*C){inti=blockDim.x*blockIdx.x+threadIdx.x;C[i]=A[i]+B[i]+0.0f;}Makefile:x.O1.s:hello_vectorAdd.hip ../../local_amdgpu/bin/clang++./he
  • 2024-07-06从零开始教你写一个MLIR Pass
    笔者在去年写了一篇LLVMPass的教程,现在从事MLIR的开发近1年了,写点教程回馈下社区。MLIR(Multi-LevelIntermediateRepresentation,多层中间表示)是LLVM之父(博士期间开发的LLVM)的ChrisLattner带领团队开发的编译器基础设施,其增强了LLVMIR表达能力,而且其是关注Polyhedral(多
  • 2024-07-05编译器(1)AI for compiler
    简介使用人工智能技术来改进编译器的性能和功能是一个激动人心的领域。以下是一些利用人工智能技术来改进编译器的方法和应用:自动优化:利用机器学习和深度学习技术,可以训练模型来自动优化编译器生成的代码。例如,可以使用神经网络来学习代码优化的模式和规律,从而提高编译器生
  • 2024-07-05Linux 交叉编译(toolchain) ARM aarch64版 libc++.so 库
    前言全局说明libc++源码libc++是LLVM项目提供的一个C++标准库的实现,它是KonaKart等项目的基础。由于libc++是开源>的,因此您可以在其官方仓库中找到源代码。一、说明如果您想要阅读libc++的源代码,可以按照以下步骤进行:访问libc++的官方GitHub仓库:https://github.com/llv
  • 2024-07-01编译—配置化TOML与编译组件
    硬件功能模块化,软件功能配置化(业务化)软件功能配置化软件系统模块化设计是实现可配置性的基础。通过将系统拆分为多个独立的模块,可以使得每个模块都拥有独立的配置选项引入配置文件,提供可视化配置界面,实现动态参数调整-运行时对部分参数进行调整-热插拔配置文件ini
  • 2024-06-30LLVM 中的指令调度器及其工作过程
    LLVM中的指令调度器及其工作过程概述LLVM中实现了多种指令调度器,分别作用于后端流程的不同阶段,包括指令选择阶段的指令调度器、寄存器分配前的指令调度器和寄存器分配后的指令调度器这三类调度器都有llc命令行选项可以控制其使能或禁用在寄存器分配前,基本块中的操作数
  • 2024-06-23指令选择原理与实现方式
    概述编译器前端将源代码转换为等效形式的IR,IR经过优化器优化后传递到后端,由代码生成器将IR代码转换为汇编代码或目标代码在这个过程中,后端首先通过指令选择器目标机器支持的指令来实现IR指令至于指令的顺序,可由后续的指令调度器决定指令选择器指令选择器选择指令的基