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)
尾递归版应该是有优化的啊,为什么内存和执行时间都没明显差别?
julia的优化?的更多相关文章
- Julia 语言的一些尝试
		前些天发现了Julia 这门编程语言后便决定对其进行一些尝试,便写了下面的小程序,也算是看看这门语言所谓的速度快到底是怎么快法. 整数累加: x= function fff() : global x ... 
- julia,集Python、C++、R为一体!Julia 1.0重磅发布, MIT发布史上最强科学计算编程语言?创始人独家解答11个问题
		这个编程语言的新版本之所以受到整个人工智能界的关注,最主要的原因正是其将 C 语言的速度.Ruby 的灵活.Python 的通用性前所未有地结合在一起,支持并行处理,易于学习和使用,尤其适合科学和工程 ... 
- windows 版的julia repl 启动时间已经大大优化!
		julia 是一门语法类似python 偏向主要用于科学计算的语言,julia吸收了很多其它语言的优点,内置了大量函数,使用起来很方便. 之前windows下的 julia repl(交互解释器)启动 ... 
- 详解 CUDA By Example 中的 Julia Set 绘制GPU优化
		笔者测试环境VS2019. 基本介绍 原书作者引入Julia Sets意在使用GPU加速图形的绘制.Julia Set 是指满足下式迭代收敛的复数集合 \[ Z_{n+1}=Z_{n}^2+C \] ... 
- [转]OpenBLAS项目与矩阵乘法优化
		课程内容 OpenBLAS项目介绍 矩阵乘法优化算法 一步步调优实现 以下为公开课完整视频,共64分钟: 以下为公开课内容的文字及 PPT 整理. 雷锋网的朋友们大家好,我是张先轶,今天主要介绍一下我 ... 
- OpenACC Julia 图形
		▶ 书上的代码,逐步优化绘制 Julia 图形的代码 ● 无并行优化(手动优化了变量等) #include <stdio.h> #include <stdlib.h> #inc ... 
- 初试 Julia 语言    (转)
		原文地址: https://blog.csdn.net/seekiu/article/details/47397067 随着 Julia 1.0版本的推出,人工智能圈子比较炸锅, 好像这门小众语言要 ... 
- julia应用于自动驾驶汽车、机器人、3D 打印、精准医疗、增强现实、基因组学、能源交易、机器学习、金融风控和太空任务设计等多个领域
		编程界的新宠 Julia 发布 1.0 正式版本,多种优势集于一身2018-08-14 14:14 公司Julia 的累积下载次数超过 200 万,已被应用于自动驾驶汽车.机器人.3D 打印.精准医疗 ... 
- Julia:高性能 GPU 计算的编程语言
		Julia:高性能 GPU 计算的编程语言 0条评论 2017-10-31 18:02 it168网站 原创 作者: 编译|田晓旭 编辑: 田晓旭 [IT168 评论]Julia是一种用于数学计 ... 
随机推荐
- js插件添加打印功能
			<%@ page language="java" %> <%@ page contentType="text/html; charset=gb2312& ... 
- ORM艰辛路之EF
			经过一段时间对EF的研究,发现EF还是有很大的作用的,起码比自己写代码快捷许多.不过往往一个学习一个新东西开始都是简单的,后面才慢慢了解到它的许多不方便 优点: EF在对一个实体的增删改以及继承方面做 ... 
- setFeatureInt、android 自定义标题栏
			Android 自带的toolbar 往往不能很好的的满足我们的个性化要求.因此我们经常使用自定的的标题栏.而Android系统本身也允许我们自定以标题栏. 记录一下,自定义标题栏常遇到的问题.先上效 ... 
- Reactor模式通俗解释
			Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或 ... 
- 用systemd脚本自动启动node js程序
			vi /usr/lib/systemd/system/pano.service [Unit] Description=pano - main site of site_name.com Documen ... 
- (分享)FreeVideo1.6.1 VIP视频播放器(支持下载)
			软件名字:FreeVideo 版 本 号 :v 1.6.1 开发语言:易语言 压缩加壳:VMP 3.0 beta 皮 肤:易简约定制版(白色) 模块使用:乐易.精易.皮肤 主要技术:其实没啥 ... 
- asp.net上传文件超过了最大请求长度[转]
			错误消息:超过了最大请求长度 错误原因:asp.net默认最大上传文件大小为4M,运行超时时间为90S. 解决方案 1. 修改web.config文件可以改变这个默认值 ... 
- web开发以及分布式开发C/S   B/S系统结构
			分布式开发,由客户端发送请求给服务端,经服务端进行请求处理后返回处理结果(远程方法调用),在客户端发送请求,获取httpclient/okclient对象,传入参数(URL以及其余参数等),发送请求 ... 
- JS循环往table中写入行
			< script > $(function() { $('#test').click(function() { $.ajax({ url: '__APP__/Article/jsonTes ... 
- VUE 入门基础(7)
			八,事件处理器 监听事件 可以用v-on 指令监听DOM 事件来触发一些javaScript <div id="example-1"> <button v-on: ... 
