GNU、Clang/LLVM到底是些什么东西

说实话查了一些资料还不是很清楚,大概给出一个简单的理解。

GNU Compiler Collection(GCC)是GNU推出的一套开源编译工具链。包括了make,sed,Emacs,glibc,gdb和gcc等工具,和Linux内核共同构成一套系统。支持C、C++、Obj-C、Fortran、Ada、Go等语言。

Clang/LLVM是一套编译工具链,受到Apple的支持。包括中间语言LLVMIR,调试器,LLVMC++标准库,静态分析工具等。近年来包括Swift、Rust等都在使用LLVM作为编译框架。Clang是Apple开发用来取代GCC的前端编译器,与LLVM兼容性更好。

Visual C++是微软的一套编译工具链,在Linux平台的支持比较差。

MinGW(Minimalist GNU for Windows)是一个工具集,在Windows上提供了GNU下的多种工具,包括了GCC等。编译得到的结果运行在Windows系统之上。

Cygwin是位于Windows系统下的POSIX环境。在Windows上提供了Unix\Linux命令的执行支持环境。将Linux环境的程序迁移到Windows中,实际上通过dll文件在Windows系统中模拟了Linux的系统调用。

OpenMP是跨平台的并行API,更适用于一台多核机器上的并行处理。通过在代码中添加pragma omp的指令使得编译器自动生成并行执行的代码。

MPI(Message Passing Interface)是跨平台的并行API,适用于多个运算节点间的通信和并行处理。

OpenACC是一个计算加速API,支持CPU/GPU结构,可以提供科学计算等各种加速功能。通过在代码中添加pragma acc的指令使得运算得到加速。

参考资料: GCC和Clang/LLVM的比较

Lei Yang
Lei Yang
PhD candidate

My research interests include visual speech recognition and semantics segmentation.