CPU 시장에서 소비자들에게 본격적으로 상용화된 멀티 코어 프로세서가 세상에 등판한게 13년차에 접어들고 있는데 아직까지 대부분의 프로그램(특히 게임)은 그냥 싱글 스레드로 코드를 짜넣어서 코드 하나만 붙들고 광광거리느라 그 좋은 최신 CPU들 성능 다 사용도 못하고 좆버벅이잖냐
(대표적으로 메이플스토리2인데 14년 전 기술을 사용하는 시대에 매우 뒤떨어진 암덩어리라고 취급받으면서도 겉핧기식 개선만 진행되었고 유저들의 기술사양 변경에 대한 모든 요구에 대해 개발팀은 일절 무응답으로 일관중이더라고)
특히 고사양 게임에서 이 이슈가 심한데 유저들은 개발자들이 조금 힘이 들더라도 병렬 프로그래밍을 통한 최소 2코어 이상, 여건이 된다면 4코어 이상의 코어를 적절하게 모두 사용하여 성능 향상(을 통한 프레임 드랍 감소와 각종 프리징 현상 제거)을 원하는데
정작 프로그래머들 특히 게임 프로그래머들은 유저들의 이러한 병렬 프로그래밍 사용 요구에 대해서 아주 학을 떼면서 싫어하고 어떻게든 병렬 프로그래밍을 쓰는 순간을 피하려 하더라고??
심지어 코딩에 대해서 좆도 아는 거 없으면서 같잖은 병렬 프로그래밍을 요구하고 자빠졌다는 아주 과격한 반응을 보이는 개발자들도 봤다
니네들도 병렬 프로그래밍 쓰는거 그렇게 싫어하냐??
H/W 자원 제대로 못 써서 병목현상이 일어나 해당 프로그램은 물론 시스템 전체에 과부하와 오류가 넘치는 한이 있더라도 병렬 프로그래밍을 쓰는 상황은 어떻게 해서든 수단 방법 안가리고 피하고 싶음??
lock... lock...
그렇게 쓰고싶으면 유체역학 수치해석. 최신 인공지능알고리즘. 몬테카를로 복합분석같은 걸 해라 게임하지말고 남이만들어서올린 소스도 많아
음... 아직까지 게임은 초고사양 하이엔드가 아닌 이상 다중 스레드는 시기상조다 이건가
멀티스레드 지원 잘되는 상용 게임엔진으로 크라이엔진이 있져
정작 크라이엔진은 채용 게임이 그렇게 많지 않잖어 유니티3D도 멀티코어 미지원으로 말 많았고.... 가만 그때가 1년반정도 전이였는데 지금은 됨?
윾니티는 레퍼런스에선 추천하지 않음
듣기로는 하스켈 리스프같은 함수형 언어가 병렬프로그래밍에 강하다고 들었는데
물론 안써봐서 모릅니다
직관적이지가 못하잖아 복잡하고... 문법적 개선이 필요하다
일단 개발이 어려움. 디버깅 힘들고 어느작업부터 시작하는지 순서 판단도 안되고.. 단순히 단일스레드 돌아가는거 멀티코어에 최적화작업은 쉬울수 있는데 복잡한 작업하는데 잘못건드렷다가 유지보수도 힘들어지고 오버헤드가 더 드는 경우가 많아서 동기화작업 최소화하고 멀티스레드로 돌리는게 생산성측면에서 훨씬 나음..
나도 openmp나 cuda 뭐다 첨나왔을때야 우와 이랫지만 뭐 물리엔진이나 인코딩 디코딩, 압축 이런거 구현하려고 하지않는 이상 억지로 갖다 붙여서 쓰는게 굳이 필요한가 싶음.. 멀티코어 활용해서 최적화해서 쓰는 사람보면 예전에 본 어셈블리어로 개발하시던분 보는 느낌..
본문이 좀 과격하긴 했는데 그러면 현실적으로 병렬 프로그래밍이 보편화 되려면 개발자 처우개선을 떠나서 문법 구조를 혁명적으로 바꾸지 않는 한 불가능하다고 보면 됨?
아키텍쳐 설계 실패로 인한 IPC(클럭 당 성능) 저하로 평소에는 힘도 못쓰는 AMD FX계열 CPU가 최신 OS상에서 멀티 코어 활용도가 높은 프로그램(반디집, 어도비 프리미어, 배틀필드 4)들을 구동하면 효율이 극적으로 개선되듯이 사용자층은 멀티 코어의 완전 보편화를 학수고대하고 있음
자본과 다년간의 노하우가 필요한게 게임엔진임. 게임개발에서보면 엔진을 만드느냐 있는걸 갖다쓰느냐 커스터마이징하느냐에서 또 투자비용이 갈릴테지만 어쨌든 중소규모 개발사 입장에선 협업해서 빠른기간에 완료되도록 단축시키길 원할거고 대부분의 게임이 퍼포먼스측면보다는 기능구현잘되고 버그없이 잘되기만하면 되는거임.
압축이랑 그래픽작업은 분업하기 좋은구조라서 멀티코어 활용하기 좋고 하이퍼스레딩으로도 많이 개선되는데 이런거처럼 하드웨어나 밑딴에서 획기적인게 나오거나 하지 않는 이상 싱글코어 게임이 유행하는 현상이 오래 유지 될듯.. 그리고 위에 멀티코어랑 멀티스레드랑 헷갈리면 안댐
정답을 알려주자면, 여기 이 갤러리에서 말하는 소위 땔감은 영원히 이걸 못다루기 때문이다. C/C++에 대한 깊은 이해와, 컴퓨터 아키텍쳐에 대한 깊은 이해가 필요하다. 간단한 예로, C/C++을 잘 알고 자료구조 알고리즘에 바싹한데, 아키텍쳐를 모르면 cache line size 고려안하고 이론적 complexity만 빠르게해서 멀티코어로 구현한 다음 빠르겠지 이래버리면, single core로 돌린 것보다 느린 결과를 받게 된다. 다시 말해서 병렬 프로그래밍 다 사용하고 싶으면, 자세히 알아야 된다 그 말이다.
그 다음 외적인 이유로는 디버깅을 들 수 있음. 조잡한 이유지. 결국은 언어 / 이론적인 능력(자료구조,알고리즘) / 아키텍쳐에 대한 것을 모르면 사용 못함. 왜 사용해야하는지 예를 들어주면... merge sort 같은 경우 prefix sum과 dutch flag problem(three-way partitioning)을 사용해서 멀티코어로 작성하면 O(log log n) 시간이 걸림. 물론 아키텍쳐 세부적인걸 고려안하면 현저히 느려져 실제론 싱글코어와 같은 결과를 얻음. critical path를 잘 고려해서 작성해야함.
땔깜들 잘 지껄이네 ㅋㅋ 아는척 댓글 적기는