基于LLVM的编译锁机制技术研究与实现
2021-11-15巩令钦周清雷
计算机应用与软件 2021年11期
巩令钦 沈 莉 周清雷 胡 浩
1(郑州大学信息工程学院 河南 郑州 450000) 2(中国科学技术大学计算机科学与技术学院 安徽 合肥 230000) 3(无锡江南计算技术研究所 江苏 无锡 214083)
0 引 言
底层虚拟机(LLVM)是一款开源的编译器架构,目前已被苹果、Google、Facebook等各大公司采用[1]。LLVM在重用GCC前端高级语言处理的同时,提供了独特的编译器后端移植架构[2]。为了充分挖掘处理器的计算潜力,并行处理技术的实现显得尤为重要。软件层面中,并行处理技术通过多线程技术和向量化进行实现,其中基于多线程的并行处理技术对处理器的操作系统环境改动最小[3]。
在多线程环境下,程序的执行由传统的线性执行变为非线性执行。两个或多个线程访问相同的内存单元时,会造成系统内存的不一致性。由于多个线程共享同一块内存,当内存访问冲突时,将产生错误的执行结果,同一个进程内的其他线程也将受到影响[4]。严重的情况下将导致程序出现死锁,造成系统资源浪费。并行计算的同步原语和多线程的调度的正确性都是基于原子指令实现的,原子指令的实现方式决定程序的正确性以及运行性能的好坏[5]。所以,如何保证多线程环境下对内存操作的原子性,保证访问内存的正确性,是LLVM多线程编译支持中的重要课题。
原子指令实现的关键是保证对内存操作的原子性。原子性规定了指令对内存单元修改的顺序性。在对内存操作进行处理时,原子指令的读操作和写操作之间不能有其他指令对该内存单元进行修改[6]。……
登录APP查看全文
