Nice programing

llvm이 JIT 구현에 적합하지 않은 것으로 간주되는 이유는 무엇입니까?

nicepro 2020. 12. 29. 08:25
반응형

llvm이 JIT 구현에 적합하지 않은 것으로 간주되는 이유는 무엇입니까?


많은 동적 언어는 실행 시간을 단축하기 위해 JIT 컴파일러를 구현하거나 구현하려고합니다. 필연적으로 땅콩 갤러리의 누군가가 LLVM을 사용하지 않는 이유를 묻습니다. 대답은 종종 "LLVM은 JIT 구축에 적합하지 않습니다."입니다. (예를 들어 Armin Rigo의 의견은 여기에 있습니다. )

LLVM이 JIT 구축에 적합하지 않은 이유는 무엇입니까?

참고 : LLVM에는 자체 JIT가 있습니다. LLVM이 부적절했지만 지금은 적합하다면 변경된 사항을 말씀해주십시오. 나는 LLVM JIT에서 LLVM Bytecode를 실행하는 것에 대해 말하는 것이 아니라 LLVM 라이브러리를 사용하여 동적 언어에 대한 JIT를 구현하는 것에 대해 이야기하고 있습니다.


Unladen Swallow 사후 블로그 게시물 ( http://qinsb.blogspot.com/2011/03/unladen-swallow-retrospective.html) 에 LLVM에 대한 몇 가지 참고 사항이 있습니다 .

불행히도 현재 상태의 LLVM은 실제로 정적 컴파일러 최적화 프로그램 및 백엔드로 설계되었습니다. LLVM 코드 생성 및 최적화는 좋지만 비용이 많이 듭니다. 최적화는 모두 정적 C와 유사한 언어로 생성 된 IR에서 작동하도록 설계되었습니다. Python 최적화를위한 대부분의 중요한 최적화에는 프로그램이 이전 반복에서 어떻게 실행되었는지에 대한 높은 수준의 지식이 필요하며 LLVM은이를 지원하지 않았습니다.


LLVM이 JIT 구축에 적합하지 않은 이유는 무엇입니까?

나는 값 유형, 꼬리 호출 제거, 일반 인쇄, C FFI 및 POSIX 스레드를 포함하여 정적 및 JIT 컴파일을 모두 지원하는 풍부한 정적 유형 시스템을 갖춘 고급 가상 머신 인 HLVM을 작성했습니다. 특히 HLVM은 높은 수준의 VM에 놀라운 성능제공합니다 . 컴퓨터 대수 데모 에서 볼 수 있듯이 JIT 컴파일러를 사용하여 변형 유형 및 패턴 일치를 사용하여 ML과 유사한 인터랙티브 프런트 엔드를 구현했습니다 . 내 모든 HLVM 관련 작업을 합하면 몇 주만에 작업을 수행 할 수 있습니다 (그리고 저는 컴퓨터 과학자가 아닙니다.

나는 그 결과가 스스로를 말하고 LLVM이 JIT 컴파일에 완벽하게 적합하다는 것을 분명히 보여주고 있다고 생각합니다 .


LLVM을 JIT 지원으로 사용 하는 방법에 대한 프레젠테이션 이 있는데, 여기에서 왜 나쁜지에 대해 제기 된 많은 우려 사항이 실제 JIT를 빌드하는 대신 JIT로 정적 컴파일러를 빌드하는 사람들로 귀결되는 것처럼 보입니다.


업데이트 : 2014 년 7 월부터 LLVM은 Safari의 FTL JavaScript JIT 에서 Polymorphic Inline Cache를 지원하는 데 사용되는 "Patch Points"라는 기능을 추가했습니다 . 이것은 원래 질문에서 int Armin Rigo의 의견에 대해 불평 한 사용 사례를 정확하게 다룹니다.


시작하는 데 오랜 시간이 걸린다는 것이 가장 큰 불만입니다. 그러나 Java가 수행하는 작업을 수행하고 인터프리터 모드에서 시작하고 LLVM을 사용하여 프로그램에서 가장 많이 사용되는 부분을 컴파일하는 경우에는 문제가되지 않습니다.

또한 이와 같은 주장이 인터넷에 흩어져 있지만 Mono 는 한동안 JIT 컴파일러로 LLVM을 성공적으로 사용하고 있습니다. LLVM).

동적 언어의 경우 LLVM은 강력한 / 정적으로 입력되고 매우 낮은 수준의 기능을 지원하는 C 및 C ++와 같은 시스템 프로그래밍 언어를 최적화하도록 설계 되었기 때문에 올바른 도구가 아닐 수 있습니다. 일반적으로 C에서 수행되는 최적화는 느린 시스템을 실행하는 효율적인 방법을 만들고 있기 때문에 동적 언어를 실제로 빠르게 만들지 않습니다. 최신 동적 언어 JIT는 런타임에만 알려진 함수를 인라인하거나 LLVM이 설계되지 않은 대부분의 시간에 변수 유형을 기반으로 최적화하는 것과 같은 작업을 수행합니다.


LLVM IR에 대한 자세한 내용은 여기를 참조하십시오. LLVM IR은 컴파일러 IR 입니다.

참조 URL : https://stackoverflow.com/questions/6833068/why-is-llvm-considered-unsuitable-for-implementing-a-jit

반응형