yuchi's Development Home






[서버용 네트웍 컴포넌트 ]

4DyuchiNET20.dll, 4DyuchiNET20_x64.dll


- In-Process COM

-기존 방식과 유사한 인터페이스로 완전히 재작성

-x64, x86 지원 , 스레드세이프

- 약 15일 소요





[3D 게임 엔진]

범용 자료구조 라이브러리
4DyuchiGXGenericLib.dll,4DyuchiGXGenericLib_x64.dll

수학함수 라이브러리
4DyuchiGXMathLib.dll,4DyuchiGXMathLib_x64.dll

2D 이미지 프로세싱 라이브러리
4DyuchiGXImageProcessingLib.dll,4DyuchiGXImageProcessingLib_x64.dll

In-Process COM 파일시스템
4DyuchiGXFileStorage30.dll,4DyuchiGXFileStorage30_x64.dll

In-Process COM 렌더러엔진(Device Dependent)
4DyuchiGXRenderer30.dll,4DyuchiGXRenderer30_x64.dll

In-Process COM 지오메트릭엔진(Device Independent)
4DyuchiGXGeometry30.dll,4DyuchiGXGeometry30_x64.dll

모델뷰 - 모델 확인 ,애니메이션 테스트,메터리얼 체인지 테스트, 어태치 테스트등
ModelView.exe , ModelView_x64.exe

건물 가이드매쉬 모델링,지형 편집,라이트맵계산,오브젝트 배치,충돌매쉬 빌드 등...
4DyuchiGXLevelEditor.exe , 4DyuchiGXLevelEditor_x64.exe

파일 패키징,추출 등....
4DyuchiGXFilePack.exe , 4DyuchiGXFilePack_x64.exe

-x86, x64지원

-피직 트랜스폼, 벡터 연산, 기타 많은 cpu클럭을 소모하는 수학연산에 대해 x86, x64모두 SSE 코드로 최적화

-SSE코드 및 불가피한 어셈블리 코드 작성에는 vc++인라인 어셈블러(x86버젼)와 ml64.exe(x64버젼) 사용

-대략 1개월 소요

-퍼포먼스는 x86에 비해 x64버젼이 근소하게 높음. 대량의 메모리간 데이타 전송이 이루어질 경우에 x64 모드가 빛을 발하는데, 엔진이 이미 최대한 최적화되어있어 메모리 카피 코드가 극히 적으므로 큰 효과를 기대하긴 어려움.




[후기]

이 짓거리를 왜 하게 되었는고 하니...

한마디로 서버를 64비트 환경으로 돌리고 싶었다.

서버에서 3D충돌처리를 하다보니 렌더러를 제외한 3D엔진을 DLL형태로 갖다 쓰게 되었고, 3D엔진도 64비트 프로세스에서 작동해야만 했다.

꼭 이렇게까지 해야하느냐? 라고 묻는다면...반드시 그래야한다고 말 할 수는 없다. 개인적인 욕심도 없다고는 못한다.

작년만 해도 64비트 포팅에 대해서 대단히 회의적이었다. 사실 네트웍부터 엔진, 기타 샘플 서버등을 다 합치면 7년정도 짠 코드들을 몽땅 뒤집어엎어야 할 판이었으므로 도저히 자신이 없었다.

새 직장에서 워밍업으로 처음 시작한 일이 네트웍 컴포넌트를 64비트 버젼으로 다시 만드는 일이었는데, 테스트까지 15일 정도 걸렸다. 생각보다 일을 빨리 끝냈다.

막상 서버 컴포넌트를 64비트 코드로 작성하고 나니 아쉬움이 많이 남았다.
최소한 파일 시스템과 범용 자료구조 라이브러리만큼은 64비트 모드를 지원해야 서버를 64비트 프로세스로 돌릴 수 있었으므로 약간 고민이 되었다.

15일만에 64비트 버젼의 서버 컴포넌트를 만든 덕에 겁대가리를 좀 상실한 상태였다.

결국 큰 결심을 하고 파일 시스템과 범용 라이브러리부터 뒤집어 엎기 시작했다. 예상 기간은 3-6개월 정도.

7년간 떡칠해놓은 어셈블리 코드들과 메모리 옵셋을 사정없이 건드리는 코드들 때문에 꽤 애먹었다. 특히 어셈 코드가 문제였다.

