요새 IRC의 jiwon님이 VM 관련 수업을 들으시면서 이것 저것 많이 알려주셔서 VM 관련 논문을 여럿 읽고 있습니다. 어제는 퇴근길(일요일!)에 뭐 볼 만한 것 없을까 찾다가 Are CLI-based Virtual Machines Suitable for High Performance Computing?이라는 논문을 읽었습니다.
이 논문은 주로 대규모 수치연산이나 데이터 처리에 사용되는 환경으로 직접 C나 Fortran처럼 네이티브 코드를 생산하는 컴파일러를 사용하지 않고, Java나 CLI같은 가상 기계 환경을 사용하는 경우도 쓸만한가에 대해 논하고 있습니다. 사실 그런데, 이 얘기를 듣기 전까지는 그 비싼 기계를 네이티브 코드로 안 돌리고 VM 코드로 돌릴 사람이 있을까 생각하긴 했는데, 진지하게 Java로 돌리고 그러는 커뮤니티도 있고 그렇군요 -ㅇ-;
처음 몇 섹션에서는 CLI와 CLI구현들에 대한 소개를 하고 있는데 상당히 일반적인 소개라서, HPC에 관심이 없는 사람이라도 읽어볼 만합니다. 그 다음에는 본격적으로 Java, CLR, SSCLI, Mono 넷을 벤치마크 하고 있습니다. 주요 수치 연산들과 알고리즘, SciMark등을 선보이고 있는데, 이 논문이 쓰여질 당시 (작년)에는 아직 mono가 최적화가 완전히 진행되지 않아서인지, 정수 연산, 기본 수학 연산에서 Sun JVM과 CLR에 한참 뒤져 있고, CLR이 대체로 Sun JVM을 약간씩 앞서는 퍼포먼스를 내고 있군요. SSCLI은 예상외로 선전을(..;)해서 mono하고 비슷하군요. 흐흐 사실 SSCLI는 그렇게 느려서 쓸 사람이 있을까 생각을 했는데..; 성능을 테스트할 수 있는 여러가지 수학적 알고리즘을 수행하는 SciMark에서는 IBM JVM이 제일 앞서고 근소한 차이로 MS CLR이 간혹 몇군데에서는 앞서기도 하고 있습니다. Sun JVM은 많이 차이나는 것도 있고 비슷한 것도 있고 그러고 있고, mono는 마냥 느리군요. -ㅇ-; 그런데, 상당히 놀라운 것은, SciMark의 FFT 시험같은 경우에는 IBM JVM, MS CLR은 C로 구현된 것보다 더 빠르기도 하고, 상당수의 알고리즘들이 70%정도는 유지하고 있다는 것입니다. VM이라고 엄청나게 느린 것은 아니군요..
글쓴이의 평가에서 Mono가 MS CLR에 비해 이렇게 느린 결과가 나온 것은 IL 코드와 생성된 x86 어셈블리 코드를 비교해 보면 Mono는 거의 1:1로 변환되어 최적화된 흔적이 아주 적은 반면에 MS CLR 코드는 상당히 많이 최적화되어 있어서 IL코드와 x86 어셈블리 코드가 1:1로 매칭이 잘 안 되는 정도라고 합니다. 그래서, 결론적으로는 과학 계산에 결정적인 영향을 미치는 것은 C# -> IL 사이의 최적화라기 보다는 IL -> native 사이의 최적화가 결정적인 영향을 미친다는 얘기인 듯 합니다. native 코드로 JIT 번역은 사실 parrot이나 DotGNU의 libjit, GNU lightning같은 경우만 보더라도 그냥 바이트 코드 읽어서 1:1 emit 하는 경우가 대부분이라, 사실상 최적화를 안 하고 있는 것이나 마찬가지인데 앞으로 JIT 디자인에서 좀 더 도전해 볼만한 요소인 듯 합니다.
논문을 안읽어보고 얘기하는 것이라 틀릴 수도 있겠지만, SciMark에서 VM기반의 언어들이 C보다 우수, 혹은 근접한 성능을 내는 것은 한편으론 C의 성능이 과학기술계산(주로 매트릭스)에서 예를 들어 FORTRAN보다 못하기 때문이기도 합니다. C만 갖고 있는 pointer에 의한 메모리 aliasing 문제 때문인데, 이런 문제가 포인터가 없는 FORTRAN이나 Java에선 발생하지 않기 때문에 메인 메모리 access를 줄일 수 있기 때문이고 C의 최신 규격에서 해결하고자 하는 문제 중 하나인 것으로 알고 있습니다.
물론 그렇다고는 해도 VM언어들이 C 성능의 70%까지 따라왔다는 것은 매우 고무적이며 한편으론 아직도 많은 사람들에게 믿기지 않는 얘기일 겁니다. 특히 Swing의 성능에 불만을 갖고 있는 사람들에게. 🙂
아아.. 저는 포트란을 깊숙히 해 보지 않아서, 포트란의 C에 대한 퍼포먼스 상의 장점이 왜 그런건지 잘 몰랐는데, 그런 문제가 있었군요. 고맙습니다. 🙂
형 요즘 논문 많이 읽어 보시네요ㅋㅋ 이러다가 복학후에 대학원 진학하시는거 아니에요? 장혜식 조교님 +_+
-ㅇ-; 책 들고 다니려니 무거워서;; 으흐흐;;
맨날 구경만 하고 갑니다만. 괜찮은 논문들을 보려고 하는데 추천할만한 List없나요~
관심 있는 분야를 직접 검색해보세요 portal.acm.org나 ieee.org/ieeexplore 가서 검색하시면 양질의 논문을 많이 볼 수 있지요. 찾아 보시면 논문 검색할 곳은 널렸답니다~~ (혜식이형은 아니지만 리플^^)
저두 그 강좌에 참여하고 싶네여…
어떻게 하면 가능할까요?
청주엔 왜 갔을까나~~~둥둥둥
아… 기억났다…왜 갔는지.ㅎㅎㅎ
말 안하면 지나쳐버리나요?;;;
그래서 대전엘!
아직 교통카드를 제대로 서비스하지 않는지역에선 탑승할때 목적지 마다 요금을 따로 계산해서 글치 실제론 맘씨좋은 기사 아저씨 아니면 걍 지나가버리신다는;
오!! 신기한데요? 저는 지금 청주에 살고 있지만. 몰랐어요 ! 🙂