2012-04-22 5 views
45

Julia 언어가 매번 스크립트를 컴파일하지만 줄리아 대신 바이너리를 컴파일 할 수 없습니까? 필자는 println 기능을 사용하여 작은 helloworld 스크립트를 사용하여 줄리아가 출력을 표시하는 데 2,3 초가 걸렸습니다. 매번 컴파일하는 대신 바이너리를 만들 수 있다면 더 좋을 것입니다.줄리아는 매번 스크립트를 컴파일합니까?

업데이트 :이 질문을 한 줄리아에서 몇 가지 변화가있었습니다. julia에 대한 업데이트를 더 이상 따르지는 않을지라도이 질문을 던졌기 때문에 유사한 내용을 찾고 있다면 julia를 따르는 사람들이 아래 답변과 의견을 살펴보십시오.

또한 스크립트를로드하는 데 약 150ms가 걸립니다.

답변

35

Julia JIT는 시작시 전체 표준 라이브러리를 컴파일합니다. 우리는 상황을 알고 있으며 현재 상황을 해결하기 위해 LLVM JIT 출력 캐싱 작업을하고 있지만 그 전까지는 REPL을 사용하는 경우를 제외하고는 아무런 방법이 없습니다.

+17

이것은 Julia 유치원에서 구현되었으며 0.3 릴리스에 포함될 예정입니다. 시동 시간이 크게 개선되었습니다. –

88

키노의 대답은 확실하지만 어쩌면 내가하고있는 일에 대해 좀 더 자세히 설명 할 수 있습니다.

  • 몇 가지 간단한 최상위 문에 대한 아주 사소한 통역있다 :

    현재 만 LLVM의 JIT 모드가있다.

  • 다른 모든 코드는 실행 전에 기계 코드로 jitted됩니다. 코드는 동적 유형 유추를 사용하여 프로그램을 통해 전파되는 코드가 적용되는 값의 런타임 유형을 사용하여 적극적으로 특수화됩니다.

이 줄리아 코드 유형 주석없이 작성에도 좋은 성능을 얻을하는 방법이다 : 당신은 당신이 코드가 Int64에 대한 전문 얻을 f(1) 호출하는 경우 - 64 비트 시스템에 1의 유형을; f(1.0)으로 전화하면 Float64 (모든 시스템에서 1.0 유형)에 특화된 새로 jitted 버전이 제공됩니다. 함수의 각 컴파일 된 버전은 어떤 유형을 얻는 지 알기 때문에 C와 비슷한 속도로 실행될 수 있습니다. 형식이 아닌 런타임 데이터에 의존하는 "형식이 불안정한"함수를 작성하고 사용하여이 작업을 방해 할 수 있지만 핵심 언어 및 표준 라이브러리를 디자인 할 때주의하지 않았습니다.

대부분의 줄리아는 그 자체로 쓰여지고, 구문 분석되고, 유추되고, 추측되므로 전체 시스템을 처음부터 부트 스트래핑하는 데 약 15-20 초가 걸립니다. 더 빨리 수행하기 위해 유형이 유추 된 AST의 serialize 된 버전을 파싱하고 유형을 추론하여 파일 sys.ji에 캐시하는 단계적 시스템이 있습니다. julia을 실행하면이 파일이로드되어 시스템을 실행하는 데 사용됩니다. 그러나 어떤 LLVM 코드 또는 기계 코드도 sys.ji에 캐시되지 않으므로 julia이 시작될 때마다 모든 LLVM 지팅을 수행해야하므로 약 2 초가 소요됩니다.

이 2 초의 시작 지연은 매우 성가 시며이를 수정하기위한 계획이 있습니다. Julia 프로그램 전체를 바이너리로 컴파일 할 수 있습니다. 실행 가능한 실행 파일 또는 .so/.dylib 공유 라이브러리는 단순히 공유 C 라이브러리 인 것처럼 다른 프로그램에서 호출 할 수 있습니다. 바이너리의 시작 시간은 다른 C 프로그램과 비슷하므로 2 초의 시작 지연 시간이 사라집니다.

부록 1 : Julia의 개발 버전은 표준 라이브러리를 바이너리 코드로 사전 컴파일하기 때문에 더 이상 2 초의 시작 지연이 없습니다. 시작 시간은 여전히 ​​Python과 Ruby보다 10 배 느려 개선의 여지가 있지만 꽤 빠릅니다. 다음 단계는 패키지와 스크립트의 사전 컴파일을 허용하여 줄리아 자체만큼 빨리 시작할 수 있도록하는 것입니다.

부록 2 : Julia의 개발 버전은 많은 패키지를 자동으로 사전 컴파일하여 신속하게로드 할 수 있도록합니다. 다음 단계는 전체 Julia 프로그램을 정적으로 컴파일하는 것입니다.

+6

지난 몇 년 동안 웹에서 컴파일 된 실행 파일/공유 객체가 Julia의 목표이지만 실행이 없음을 나타내는 여러 의견을 보았습니다. 당신은 어떤 것들이 그 위에 서 있는지에 대해 어떤 통찰력을 제공 할 수 있습니까? – dfreeman

+2

제임슨 내쉬 (Jameson Nash)와 이사야 노턴 (Isaiah Norton)은 많은 발전을 이루었습니다. – StefanKarpinski

+23

이제이 기능이 완료되고 Julia 마스터에 병합됩니다. Julia를 시작하기 위해 시스템에서 1.5 초 정도 걸리는 대신 150 밀리 초가 걸렸습니다. 10 배 빠른 속도입니다. 전적으로 가능할 수있는 또 다른 10 배속을 축적 할 수 있다면 Julia의 시작 시간은 Ruby와 Python에 필적 할 것입니다. – StefanKarpinski

관련 문제