首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Julia vs Python编译器/解释器优化

Julia vs Python编译器/解释器优化
EN

Stack Overflow用户
提问于 2014-08-11 17:10:00
回答 1查看 391关注 0票数 5

我最近问了以下关于Python的问题:Interpreter optimization in Python

假设我在x中有一个字符串,Python解释器是否聪明到足以知道:string.replace(x, x)应该转换为NOP

答案似乎是否定的(尽管Python解释器能够通过窥视孔优化器执行some optimizations )。

我不知道Julia中的等价表达式是什么,但是Julia是否能够优化这类比较明显的语句呢?

EN

回答 1

Stack Overflow用户

发布于 2014-08-12 01:16:31

依赖编译器

问题是,Julia能否向LLVM提供足够的信息,以便编译器能够优化操作?

从您的示例来看,是的,您可以使用code_native进行验证。例如,答案被预先乘以,对x的不必要赋值被优化,并且函数总是返回一个常量。

代码语言:javascript
复制
julia> f()=(x=7*24*60*60)
f (generic function with 1 method)

julia> code_native(f,())
    .section    __TEXT,__text,regular,pure_instructions
Filename: none
Source line: 1
    push RBP
    mov  RBP, RSP
    mov  EAX, 604800
Source line: 1
    pop RBP
    ret

从类型优化

有时候,由于类型信息提供了更多的知识,所以它可以更进一步。相反,如果可能的话,应该避免--任何类型和全局--。

示例

在第一种情况下,需要进行比较,因为y可能大于256,但在第二种情况下,由于它只有1字节,它的值不能大于256,并且函数将被优化为始终返回1。

案件一

代码语言:javascript
复制
julia> g(y::Int16)=(y<256?1:0)
g (generic function with 1 method)

julia> code_native(g,(Int16,))
    .section    __TEXT,__text,regular,pure_instructions
Filename: none
Source line: 1
    push RBP
    mov  RBP, RSP
    cmp  DI, 256
Source line: 1 
    setl  AL
    movzx EAX, AL
    pop   RBP
    ret

案件二

代码语言:javascript
复制
julia> g(y::Int8)=(y<256?1:0)
g (generic function with 2 methods)

julia> code_native(g,(Int8,))
    .section    __TEXT,__text,regular,pure_instructions
Filename: none
    Source line: 1
    push RBP
    mov  RBP, RSP
    mov  EAX, 1
Source line: 1
    pop  RBP
    ret
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25248696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档