때문에 인텔 컴파일러 사용을 심각히 고려했었다. vc2005의 x64플랫폼에서는 인라인 어셈을 사용할 수 없었기 때문이다.

그러나 인텔 컴파일러는 사실상 사용이 불가능했다.

기존 자료구조 코드들이 어셈으로 떡 쳐놓은 코드들이었기에(공부한다고 mmx코드까지 발라놨었다) 퍼포먼스에서 유리한 점이 없는 코드들은 대부분 C로 재작성했다.

수학함수와 가변인자 처리, DPC,문자열 처리, N비트 비트맵 처리 등에선 어셈블리 코드 사용이 불가피했기 때문에 x86 코드는 인라인 어셈으로, x64코드는 vc에디터와 ml64.exe를 사용해서 순수 어셈으로 작성했다.

자료구조 코드들은 대부분 2000년 - 2001년에 작성한 것들이고 어셈공부한다고 c코드는 아예 지워버린 케이스가 많아서 C로 작성하는것도 쉽지는 않았다.

2004년에 밤새면서 짰던 힙 메모리 부분이 특히 힘들었다. 어찌나 헷갈리던지...

하여간 난관을 하나하나 극복은 해갔는데, 몇 가지 부분에선 어셈블리 코드를 빼는게 정말 아쉬웠다. 대표적인 사례가 스택 부분.

예전엔 push/pop명령을 인라인으로 사용해서 시스템의 스레드 스택을  바로 사용했었는데, 때려죽여도 x64에선 방법이 없어서 포기했다.

대신 CStack자료구조를 만들어서 C++스타일의 코드로 대체했다. 퍼포먼스가 약간 떨어져서 유감이긴 하지만, 32,64비트 모두 지원하려니 어쩔수 없었다.

평일 근무시간은 물론이고 주말,휴일,새벽 나름대로 쓸 수 있는 시간은 다 동원해서 쳐발랐다.

7년간 작성했던 코드들을 대부분 리뷰했고, 새로운 것도 많이 학습했다.
막연하게만 알고 있던 매크로어셈에도 꽤 능숙해졌고, x64 어셈블리코드와 호출규약, 코드생성 규칙 등에 대해서도 꽤 많은 공부를 했다.



[결론]
덕택에 많은 공부를 했고, 숨어있던 버그도 잡았고, 앞으로 진행하기 위한 발판을 다졌다. 든든한 갑옷을 챙겨입은 기분이다.

그리고....

재밌었다. 난 역시 프로그래머 체질이야.










댓글 '4'

레디즈

2007.05.05 04:10:43
*.134.122.132

마지막 결론이 와닿는군요 ^^
뒤에서 보기에도 대단했음 ㅋㅋ

여치

2007.05.05 14:25:12
*.51.112.25

내심 미친듯이 뿌듯했는데 그닥 동조하는 사람들이 없다. 프로그래머들 조차도... 90년대였으면 나름 열광하는 사람들이 있었을텐데. 이젠 게임 프로그래밍 바닥에서 낭만이 사라졌구나.
끌끌끌...

여치

2007.05.13 14:04:42
*.51.112.25

베지타/법적으로 별 문제는 없다고 생각합니다만, 행여 빌미는 제공할 수 있다 판단해서 리플을 삭제했습니다. 죄송합니다. 뭐 걸고 넘어지려면야 우리나라 어떤 기업기 어느 개발자에 대해서도 걸고 넘어질수 있고, 법적으로 피해가려면 또 얼마든지 피해갈 수 있는 문제라고 생각합니다. 2007/05/13


박진국

2008.01.01 20:55:38
*.217.134.164

파안 대소 하게 되는군요..

그러게요 90년대면 열광했을텐데 우연히 검색링크 타고 들어오다가...
파일 첨부

여기에 파일을 끌어 놓거나 파일 첨부 버튼을 클릭하세요.

