프로그래밍 언어 벤치마킹 사이트입니다.
http://shootout.alioth.debian.org/
이 사이트는 언어 벤치마킹 사이트 중 제일 유명한 곳이고 내용은 각종 알고리듬을 언어별로 짜서 비교하는 겁니다.
언어 벤치마킹 x86 싱글코어 버전입니다.
http://shootout.alioth.debian.org/u32/which-language-is-best.php?calc=ca...
계속 루비가 1위를 하다가 최근에 파이썬으로 바뀌었습니다.
자바스크립트나 펄도 루비, 파이썬정도 분량입니다.
특히, 타입 선언이 없는 언어들이 분량이 적은 것 같습니다.
쿼드코어판에서는 파이썬3가 제일 짧다고 나옵니다.
http://shootout.alioth.debian.org/u32q/which-language-is-best.php?calc=c...
Time secs는 수행 시간, Memory KB는 사용 메모리, Code B는 gzip으로 압축한 용량을 나타냅니다.
GM이란 말이 이해가 안 갑니다.
http://en.wikipedia.org/wiki/Weighted_geometric_mean
For each benchmark, B is the best measurement; for each language implementation, the best measurement L is then normalized to L/B. GM is the Weighted Geometric Mean of those L/B ratios.
B가 수행 시도중 최대값이고 L은 언어 중 최대값인데 L/B로 정규화된다는 뜻인가요??
무슨 뜻이죠?
0,0,1을 입력하면 프로그램 분량을 벤치마킹할 수 있습니다.
전반적으로 파이썬, 루비, 자바스크립트, 펄, 루아, PHP가 분량이 적다고 나옵니다.
1,0,0을 입력하면 속도 비교가 됩니다.
http://shootout.alioth.debian.org/u32/which-language-is-best.php?calc=ca...
C++, C, Java 6 Server, Scala, Ocaml, Free Pascal이 빠르다고 합니다.
Mono C#이 자바 Server보다 느리고, 파이썬보다 캐시 없는 PHP가 두배 이상 느립니다.
Java 6 Server와 Scala는 속도가 비슷합니다.
1,0,1을 입력하면 속도와 분량을 같이 가중치두는 것입니다.
http://shootout.alioth.debian.org/u32/which-language-is-best.php?calc=ca...
이 순위는 C, C++, LuaJIT, Scala, Ocaml, Java 6 Server, Free Pascal, Haskell, Clean이 상위입니다.
Scala나 Ocaml같은 함수형 언어가 분량도 적고 속도도 씨정도로 빠르다니 매력적이네요.
실제 프로그래밍에 걸린 시간을 측정하는 벤치마킹도 나왔으면 좋겠습니다.
추가:
Which programming language is best? The Weighted Geometric Mean
Read "How not to lie with statistics: the correct way to summarize benchmark results" (pdf).
For each benchmark, B is the best measurement; for each language implementation, the best measurement L is then normalized to L/B
GM is the Weighted Geometric Mean of those L/B ratios.
missing : Language implementations with more than a couple of Timeouts (at the largest workload) distort the ranking - so they have been excluded. They can still be compared directly against another language implementation.
다른 결과 지문과 표를 잘 읽어보니까 each benchmarks는 각각의 알고리듬을 얘기하는 겁니다.
each language implementations는 각각의 다른 종류의 언어를 뜻합니다.
언어1(c++) x1.0, GM1.14: 알고리듬a(regex-dna) a1초, 알고리듬b(reverse-complement) b2초, 알고리듬c(n-body) c3초
언어2(c) x1.2, GM1.42: 알고리듬a a2초, 알고리듬b b2초, 알고리듬c c2초
언어3(java) x1.7, GM1.93: 알고리듬a a3초, 알고리듬b b3초, 알고리듬c c3초
이렇게 되어 있을 때 GM이 어떻게 나온 건지 아시는 분 계신가요?
c++가 1이라고 할 때 c가 1.2배인 것은 이해가 가는데 GM이 1.14인 것은 구체적으로 어떻게 나온 건지 모르겠습니다.
스프레드시트로 계산을 해봤습니다.
L/B를 일단 구해야 되는데요, L은 알고리듬a 결과가 제일 빠르게 나온 언어x의 값을 얘기하는 것 같습니다.
B는 구하고싶은 언어1의 알고리듬a 결과입니다.
즉 어떤 언어의 알고리듬a 결과를 제일 빨리 나온 언어x값으로 나눈다는 뜻입니다.
나온 알고리듬a부터 알고리듬c까지를 전부 곱해서 3제곱근을 구하면 기하평균이 GM보다 약간 큰 값이 나왔습니다.
가중치를 어떻게 곱하는 건지 모르겠습니다.
가중치를 곱할 때 어떤 걸 가중치로 썼다는 걸까요?
알고리듬 중요성별로 가중치를 두었다는 뜻 같은데요.
그러니까 정리하면 GM이란 정확히말해 가중기하평균을 얘기하는 거고 그건 어떤 알고리듬들을 제일 빨리 수행한 언어들 대비 몇 배 느린가를 평균낸 겁니다. 만약 각 알고리듬을 모두 제일 빨리 수행하는 가상의 언어가 있다면 그것에 비해 몇 배 느린가를 뜻하는 거죠.
X는 GM이 제일 빠른 언어가 있을 때 다른 언어들의 비율입니다.
관련 소스는 여기에 있습니다. 템플릿이 사용되어 구조가 이해가 안가네요.
https://alioth.debian.org/scm/viewvc.php/shootout/website/lib/?root=shootout
'컴퓨터 기술' 카테고리의 다른 글
파이썬이 TIOBE 언어 인기순위에서 PHP를 최초로 추월했다 (1) | 2011.02.19 |
---|---|
수차례 크래킹당한 마이센스 또 크래킹 당하다 (0) | 2011.02.12 |
인터넷 실명제에 반대한다 (1) | 2011.01.28 |
감시와 특허 아이디어 유출 (1) | 2011.01.28 |
복권이나 도박 사이트는 오픈소스가 되야 한다 (1) | 2011.01.28 |