julia的优化?

julia> function fib1(n)
       if n==1
       return n
       else
       return n+fib1(n-1)
       end
       end
fib1 (generic function with 1 method)

julia> function fib2(n,s)
       if n == 1
       return s+1
       else
       return fib2(n-1,s+n)
       end
       end
fib2 (generic function with 1 method)

julia> fib1(10)
55

julia> fib2(10)
ERROR: MethodError: no method matching fib2(::Int64)
Closest candidates are:
  fib2(::Any, ::Any) at REPL[18]:2

julia> fib2(10,0)
55

julia> fib2(20)
ERROR: MethodError: no method matching fib2(::Int64)
Closest candidates are:
  fib2(::Any, ::Any) at REPL[18]:2

julia> fib2(20,0)
210

julia> fib1(20)
210

julia> time(fib1(100))
ERROR: MethodError: no method matching time(::Int64)
Closest candidates are:
  time() at libc.jl:206
  time(::Base.Libc.TmStruct) at libc.jl:205

julia> @time(fib1(100))
  0.000005 seconds (131 allocations: 7.734 KB)
5050

julia> @time(fib2(100,0))
  0.000007 seconds (5 allocations: 176 bytes)
5050

julia> @time(fib1(500))
  0.000005 seconds (5 allocations: 176 bytes)
125250

julia> @time(fib2(500,0))
  0.000010 seconds (5 allocations: 176 bytes)
125250

julia> @time(fib1(1000))
  0.000022 seconds (5 allocations: 176 bytes)
500500

julia> @time(fib2(1000,0))
  0.000009 seconds (5 allocations: 176 bytes)
500500

julia> @time(fib1(10000))
  0.000325 seconds (5 allocations: 176 bytes)
50005000

julia> @time(fib2(10000,0))
  0.000095 seconds (5 allocations: 176 bytes)
50005000

julia> code_native(fib1,(Int64,))
.text
Filename: REPL[17]
pushq %rbp
movq %rsp, %rbp
pushq %rsi
subq $40, %rsp
movq %rcx, %rsi
Source line: 2
cmpq $1, %rsi
jne L30
Source line: 3
movl $1, %eax
addq $40, %rsp
popq %rsi
popq %rbp
retq
Source line: 5
L30:
leaq -1(%rsi), %rcx
movabsq $fib1, %rax
callq *%rax
addq %rsi, %rax
addq $40, %rsp
popq %rsi
popq %rbp
retq
nopl (%rax,%rax)

julia> code_native(fib2,(Int64,Int64))
.text
Filename: REPL[18]
pushq %rbp
movq %rsp, %rbp
Source line: 2
subq $32, %rsp
cmpq $1, %rcx
jne L26
Source line: 3
incq %rdx
movq %rdx, %rax
addq $32, %rsp
popq %rbp
retq
Source line: 5
L26:
addq %rcx, %rdx
decq %rcx
movabsq $fib2, %rax
callq *%rax
addq $32, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)

  尾递归版应该是有优化的啊,为什么内存和执行时间都没明显差别?

时间: 2024-10-28 18:22:50

julia的优化?的相关文章

Julia 语言的一些尝试

前些天发现了Julia 这门编程语言后便决定对其进行一些尝试,便写了下面的小程序,也算是看看这门语言所谓的速度快到底是怎么快法. 整数累加: x=0 function fff() for i in 1:1000000000 global x +=i end println(x) end fff() x=0 for i in 1:1000000000 global x+=i end println(x) function fff() x::Int64=0 for i in 1:1000000000

详解 CUDA By Example 中的 Julia Set 绘制GPU优化

笔者测试环境VS2019. 基本介绍 原书作者引入Julia Sets意在使用GPU加速图形的绘制.Julia Set 是指满足下式迭代收敛的复数集合 \[ Z_{n+1}=Z_{n}^2+C \] 环境配置 跑这个例子的主要困难应该在于配置环境.这个程序依赖于openGL中的glut库.由于VS2019的整个软件架构发生了很大变化,一些链接库和头文件的位置都发生了改变,因此一些文章中的配置方法失效了. 首先我们需要获取glut库的头文件以及动态链接库. 点击这里cg-toolkit获取.安装成

OpenACC Julia 图形

? 书上的代码,逐步优化绘制 Julia 图形的代码 ● 无并行优化(手动优化了变量等) 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <openacc.h> 4 5 #define N (1024 * 8) 6 7 int julia(const float cre, const float cim, float zre, float zim, const int maxIter)// 计算单点迭代次数 8

Julia 1.0 正式发布,这是新出炉的一份简单中文教程

两天前,机器之心报道 MIT 正式发布 Julia 1.0 的文章引发了极大的关注(20 多万的阅读量),对此编程语言既有批判者也有推崇者.如机器之心了解到 Julia 在科学计算.数据处理行业很受欢迎.为了方便大家更了解这一新正式发布的编程语言,我们推荐 Julia 中文社区(中文社区介绍见文后)组织者之一罗秀哲 这两天的媒体报道可能让一些人有了恐慌,但是我现在有一个诚恳的建议就是如果你完全没有编程基础,时间也不多的话(时间多了不是想学啥学啥),我建议你先学一下 Python,这并不冲突,因为

iOS开发——项目实战总结&amp;UITableView性能优化与卡顿问题

UITableView性能优化与卡顿问题 1.最常用的就是cell的重用, 注册重用标识符 如果不重用cell时,每当一个cell显示到屏幕上时,就会重新创建一个新的cell 如果有很多数据的时候,就会堆积很多cell.如果重用cell,为cell创建一个ID 每当需要显示cell 的时候,都会先去缓冲池中寻找可循环利用的cell,如果没有再重新创建cell 2.避免cell的重新布局 cell的布局填充等操作 比较耗时,一般创建时就布局好 如可以将cell单独放到一个自定义类,初始化时就布局好

Java性能优化之JVM GC(垃圾回收机制)

Java的性能优化,整理出一篇文章,供以后温故知新. JVM GC(垃圾回收机制) 在学习Java GC 之前,我们需要记住一个单词:stop-the-world .它会在任何一种GC算法中发生.stop-the-world 意味着JVM因为需要执行GC而停止了应用程序的执行.当stop-the-world 发生时,除GC所需的线程外,所有的线程都进入等待状态,直到GC任务完成.GC优化很多时候就是减少stop-the-world 的发生. JVM GC回收哪个区域内的垃圾? 需要注意的是,JV

MySQL 索引优化原则

一.索引优化原则 1.最左前缀匹配原则,联合索引,mysql会从做向右匹配直到遇到范围查询(>.<.between.like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整. 2.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优

sql优化

1.all: 全表扫描,遍历全表找到匹配的行 index:索引全扫描,遍历整个索引来查询匹配的行 range:索引范围扫描,常见于<,>,>=,between等操作符 ref: 使用非唯一索引扫描或唯一索引的前缀扫描,返回匹配某个单独值的记录行 eq_ref:类似ref,区别就是使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配.简单来说,就是多表连接中使用primary key或者unique index 作为关联条件 const/system:单表中最多有一个匹配行,查询起

试试SQLSERVER2014的内存优化表

原文:试试SQLSERVER2014的内存优化表 试试SQLSERVER2014的内存优化表 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据库管理系统,而使用先进内存技术来支持大规模OLTP工作负载. 就算如此,要利用此新功能,数据库必须包含"内存优化"文件组和表 即所配置的文件组和表使用Hekaton技术. 幸运的是,SQL Server 2014使这一过程变得非常简单直接. 要说明其工作原理,我们来创