[Julia] Julia project creation with PkgTemplates package and executable file creation example

PkgTemplates는 Julia에서 project 쉽게 생성하는 것을 도와 주는 패키지 이다.

아래 예에서 /home/shpark/julia_test 아래 myApp3 라는 패키지를 만드는 법을 보여 준다


설치와 사용법은 아래와 같다.

julia>]
pkg> add PkgTemplates
julia> using PkgTemplates

# user : 원하는 아무 이름으로 (필수)
# dir  : 프로젝트 폴더를 만들 상위 폴더를 지정
#       아래에서는 "/home/shpark/julia_test" 폴더 아래 "MyApp3" 프로젝트 폴더가 생긴다.
# Template(;user="kpop",dir="/home/shpark/julia_test")("MyApp3")로도 사용 가능

julia> t = Template(;user="kpop",dir="/home/shpark/julia_test")
julia> t("MyApp3")
# 위와 같이 하면 라애 처럼 julia 프로젝트가 생성되고 필요한 파일들을 자동으로 생성 한다.


MyApp3
├── LICENSE
├── Manifest.toml
├── Project.toml
├── README.md
├── src
│   └── MyApp3.jl
└── test
    └── runtests.jl

# Julia에서 위에서 생성한 프로젝트 폴더를 지정하면 julia에서 프로젝트를 사용 할 수 있다.
# package를 추가 하면 Project.toml에 자동으로 추가 된다.
$ julia -q
julia> ]
pkg> activate /home/shpark/julia_test/MyApp3
(MyApp3) pkg> add Plots

이전 글에서 실행 파일 만드는 법을 게시 했는데 위의 프로젝트를 사용해서 다시 구성 해보자
참조 : https://julialang.kr/?p=2661
단 이번 예제는 Plots package의 plot을 사용한다.
compile되지 않은 상태에서 using Plots 시에 5.958146 초 정도 걸리며 plot 호출시 6초 정도 걸린다. plot, display까지 호출하면 14초 정도 걸린다.
실행파일을 구성하여 실행시 using Plots 는 0.001초 미만 , plot 호출은 0.01초 정도 걸리고 , plot과 display까지 호출하면 2.4초 정도 걸린다.

실행파일 만들기

MyApp3.jl 소스

module MyApp3
@time using Plots

function julia_main()::Cint
    try
        real_main()
    catch
        Base.invokelatest(Base.display_error,
            Base.catch_stack())
        return 1
    end
    return 0
end

function real_main()
    # 외부 입력 파라미터가 필요하면
    # ARGS를 사용하면 됨
    @time begin
        p = plot(rand(5), rand(5))
        display(p)
    end
    readline()
end

if abspath(PROGRAM_FILE) == @__FILE__
    real_main()
end

end # Module

precompile_app.jl

using MyApp3
push!(ARGS,"")
MyApp3.julia_main()

실행파일 만들기

julia> using PackageCompiler
julia> create_app("/home/shpark/julia_test/MyApp3","/home/shpark/julia_test/MyApp3/build",precompile_execution_file="/home/shpark/julia_test/MyApp3/precompile_app.jl",force=true)

실행결과

MyApp3.so를 직접 호출해서 성능 살펴 보기

$ cd /home/shpark/julia_test/MyApp3/build/bin
$ julia -q -JMyApp3.so
julia> @time using Plots
  0.000650 seconds (1.95 k allocations: 98.203 KiB)

julia> @time plot(rand(5), rand(5))
  0.001040 seconds (2.23 k allocations: 148.398 KiB)

julia> @time (p = plot(rand(5), rand(5)); display(p))
  2.461515 seconds (96.80 k allocations: 4.867 MiB)

MyApp3.so 를 사용 없이 julia에서 실행 한 경우

$ cd /home/shpark/julia_test/MyApp3/build/bin
$ julia -q
julia> @time using Plots
  6.006328 seconds (8.12 M allocations: 489.579 MiB, 1.48% gc time)

julia> @time plot(rand(5), rand(5))
  5.869596 seconds (9.80 M allocations: 489.327 MiB, 4.59% gc time)

# plot과 display를 같이 호출 하기 위해 julia를 다시 실행한다.
# 위에 plot 실행으로 plot이 이미 컴파일 되었기 때문에
julia> exit()
$ julia -q
julia> using Plots
julia> @time (p = plot(rand(5), rand(5)); display(p))
  14.251147 seconds (17.86 M allocations: 893.889 MiB, 1.43% gc time)

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다