# valfun_ite **Repository Path**: jtdx/valfun_ite ## Basic Information - **Project Name**: valfun_ite - **Description**: R和Julia在宏观经济建模运行速度的比较 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-03-26 - **Last Updated**: 2022-07-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 宏观经济建模:R和Julia谁更快? ## 1. 引言 最近基于Krusell and Smith (1998)的方法用R代码跑了一个异质代理人模型,花了将近6个小时资产分布函数才收敛。考虑到该速度太慢,便想切换到以快著称的Julia语言上来。 在切换之前,我想在一个简单模型下考察Julia到底有多快。便用Julia语言把《RBC of ABC》第四章关于劳动内生情况下的典型代理人模型用状态空间散点法的值函数迭代算法跑了一遍,发现Julia代码竟然比R慢10倍。R语言用了24s,Julia用了240s。 该典型代理人模型的详细表述和算法、R代码见[这里](https://common2016.github.io/chenpu.github.io/files/StateSpaceScatters.html)。 为便于比较,我把上述链接下的R代码重新进行了一个封装,和Julia代码一起,存在了gitee上,以下是网址: https://gitee.com/jtdx/valfun_ite/tree/master 运行方式: - R代码: 使用RStudio打开“R代码.Rproj”,然后再打开“状态空间散点法_封装版.R”,直接运行即可。 - Julia代码: 打开“状态空间散点法.jl”直接运行即可。 ## 2. 哪个函数慢? 比较迷茫,为什么Julia会慢,慢在哪里,我考察了代码中调用的三个主要函数的运行时间。使用电脑的配置为:MacOS Monterey, 内存16G,Apple M1芯片。 各函数时间消耗列表如下, 函数|语言|时间 ---|---|--- `para_cmp`|Julia|124ns `para_cmp`|R|574ns `decise_range`|Julia|2.9ms `decise_range`|R|122us `findmax` (在Julia中命名为`searmax`)|Julia|57.366ms `findmax` (在Julia中命名为`searmax`)|R|1.08ms 注:时间单位换算:1s=1000ms, 1ms = 1000us。时间测算在Julia中使用了`BenchmarkTools.@btime`,在R语言中用的`bench::mark`. 可以看到调用的三个主要函数,除了第一个`para_cmp`外,其他两个Julia都比R慢太多。最慢的是`findmax`,该函数又主要调用了`optimize`函数,下表是`optimize`函数的运行时间,Julia慢了60倍。 函数|语言|时间 ---|---|--- `Optim.optimize`|Julia|0.06s `optimize`|R|1.03ms Julia一向以快著称,为何在这里出现了例外?我尝试了多种加快Julia的运行方式,包括剔除函数中的全局变量等,但仍然没有效果。