小白求问如何修改如下Julia代码使得运行时间更快?


#1

想问下论坛里面的大佬,怎么可以让julia更快一些啊?
我用c++十几秒就跑出来了,但是Julia要用10分钟…不是说Julia运行时间一般是接近C++,或者两三倍时间嘛
而且我用Julia跑出来的结果和用matlab跑出来的结果相差较大,这是怎么回事…

实例代码如下。
请大家见谅,我还只是个仅入门了两天的小白。这个代码循环较多,且没有任何函数以及模块(用函数和模块会使运行效率更高吗?),希望大佬帮我改改,优化一下,提高下运行效率~~~
给大家坐下啦!
附代码中的N500K4.txt在下面链接:
链接:https://pan.baidu.com/s/1hxaqcZ_Q1Z_wreHzD9ZbIg 密码:4m9q


#2

你需要把这些东西都写在函数里,然后阅读一下这个先简单改一遍?

https://docs.julialang.org/en/stable/manual/performance-tips/


#4

好的 谢谢 我学习学习~ 大佬看到这么简单的程序能不能帮着先改一改呀~ ![:joy:]


#6

给你参考一下,你先整理整理你的代码吧,不是我说写的太乱了。。。没有想看的欲望。。。


#7

先把你的这些代码,分一分,放到一个函数里面去。然后把全局变量都去掉,弄成函数参数。


#8

谢谢~~ 我想问下,Julia的函数有调用的前后顺序之分吗?比如主函数在前面的后需要对后面的函数进行声明?


#9

没有,只要你定义了就行。例如

foo1(x) = foo2(x)
foo2(x) = x

#11

Roger大大,这是我修改之后的版本,已经没有问题了,运行的也挺快的~
谢谢你!!
你可以帮我看看哪里还可以优化吗?我接下来还需要在这个基础上写一个循环~~~


#12

Roger大大,小白还有几个问题。

  1. 就是之前已经定义过变量的值了,例如a,我下面调用了一个函数,我需要将a写入参数里面吗?是不是全局变量a不用写入函数参数,但是其他变量需要写入?

  2. 如果函数嵌套的话,例如里面的函数需要调用参数b,外面的函数参数已经包含了参数b,这时里面的函数还是需要在参数部分写上参数b?


#13

正经的代码中不建议用非const的global,很容易导致效率崩盘。我个人不太喜欢函数定义嵌套,闭包套多了调试起来也费劲吧。


#14

哦哦~好的,谢谢Gnimuc,global const a=1,这样是可行的是吗?


#15

是的,还有就是在函数里面用const关键词是无效的,如果是可变参数,就放到函数的argument里,如果真的是常量,就直接定义成global const, 命名习惯全大写+下划线:I_AM_CONST


#16

谢谢!!! Gnimuc,你可以帮我看看现在我改完后的程序吗?已经没有任何问题了,运行速度也上去了,你看看哪里还可以优化哒?


#17

优化到什么程度要看需求,如果已经能满足应用了就OK。

做优化通常需要借助于Profiler,对Julia很熟的话,小问题可以肉眼profile,但细节的还是要用Profiler。要用Profiler,必须要把代码完整的跑起来,所以需要一个MWE(minimal working example)。有时候写一个MWE也挺费劲的,所以还是自己学一下Profiler的用法为妙。


#18

你这代码写的怎么跟fortran 一样。。。。


#19

能给个样本文件"N500K4.txt"吗?程序是需要运行的,没有数据运行一下,谁都很难帮你改。还要告诉我们你用的库具体有哪些。这样其他人才能复制你的问题。


#20

是吗:joy:没有用过Fortran欸…要是能像Fortran那样运行的快就好了,你有什么建议吗?


#21

可以呀 ~ 这已经是我改完之后的版本了,但我知道还有很多不足的地方,能不能帮我改改, 谢谢啦~~~~~ 链接:https://pan.baidu.com/s/1hxaqcZ_Q1Z_wreHzD9ZbIg 密码:4m9q


#22

(他是在说你这个代码写的真烂…)


#24

… 皱眉头的表情… 那怎么把代码写好一点啊,我贴出来就是想寻求帮忙啊,这已经是我自己改过的版本了,然后你们一个个都没有正面回答我怎么把这个改好,还略加嘲笑:frowning_face:…