파일 크기 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )
List of Articles
번호 제목 글쓴이 날짜sort 조회 수
141 엔진 64비트 포팅 프로젝트 진척상황 여치 2007-05-01 3442
» 3D엔진 및 네트웍 솔루션 x64 포팅 프로젝트 대충 완료 file [4] 여치 2007-05-05 3474
139 맥스플러그인 64비트 포팅 프로젝트 [5] 여치 2007-05-11 3132
138 비러머글 맥스8 플러그인 위저드 설정 요령 여치 2007-07-10 3211
137 개선된 라이트맵 file 여치 2007-07-19 3903
136 64비트 릴리즈 모드 테스트 여치 2007-07-19 3494
135 계속 개선중인 라이트맵 file 여치 2007-07-24 3534
134 후닥닥 구현한 쉐도우맵 file 여치 2007-07-29 4484
133 64비트 어셈에서 스택 사용시 주의사항 여치 2007-08-23 3740
132 유져모드 메모리 페이징 구현 여치 2007-09-23 3357
131 최근 엔진 스샷 file [3] 여치 2008-01-25 3889
130 라이트맵 드로잉 기능이라면... file [1] 여치 2008-01-25 3883
129 주말동안 작업내용 [1] 여치 2008-01-28 3556
128 DB에 세이브 기능 구현 여치 2008-02-02 3787
127 주말동안 작업 내용-라이트맵 관련 file [3] 여치 2008-02-04 3651
126 _NT_SYMBOL_PATH 여치 2008-02-04 5173
125 설 연휴기간 동안 작업내용 여치 2008-02-08 3836
124 오클루젼 컬링 관련 여치 2008-02-09 5041
123 주말 작업 내용 file 여치 2008-02-11 4000
122 개밥먹기 여치 2008-02-28 4449
天安門大屠殺 六四天安門事件 反右派鬥爭 大躍進政策 文化大革命 六四天安門事件 The Tiananmen Square protests of 1989 天安門大屠殺 The Tiananmen Square Massacre 反右派鬥爭 The Anti-Rightist Struggle 大躍進政策 The Great Leap Forward 文化大革命 The Great Proletarian Cultural Revolution 人權 Human Rights 民運 Democratization 自由 Freedom 獨立 Independence 多黨制 Multi-party system 民主 言論 思想 反共 反革命 抗議 運動 騷亂 暴亂 騷擾 擾亂 抗暴 平反 維權 示威游行 法輪功 Falun Dafa 李洪志 法輪大法 大法弟子 強制斷種 強制堕胎 民族淨化 人體實驗 胡耀邦 趙紫陽 魏京生 王丹 還政於民 和平演變 激流中國 北京之春 大紀元時報 九評論共産黨 獨裁 專制 壓制 統一 監視 鎮壓 迫害 侵略 掠奪 破壞 拷問 屠殺 肅清 活摘器官 障テ社會 誘拐 買賣人口 遊進 走私 毒品 賣淫 春畫 賭博 六合彩 台灣 臺灣 Taiwan Formosa 中華民國 Republic of China 西藏 土伯特 唐古特 Tibet 達償ワ喇嘛 Dalai Lama 新疆維吾爾自治區 The Xinjiang Uyghur Autonomous Region free tibet



XE Login

天安門大屠殺 六四天安門事件 反右派鬥爭 大躍進政策 文化大革命 六四天安門事件 The Tiananmen Square protests of 1989 天安門大屠殺 The Tiananmen Square Massacre 反右派鬥爭 The Anti-Rightist Struggle 大躍進政策 The Great Leap Forward 文化大革命 The Great Proletarian Cultural Revolution 人權 Human Rights 民運 Democratization 自由 Freedom 獨立 Independence 多黨制 Multi-party system 民主 言論 思想 反共 反革命 抗議 運動 騷亂 暴亂 騷擾 擾亂 抗暴 平反 維權 示威游行 法輪功 Falun Dafa 李洪志 法輪大法 大法弟子 強制斷種 強制堕胎 民族淨化 人體實驗 胡耀邦 趙紫陽 魏京生 王丹 還政於民 和平演變 激流中國 北京之春 大紀元時報 九評論共産黨 獨裁 專制 壓制 統一 監視 鎮壓 迫害 侵略 掠奪 破壞 拷問 屠殺 肅清 活摘器官 障テ社會 誘拐 買賣人口 遊進 走私 毒品 賣淫 春畫 賭博 六合彩 台灣 臺灣 Taiwan Formosa 中華民國 Republic of China 西藏 土伯特 唐古特 Tibet 達償ワ喇嘛 Dalai Lama 新疆維吾爾自治區 The Xinjiang Uyghur Autonomous Region free tibet