3

我不知道它是否适合问这个问题。但是,为什么 Apple 选择使用OpenCL/OpenGL 的代码llvm及其clang实现?它给他们带来了什么好处以及如何带来的好处?请原谅我对这个话题的无知,我对此知之甚少。

4

3 回答 3

5

Apple 创建 Clang 作为 GCC 的替代品,用于 C/C++/ObjC 和 ObjC++。LLVM 的创建者在 Apple 的编译器部门工作。在与主持项目的伊利诺伊大学的共同努力下,Apple 创建了 GCC、GDB [参见 LLDB]、libstdc++ [参见 libc++] 和几个新项目的完整替代品。

GPLv3 是压垮苹果对 GCC 贡献兴趣的最后一根稻草,这也是苹果在 GCC 4.2.x 中结束它的原因。

LLVM/Clang 正在整个行业迅速取代 GCC。

LLVM 现在是一个名称的误称。

LLVM/Clang 中支持的当前目标硬件:

-- 针对 ARM -- 针对 CppBackend -- 针对 Hexagon -- 针对 Mips -- 针对 MBlaze -- 针对 MSP430 -- 针对 NVPTX -- 针对 PowerPC -- 针对 Sparc -- 针对 X86 -- 针对 XCore -- Clang 版本:3.3

很快添加了开箱即用的 AMD R600 代码库。

Clang 符合 C99。OpenCL 使用 C99 的一个子集。Clang 是免费提供的最完整的 C11 兼容编译器套件。

FreeBSD 已移至 LLVM/Clang 作为即将到来的 10.0 发行版的默认设置。

AMD 和 Nvidia 使用 LLVM/Clang 构建他们的 OpenCL 堆栈。

英特尔正在将他们的 OpenCL 和更多内容迁移到 LLVM/Clang。

谷歌全力支持 LLVM/Clang。同样适用于 Adob​​e、Sony、IBM、Cray 等。

GCC 是一团糟的架构。LLVM/Clang 的模块化使其改进速度和开发人员的选择具有更大的上限。

LLVM/Clang 3.2 的开发人员和用户指南现在非常可靠,3.3 主干添加了更多的文档来了解 LLVM/Clang 的好处。

高质量编译器代码的开发速度是首屈一指的。

于 2013-01-23T19:42:29.233 回答
2

直接来自 LLVM/Apple 开发人员

更多信息,PDF 幻灯片

LLVM 在运行时以两种不同的方式使用:

  1. 固定功能顶点处理管道中的运行时代码专业化。基本上,OpenGL 管道有很多参数(是否启用了雾?顶点是否有纹理信息?等),它们很少改变:执行完全分支的代码会淹没分支预测器并且性能很差。为了解决这个问题,代码被预编译为 LLVM .bc 形式,在运行时根据需要对代码进行专门化、优化和 JIT 编译。

  2. OpenGL 顶点着色器是使用一系列编程语言编写的小程序,具有高度特定于领域的特性(例如点积、纹理查找等)。在运行时,OpenGL 堆栈将顶点程序转换为 LLVM 形式,运行 LLVM 优化器通道,然后 JIT 编译代码。

(更多细节在上面的链接中)

于 2013-01-18T22:57:01.793 回答
0

因为它们有助于 Clang/LLVM 的开发,并且因为使用 LLVM/Clang 编译的源代码生成的二进制文件比 GCC 更快......

Clang 的开发人员声称,与 GCC 等竞争编译器相比,它减少了内存占用并提高了编译速度。为了支持他们的说法,他们提出,截至 2007 年 10 月,Clang 编译 Carbon 库的速度是 GCC 的两倍多,同时使用了大约六分之一的 GCC 内存和磁盘空间。

http://en.wikipedia.org/wiki/Clang

于 2012-10-22T20:15:05.350 回答