想问下论坛里面的大佬,怎么可以让julia更快一些啊?
我用c++十几秒就跑出来了,但是Julia要用10分钟…不是说Julia运行时间一般是接近C++,或者两三倍时间嘛
而且我用Julia跑出来的结果和用matlab跑出来的结果相差较大,这是怎么回事…
实例代码如下。
请大家见谅,我还只是个仅入门了两天的小白。这个代码循环较多,且没有任何函数以及模块(用函数和模块会使运行效率更高吗?),希望大佬帮我改改,优化一下,提高下运行效率~~~
给大家坐下啦!
附代码中的N500K4.txt在下面链接:
链接:https://pan.baidu.com/s/1hxaqcZ_Q1Z_wreHzD9ZbIg 密码:4m9q
Roger
2018 年8 月 14 日 08:45
2
好的 谢谢 我学习学习~ 大佬看到这么简单的程序能不能帮着先改一改呀~ ![ ]
Roger
2018 年8 月 14 日 09:10
6
给你参考一下,你先整理整理你的代码吧,不是我说写的太乱了。。。没有想看的欲望。。。
这里希望大家可以列出一些提高代码性能的建议,方便新手参考。因为我发先很多人对阅读英文的 performance tips有抵触。
但是也希望新手在阅读这部分之前有心理准备:你要按照Julian的方式,而不是Pythonic的方式写代码,才会比较自然然后也有不错的性能。什么意思呢?举个例子
Python里面我们喜欢直接在全局变量里面写东西
import numpy as np
n = 100…
Roger
2018 年8 月 14 日 09:30
7
先把你的这些代码,分一分,放到一个函数里面去。然后把全局变量都去掉,弄成函数参数。
谢谢~~ 我想问下,Julia的函数有调用的前后顺序之分吗?比如主函数在前面的后需要对后面的函数进行声明?
Roger
2018 年8 月 14 日 09:44
9
没有,只要你定义了就行。例如
foo1(x) = foo2(x)
foo2(x) = x
Roger大大,这是我修改之后的版本,已经没有问题了,运行的也挺快的~
谢谢你!!
你可以帮我看看哪里还可以优化吗?我接下来还需要在这个基础上写一个循环~~~
Gnimuc
2018 年8 月 14 日 11:22
13
正经的代码中不建议用非const的global,很容易导致效率崩盘。我个人不太喜欢函数定义嵌套,闭包套多了调试起来也费劲吧。
哦哦~好的,谢谢Gnimuc,global const a=1,这样是可行的是吗?
Gnimuc
2018 年8 月 14 日 11:38
15
是的,还有就是在函数里面用const关键词是无效的,如果是可变参数,就放到函数的argument里,如果真的是常量,就直接定义成global const, 命名习惯全大写+下划线:I_AM_CONST
谢谢!!! Gnimuc,你可以帮我看看现在我改完后的程序吗?已经没有任何问题了,运行速度也上去了,你看看哪里还可以优化哒?
Gnimuc
2018 年8 月 14 日 11:50
17
优化到什么程度要看需求,如果已经能满足应用了就OK。
做优化通常需要借助于Profiler,对Julia很熟的话,小问题可以肉眼profile,但细节的还是要用Profiler。要用Profiler,必须要把代码完整的跑起来,所以需要一个MWE(minimal working example)。有时候写一个MWE也挺费劲的,所以还是自己学一下Profiler的用法为妙。
1 个赞
能给个样本文件"N500K4.txt"吗?程序是需要运行的,没有数据运行一下,谁都很难帮你改。还要告诉我们你用的库具体有哪些。这样其他人才能复制你的问题。
是吗 没有用过Fortran欸…要是能像Fortran那样运行的快就好了,你有什么建议吗?
可以呀 ~ 这已经是我改完之后的版本了,但我知道还有很多不足的地方,能不能帮我改改, 谢谢啦~~~~~ 链接:https://pan.baidu.com/s/1hxaqcZ_Q1Z_wreHzD9ZbIg 密码:4m9q
… 皱眉头的表情… 那怎么把代码写好一点啊,我贴出来就是想寻求帮忙啊,这已经是我自己改过的版本了,然后你们一个个都没有正面回答我怎么把这个改好,还略加嘲笑 …