Julia机器学习核心编程.2(LLVM和JIT)

LLVM本来是伊利诺伊大学的一个研究项目,其目的是创建基于静态单一任务(SSA)的现代的、类型安全的编译方法。它拥有底层操作,具有灵活性,并且具有可以清晰地表示所有高级语言的能力。它实际上是模块化、可重用编译器和工具链技术的集合。LLVM不用对传统虚拟机做太多修改,下面列举LLVM的一些特性。

· 创建LLVM的核心库提供了现代的源和目标的独立优化,并且支持许多流行CPU的代码生成,这些库是围绕LLVM中间表示(LLVM IR)构建的。

· Clang是一个LLVM原生的C/C++/Objective-C编译器,旨在提供惊人的编译速度(例如,在调试编译Objective-C代码时比GCC快3倍),可以提供非常有用的错误警告,并且为构建优秀的源代码工具提供一个良好的平台。

· DragonEgg将LLVM优化器和代码生成器与GCC解析器集成在一起,这使得LLVM支持编译Ada、Fortran和GCC编译器支持的其他语言,并访问Clang不支持的C语言特性。

· LLDB项目以LLVM和Clang提供的库为基础,提供了一个出色的本地调试器。它具有Clang AST和表达式解析器、LLVM JIT、LLVM反汇编器等诸多功能,因此提供了出色的使用体验,并且在加载符号时相比GDB也要快得多,且内存效率更高。

· SAFECode项目是针对C/C++程序内存安全的编译器。它通过运行时检查代码,以便在第一时间检测出内存安全错误(例如,缓冲区溢出),保护软件免于安全攻击,也可以像Valgrind一样用作内存安全错误调试工具。

在计算中,Julia使用JIT编译(也被称为动态翻译),编译执行在程序运行时,而不是在程序运行前。在大多数情况下,代码需要被转换为机器代码,然后直接执行,但也可以被转换为另一种格式,JIT编译器通常不断地分析正在执行的代码,并且识别代码的一部分,使得从编译中获得的性能加速超过编译该代码的性能开销。另外,LLVM JIT编译器可以在运行时从程序中优化掉不必要的静态分支,此功能用于Mac OS X 10.5 Leopard的OpenGL管道,以支持所缺少的硬件功能。

这里解释了一部分为毛julia这么秀的一些原因,日后会慢慢揭秘.

(0)

相关推荐

  • c 各种编译器(gcc clang)

    很多时候,出现一些类似GNU,GCC,CLANG,LLVM等与编译器有关的名词的时候,都不太清楚它到底是干嘛的,理解这些东西后, 对于xcode中很多配置型的需求修改起来都会得心应手,因此有必要了解透 ...

  • java虚拟机JVM执行引擎(工作过程、JIT等)

    文章目录 11. 执行引擎 11.1 执行引擎概述 11.2 执行引擎的工作过程 11.3 java代码编译和执行的过程 11.4 JIT编译器 11.5 方法调用计数器 11.6 回边计数器 11. ...

  • C语言编译器之二,Clang

    二.Clang编译器 Clang编译器是由APPLE公司的编译器大牛Chris Lattner主导下编写的,其目标是替换大名鼎鼎的GCC编译器: 2.1.Clang和GCC编译器架构 从源代码到可执行 ...

  • Julia机器学习核心编程.1

    其实这个地方是应该有一个juliahitory的目录的,可是没有 只能曲线救国,这样搜索的用了 Ctrl+R 在终端里面搜索用过的命令 shift+?进入帮助模式 分号进入shell模式 报错打脸了 ...

  • Julia机器学习核心编程.4

    在win上加e参数,执行这个代码.不可以.类unix可以试试,我有空操作 我超级喜欢这种循环写法 我这个传参写法没有错,不知道这么久没有出来 与其他编程语言一样,Julia可以更改存储在变量中的值或改 ...

  • Julia机器学习核心编程.3

    一般来说,解决问题的思路是先找出问题的来源,然后将问题分解成若干个小问题逐一解决.同时,还需要考虑所有情况,以保证该方法能完整地解决问题.而编程范式就是一种将编程活动分解的思想,虽然编程范式有很多种, ...

  • Julia机器学习核心编程.6

    一些常规语言都有的东西 提一嘴类型转换,指更改变量的类型,但是维持值不变的操作 数组是对象的可索引集合,例如整数.浮点数和布尔值,它们被存储在多维网格中.Julia中的数组可以包含任意类型的值.在Ju ...

  • Julia机器核心编程.5

    julia的浮点数 bits这个函数好像没有了,我xiang给你看下这个值 的二进制表示在最全面的符号位不同 指数形式的浮点数 代码01行使用f代替e来表示这是一个Float32类型的值.代码03行使 ...

  • Julia机器核心编程.函数

    函数是任何编程语言都不可缺少的一部分,因为函数对功能进行模块化封装,提高了程序的可读性和可重用性.Julia也不例外,它不仅提供了一些内置的库函数,同时也允许用户自定义函数. 在Julia中使用fun ...

  • Julia机器核心编程.7

    可以说,无论是R(data.frame)还是Python(Pandas)中的表格都是统计计算中最重要和最常用的数据类型.这是因为真实世界中的数据大多是表格式的,不能用简单的DataArray来表示. ...

  • Julia机器核心编程.高阶函数

    我这个起名好麻烦,都说函数完了.有整出来一个高阶函数,比较麻烦. 嵌套函数,简单来说,就是在函数中定义函数. 闭包是一个函数对象,它可以记住封闭范围中的值,即使它们不在内存中也是如此. 嵌套函数有助于 ...

  • Julia机器核心编程.作用域

    当我们在Julia中定义函数时,也可以在函数体内定义变量.在这种情况下,该变量在该函数的局部范围内有效,因此称为局部变量.而未在函数体内声明的变量在全局范围内有效,因此称为全局变量. 不同代码块中的变 ...