我最近问了以下关于Python的问题:Interpreter optimization in Python
假设我在x中有一个字符串,Python解释器是否聪明到足以知道:
string.replace(x, x)应该转换为NOP?
答案似乎是否定的(尽管Python解释器能够通过窥视孔优化器执行some optimizations )。
我不知道Julia中的等价表达式是什么,但是Julia是否能够优化这类比较明显的语句呢?
发布于 2014-08-12 01:16:31
依赖编译器
问题是,Julia能否向LLVM提供足够的信息,以便编译器能够优化操作?
从您的示例来看,是的,您可以使用code_native进行验证。例如,答案被预先乘以,对x的不必要赋值被优化,并且函数总是返回一个常量。
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。
案件一
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案件二
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
rethttps://stackoverflow.com/questions/25248696
复制相似问题