Spin buffer explained…
이번 달 초에 Dr. Dobb’s Journal (DDJ)을 보다가 multi-thread 용으로 구현된 흥미로운 링버퍼(ring buffer; circular buffer)에 관한 글을 발견(http://www.ddj.com/dept/architect/199902669)
간략히 설명하자면 기존의 링버퍼는 1개의 1차원 배열을 사용하고 여기의 양 끝에 각각 접근하는 consumer-producer modle을 사용했습니다. 각각은 이 1차원 배열에 접근해서 데이터를 추가하거나(producer part), 데이터를 꺼내가는(consumer part) 작업을 수행하는데 이 동작에 대해 1차원 배열을 접근하는 것을 동기화해서 (lock을 걸던 mutex를 쓰던), 1차원 배열이나 내부적인 book-keeping을 위한 포인터들이 오염되는 것을 막는다.
이 새로운 자료구조는 다음과 같은 방식을 사용해서 문제를 해결한다.
- 1개의 1차원 배열이 아니라 3개의 1차원 배열을 사용한다.
- 3개의 배열을 각각 W, R, F (write, read, free) 라고 명명하고,이 것들을 순서대로 순회하면서 상태를 변경하고 읽거나, 쓰거나 한다.
- Consumer 혹은 producer는 각각 서로 다른 1차원 배열만을 본다 (0, 1, 2번 배열 중 1개 씩;즉총 3개의 배열중 어느 한 순간에 사용되는 것은 최대 2개임)
- Synchronization primitive를 사용하지 않고 구현한다.
일단 이런 기본적인 가정을 가지고 각각의 배열은 추가적으로 사용 중 flag와 현재 들어있는 원소 수를 유지한다.
실제로 동작하는 방식은 각 개체 별로 나눠서 생각하면,
계속 읽기: “Spin buffer explained…” »
아악,
드디어 만으로도 꺾였다 Orz
Feisty에서 음악듣기
자취방에서 사용하는 컴퓨터에서 사용하고 있는 것은,
Creative S/B x-fi + Gigaworks G500조합이다.
예전 컴 쓰던 초기(…)에는 내장 사운드 카드에 4.1 채널 스피커였는데 소울 칼리버 3(PS3 버젼)에서 잡음이 샌다는 이유로 사운드 카드를 샀고(/먼산), 형님(Amihk군)이 경품으로 받은 스피커를 반 값에 업어와서 현재 시스템이 되었다.
Feisty (ubuntu-7.04)를사용하면문제가, ALSA에서 S/B x-fi를지원하지않기때문에,음악을전혀들을수없다는것. (사실 i-pod으로꿋꿋이듣긴하지만스피커쪽이 k배좋다)그래서끙끙대다가오늘출근하기직전(…)에떠오른생각.
2008 대선 후보들…
오늘이 사실 상, 후보 이름을 거론하면서 지지하거나 반대할 수 있는 마지막 날인 관계로 (아직 자정은 지나지 않았다 :p) 일단 포스팅.
개인적으로, 이번 대선에 누가 나올진 궁굼하긴하지만 높은 순위의 관심사는 아니다. 그렇지만 바라는게 하나 있다면 제발 박모 독재자의 딸인 모근혜가 후보로 나오게되거나 - 개인적으로 떠올리기 싫을 정도로 혐오스로운 일이지만 - 대통령에 당선되는 불상사가 생긴다거나 하는 일은 제발 일어나지 말았으면 하는 것이다.
이건 내 편견일지 모르겠지만 박근혜를 지지선언한 사람 중엔 내가 제일 싫어하는 부류의 사람들 - 뇌물 수수, 대부분의 손자가 한국국적이 아닌 것을 고의적으로 선택한 등의 일을한 전국방장관 들 - 이 섞여 있기도하고, 인류에게 가장 도움이 안되는사상 중 하나라고 생각하는 - 뭐 필요악일 순 있지만 그렇게 높은 우선순위의 가치는 아니라고 믿는다 - 전체주의의 대두를 보게될것이라고 생각한다 - 박근혜 지지세력의 상당 수가 박모 독재자시절이 좋았지 하는 식의 말을 하는 사람이 많고 (내 주변의 어른들 중에 특히 많다 -_-), 그 때의 집단주의 적인 무언가를 찬양하는 모습을 보게 되기 때문이다. 전체주의는왜 좋지 않은가? 나에게 다른 사람과 다른 생각, 관점을 갖는 것을 제한한다 - 그리고 그런 차이가 문명/문화의 발전을 가져온다고 나는 믿기 때문에 그런 부분을 제한하는 전체 주의를 매우 혐오한다. 그런 이유로 몇 일 전부터 나돌기 시작한 삼성 그룹 수련회?의 매스 게임 영상을 매우 혐오스럽다고 생가했다 - 고등학교 1학년 때 해야만 했던 매스게임(그 때 전국 체전을 제주도에서 했지 -_-), 그리고 학교에서 축구 응원한답시고 해야했던 카드 섹션 비스무레한 무언가, 이런 것들은 개개인의 자유로운 시간을 희생시키면서, 그다지 높지 않은 - 아니 가치가 있긴한가? - 무언가를 추구한다.
그런 의미에서 독재자 박정희의 딸 - 그 것도 그 독재자의 이미지를 자기 지지로 어떻게든 쓰려고 발악하는 - 박근혜가 대선 후보로 나오는 것을 극히 반대한다.
boost::python
한 3주 전? 정도부터 Python/C++을 같이 쓰려고 삽질 중이었는데, 지난 주 초에 boost::python을 발견하고 이 둘을 쉽게 연결하기 시작 - 이어지는 내용은 UPnL 워크샵(2007/6/16)에서 발표했던 것의 요약입니다 (모든내용이다 나온 것은 아닙니다).그 내용을 기반으로 해서몇일 정도 포스팅을 하려고 합니다.
사용하려는 플랫폼에 대해 초보적인 수준의 library사용 경험만 있으면(동적바인딩 라이브러리 빌드/링킹 관련) boost::python을 사용했을때 편한 점들은 일단,
- Python C interface를 상세히 알지 못하는 상황에서도 C++ 인터페이스를 python module로 내보내기 쉽습니다.
- Python embedding - C++ 쪽에서 python 코드를 실행시키는 것 - 을 쉽게 구현할 수 있습니다.
- 양자를 통합해서 사용할 때도 편합니다. (예를 들어 C++이 전체 초기화를 하고, 일부분을 python 쪽에 노출 시키고, 메인 루프의 논리적인 부분은 python에서 노출된 C++ 함수를 호출함으로써 처리)
정도 입니다. 사실 3번째 경우가 필요한 상황이었는데, python 문서만 봐선 잘 할 수가 없던 부분이 쉽게 되서 매우 만족스럽습니다.
매우 긴 컴파일 시간 - <boost/python.hpp>의 컴파일 시간이 precompiled header를 써서 줄이지 않으면 안될 정도의 수준입니다 - 문제가 있고, boost library를 빌드할때 사용했었던 Python.h 버젼을 기준으로 실행 가능한 python 인터프리터가 결정되는 문제도 있습니다 - boost library를 python 2.4 헤더를 가지고 만들었었는데, 2.5 헤더와 2.5 라이브러리 파일로 빌드했더니 빌드는 되지만 실제로 import할때 해괴한-_-에러를 내면서 인터프리터가 강제 종료됩니다.
게임 사용자들의 PC 사양 통계(from steam)
Valve에서 제작한(덤으로 운용하는) PC 게임 배포/DRM 툴인 Steam에서 최근에, “당신의 PC사양을 업로드 해도 될까요?”라고 물어 대길래 괜찮다고 했던 기억이 있다.
그 결과물이 나온듯하다. (from Sexydino’s Game Log)
Valve에서 공개한 결과물은(지속적으로 업데이트되고 있다. 내가 6/5일 오전에 확인했을 때에는 35만 명정도였는데 지금은 36만을 넘어섰다) 여기에 있다.
일단 이 결과물은 Steam에서 가장 인기있는(혹은 내가 그렇게 생각하는) 타이틀이 Halflife 2와그 에피소드들에 해당하는 씨리즈라고 생각 했을때, 약간 고사양 유저들 중심일 수도 있다.
개인적으로 고무적이라고 생각하는 부분은,
- Windows 98의 퇴출 분위기: 0.1% 이하에 속하는 Windows 98. 수많은 클라이언트 개발자가 동의할 거라고 생각하는 부분이지만 Windows 98 compatiblilty는 수많은 게임의 발목을 잡았다고 생각한다. 슬슬 이거에 대한 신경을 끄고 (비싼 -_- 엔진을 쓰지 않고도 multi-core를 쓰고도 적절한 MT함수들을 쓸 수 있는 기회가 왔다고 생각한다), 게임 자체에 관해 고민할수 있는때가온 듯하다.
- Multi-core CPU 유저는 벌써 20%를 넘어섰다. 곧 80% 이상이 되는 일도 그리 먼 미래의 일이 아닐 것이다.좀더 스레딩 모델을잘 구현한 엔진을 쓰거나(비쌀지도 모르지만), 파워풀한(그러나 복잡할 수도 있는;잘 설계하면 그리 복잡하지는 않겠지만) 엔진을쓸 때가온것 같지 않은가?
- 의외로(?) On-board sound card를 쓰는 계층은 많다.
이런 것들이다. 물론 고사양 유저들 중심일 수는 있으니 너무 믿는 것도 곤란하다. 개인적으로는 Linege II/카트라이더처럼 한국 내에서 - 특히 게임방 환경에서 - 많은 유저들을 가진 게임들의 시장 조사 자료가 있었으면 좋겠다고 생각한다.
우리도 좀 더 편한(?) 환경에서 개발할 때가 되지 않았는가? :$
Steam
![]()
Steam이라는 valve - Halflife의 제작사이기도 한 곳 - 에서 제공하는 게임 배포용 SW를 써봤습니다.
사실 쓰게 된 원인(?)은 ATI의 비디오 카드 사용자 들에게 Halflife 2 중 일부를 공짜로 배포해서 입니다만은 (참조: http://www.sexydino.com/1412 )
우선 스팀 계정과 스팀 실행 파일을 설치하고, 다운로드를 걸어놓고 - 중간에 ATI 카드인지 테스트 하긴 합니다 - 기다리고 나니 별도의 설치 과정 없이 실행 가능한 형태가 되더군요. (바이너리의 수도 적은 형태 - valve에서 만든 Halflife2 뿐만 아니라 Egosoft의 X3도 비슷한 류의 디렉토리가 생기는 걸로 봐서는 일정한 형태로 배포하는 양식이 존재하는 듯 합니다)
장점 :
- 설치 과정이 단순합니다; 다운로드 -> 설치로 이어지는 현재 대부분의 다운로드 기반 게임들의 제일 짜증나는 단점이 없습니다.
- 결제가 단일 포인트에서 이루어지기 때문에 게임 구하는데 신경쓸게 줄어듭니다.
단점:
- 결제는 USD가 되는 카드로만 -_-; 회사 다니기전에는 꿈도 못 꿀 일이었군요(…)
- 당연히 대부분의 게임은 Valve와 일부 제작사 (제가 좋아하는 Firaxis - Civ. 씨리즈의 제작사; Eidos, … )만 있습니다.
- Wikipedia 에 따르면 일부 팩키지의 경우 오히려 가격이 더 올라가는 경우도 있고, 세금 문제 / 일부의 호환성 문제가 있다고 합니다.
- 어떻게 보면 당연한 거지만 특정 게임의 경우 북미에서만 구입할 수 있습니다 - 비슷하게 C&C3나 Supreme Commander처럼 다른 대륙의 국가에서도 별도로 발매하는 게임의 경우 배송지 주소가 한국이면 아마존에선 구입할 수가 없더군요.

5 comments