Compiler 4: CFG, Parsing

CFG Terminal: 对应loop,对应if,对应XX Productions: 产生式 Derivation推导 CFG可以推导很多不同的式子 Notations Terminologies 文法的句型 这里我们看到,文法 最左推导 & 最右推导 在编译原理中,最左推导和最右推导都是从文法的开始符号(Start Symbol)出发,通过不断用产生式替换非终结符,逐步推导出一个句子的

Compiler 2: Regrex, Finite Automata

语言运算 Regular Expression 形式语言 For describing Languages / Patterns if, else, ... 形式化定义正则表达式(regular expression, regexp),给出了一系列归纳规则(induction rules) Basic $\\epsilon$ is a regexp, $L(\\epsilon) = {\\epsilon

Compiler 3: NFA, DFA, CFG

第一章最后一部分+CFG Convert NFA to DFA The algorithm here is to explore the state 是在move后能达到的所有状态 !] 我们用达到闭包的个数,来判定目前的状态 Start State A (We have 0), Acce

Compiler: Intro

Operations on Languages Languages: accountable for strings Lexer Lexical Analyzer(词法分析器,也叫 Scanner)在编译器中扮演着 前端第一步的角色。它的主要任务是把源代码(程序员写的字符序列)转化为 Token 序列,供后续的语法分析器(Parser)使用。下面我分点介绍它的作用: 1. 输入与输出 输入:源程序

循环优化:多面体优化

多面体模型最关注的(可能也是唯一关注的)就是循环的优化。因此对于多面体模型,它只会把一段段程序当成一堆嵌套循环,至于循环里面的内容他是不大关心的。因此在整个框架中,重要的概念只有4个:Domain,instance,dependency和schedule Statement与Instance: 接触过编译器的同学知道Instruction或者Statement,代表一行代码。而在循环中的代码,每个

gcc是如何实现OpenMP parallel for的

学习网页 本次我们主要会聚焦team.c 和loop.c: gcc/libgomp/loop.c at master · gcc-mirror/gcc gcc/libgomp/team.c at master · gcc-mirror/gcc OpenMP For Construct dynamic 调度方式实现原理和源码分析 - 一无是处的研究僧 - 博客园 TL; DR TL;DR: 大概id

OpenMP在gcc里是如何启动的?

图片未显示锁竞争(Lock Contention = 0s),表明 PyTorch 或 MKL 可能绕过 GOMP 的全局任务锁,使用原子操作或分区任务。 /* This structure is used to communicate across pthread_create. */ struct gomp_thread_start_data { void (*fn) (void *); vo

OpenMP在llvm里是如何实现的?

基础知识:编译器的结构 编译器中的“前端”和“后端”是两个重要的组成部分,它们负责编译过程的不同阶段。我们可以将编译器看作一个“处理流水线”,前端和后端各自执行不同的任务。 前端:负责将源代码解析成抽象语法树并生成中间代码,确保代码的语法和语义正确。 词法分析、语法分析、语义分析和中间代码生成。 后端:负责优化中间代码并生成目标机器代码,最终输出可执行文件。 优化、目标代码生成、汇编、链接。 前端