vmware안의 리눅스 가상머신에서 돌리는 프로그램이 호스트에서보다 더 빨리 돌아가요...

tsangel의 이미지

윈도우와 리눅스에서 동시에 돌아가는 프로그램을 짜는지라 똑같은 소스로 윈도우에서 컴파일해서 돌려보고 vmware에서 돌아가게 깔아놓은 리눅스에서도 컴파일해서 돌려보고 있는데요...

같은 소스로 컴파일한 실행파일인데도 호스트인 윈도우(윈도우 7, 64bit - 컴파일러는 msvc 32bit)에서 돌리는 것보다 vmware안의 리눅스(centos 64bit, 컴파일러는 gcc 64bit)에서 돌아가는게 쪼금 더 더빠르네요 - 작은 영상에선 20-30% 정도로 차이가 크고 큰 영상에선 5-10% 정도로요...
... 소스는 openjpeg이라고 jpeg2000 영상을 decode/encode 하는 겁니다.

다른 점은 리눅스 실행파일은 64비트 컴파일이고 윈도 실행파일은 32비트로 컴파일했다는 차이점인데요
소스가 64비트 최적화된 것도 아닌데 신기하지 말입니다...

ironiris의 이미지

혹시 vmware 가 구동되고 있는 상태에서 호스트에서 프로그램을 실행하셨나요?
리소스가 덜 할당되면 늦을수도 있을것 같네요.

jos77의 이미지

MSVC 와 gcc 를 비교하신 건가요? MSVC 는 console 실행이라도 뭔가 다른게 있을지 몰라서...

양쪽에서 똑같은 버전의 eclipse c 컴파일러로 돌려보세요. windows 와 linux 와의 차이만을 보려면 그게 나을 겁니다.

-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr

tsangel의 이미지

ironiris님// vmware가 돌아가는 상태에서 host도 구동했는데요,
코어4개짜리 i5 CPU에 램도 8기가인데 linux 가상머신에는 CPU하나에 1G 램만 할당을 해서 리소스때문에 그리 차이날것 같지는...
하긴 윈7은 이거저거 깔려있지만 linux는 클린 인스톨상태라는게 다르긴 합니다.

jos77님// MSVC와 gcc 차이기는 하겠습니다. 좀더 조건을 똑같이 하면 어떻게 될까 궁금하긴 하지만,
새로운 환경을 또다시 셋업하기가 귀찮아서리...

열심히 살자

terzeron의 이미지

같은 조건 하에서라도 64비트 바이너리가 32비트로 컴파일된 바이너리보다 빠를 가능성이 높습니다.
게다가 윗분들께서 지적하신 사항들 하나하나가 모두 이런 현상을 초래하는 원인이 될만한 것들입니다.
특히 윈도우즈쪽 컴파일러가 GCC보다 성능이 떨어지는 코드를 만들어내는 경우가 종종 있습니다.