Wednesday, December 29, 2010

language benchmark

python을 주로 쓰는데 비슷한 작업을 친구가 perl로 짯는데.. 속도가... 너무 차이난다. file IO가 많아서 그런지.. 좌절.. perl도 공부해야 겠다는 생각이 든다. 아래는 언어 performance 비교한거.
http://www.bioinformatics.org/benchmark/results.html

그리고 보통 프로그램 시간 체크 하기 위해서 time 명령어를 쓰는데 default로 real, user, sys 모드의 시간이 나온다. 거기에 대한 설명은 아래 링크
http://stackoverflow.com/questions/556405/what-do-real-user-and-sys-mean-in-the-output-of-time1


그렇다면 두 프로그램의 퍼포먼스를 비교할려면.. user + sys 로만 비교해야 하는건가... 음..


-이번에 이런저런 check하면서 알게된 tip
--어떠한 key값이 사전형 변수에 key로 있는지 없는지 확인하고 대입할경우 예를 들어 
key = 'good'
d_some = {#something in here#}
if key in d_some.keys():
      d_some[key] = "something"


이렇게 하는 것보다
try:
      d_some[key] = "something"
except:
      pass
식으로 하는것이 더 빠르다. 특히 d_some의 key가 많을때.


--그리고 itertools 괜찮은거 같다. 활용해 볼 만하다.
http://www.builderau.com.au/program/python/soa/Faster-smaller-clearer-Python-iterator-tools/0,2000064084,339280043,00.htm
위 내용을 간단하게 정리 하자면 zip()을 써서 두 list 합쳐서 거기서 하나씩 iterative하게 뽑나낼려면 우선은 두 리스트를 합치는 과정이 들어가기 때문에 느린데 izip을 쓰면 합치는 과정 없이 그냥 iterative object를 생성한다는 것 같은데..  그렇다면 고스란히 메모리에 올려놓는건가? 두 리스트를? 음.. 


--python에서 프로세스 시간을 재는 방법
http://www.tutorialspoint.com/python/time_clock.htm