2015년 10월 29일 목요일

팀챗, 힙챗, 슬랙


괜찮은 채팅 서비스... 이멜주소 주시면 포프TV 슬랙 챗방에 가입시켜 드립니다 ㅎㅎㅎㅎㅎ

2015년 10월 26일 월요일

3D 프린팅의 현상태


아직 3D 프린팅은 시기상조...

2015년 10월 15일 목요일

2015년 10월 12일 월요일

2015년 10월 7일 수요일

벡터가 해쉬맵보다 (대부분) 빠른 이유

예전에 탑프로그래머가 하드웨어쯤은 이란 비디오에서 대부분의 경우 벡터가 해쉬맵보다 빠르다 라는 말을 한 적이 있다. 이유는 캐쉬때문이라고...



근데 최근들어 왜 그러냐? 그렇지 않다 라고 하는 답글들이 딸려서... 대충 계산해서 답을 했다. 물론 어떤 자료구조를 컨테이너에 넣느냐에 따라 다르지만 기본적으로 포인터를 넣고 프로그램을 32비트용으로 컴파일한다고 가정하면 대충 이렇다.

(이 아래는 내가 단 댓글에서 복붙)

컨테이너 안에서 하나의 자료를 찾는 것이라 가정하고 말하죠.. 당연히 들어있는 element수가 많아지면 해쉬가 더 빠릅니다. 그 숫자가 몇개냐의 차이지만... 캐쉬라인이 64바이트라 가정하고 벡터안에 포인터(레퍼런스, 즉 32비트 프로그램에서 4바이트)라고 가정하면 한번 메모리 액세스할떄 16개를 한번에 불러오죠..

Intel i7-965 (Nehalem) 벤치마크한 결과를 보면 랜덤 access라 가정할때 L1 캐쉬 접근하는게 4clk 메모리 접근하는게 62.5ns입니다 (http://www.sisoftware.net/?d=qa&f=ben_mem_latency). 터보모드가 아니라면 이건 대략 200clk이죠

약간 계산을 간략하게 해서 예를 보여드리면...

벡터를 사용해서 16번째에 있는 아이템을 찾으면 200clk + 16 * 4 clk = 264clk의 시간이 들지만 해쉬맵을 사용하면 [200clk + 200clk + 4 clk + 4clk + 해쉬함수실행시간] = 408clk + alpha 의 시간이 들죠. 즉 아이템 16개까지도 벡터가 빠르단겁니다. 그리고 알파에 따라 32개까지가 더 빠를수도 있구요. 32개가 넘으면 대부분의 경우에 맵이 더 빠를겁니다.

그럼 보통 프로그램에서 컨테이너를 어떻게 사용하는지가 관건이죠. global string registry라던가 global resource manager등에서는 당연히 맵을 사용하는게 맞습니다. 하지만 그 외에도 상당히 많은 부분에서 32개 미만의 element가 들어가는 컨테이너를 쓰죠. 그런 경우에는 벡터를 쓰는게 더 빠르다고 말한겁니다. 많은 코드베이스를 보면 컨테이너를 쓰는 상당히 많은 경우가 32개의 element가 넘어가지 않더라구요.

(여기까지 복붙)

중요한건 주로 쓰는 i5 따위의 CPU를 예로 들면 메모리를 액세스 하는 시간이 훨씬 느려진다. 따라서 32개까지 또는 48개까지도 벡터가 빠를수도 있다.

이걸 가지고 수만개까지도 벡터가 빠르다라고 잘못 받아들이시는 분들이 있는데... 건 아니다. 수만가지를 쓴다면 당연히 해쉬가 빠르다. 수만가지의 element를 자료구조에 넣는 경우보다 열 몇 개 넣는 경우가 더 일반적이라 대부분의 경우 벡터가 그냥 빠르다고 말한 것임

2015년 10월 5일 월요일

주 8시간 근무


1주에 하루 근무합니다. 물론 짤린건 아니고 자발적입니다 -_-;