cpu의 속도는 시간이 흐르면서 매우 빨라졌지만 아쉽게도 저장장치인 램은 그러지 못했다.
따라서 프로그램이 돌아가는 원리를 안다면 이러한 상황이 어떤 문제를 만드는지 이해할 것이다.
메모리에서 cpu로 데이터를 보내는데 읽는 속도가 너무 느리기 때문에
cpu가 빠르게 읽을 수 있도록 캐시 메모리를 cpu에 내장시켰다.
캐시 메모리에 데이터를 올릴때 해당 데이터 주변의 데이터들도 같이 올리는데
만약에 해당 데이터를 사용하고 나서 주변에 원하는 데이터가 있다면 빠르게 접근할 수 있다.
하지만 메모리 주소를 넘나드는 기존의 객체지향 방식은 캐시 미스가 발생하기 쉽다.
따라서 데이터 중심 디자인이 그 대안인데 자주 사용하는 데이터 끼리 메모리 상에서 인접한 위치에 두자는 것이다.
속도는 대규모 게임이건 아니건 간에 항상 중요한 문제다. 인디 레벨에서 필요할지 아닐지는 선택하는 것은 당신의 몫이다.
끝.
스크래치에서 테스트 한번 돌려봤는데 속도가 몇십배 차이남.
아마 유니티나 게임메이커도 비슷하지 않을까 싶음.
따라서 프로그램이 돌아가는 원리를 안다면 이러한 상황이 어떤 문제를 만드는지 이해할 것이다.
메모리에서 cpu로 데이터를 보내는데 읽는 속도가 너무 느리기 때문에
cpu가 빠르게 읽을 수 있도록 캐시 메모리를 cpu에 내장시켰다.
캐시 메모리에 데이터를 올릴때 해당 데이터 주변의 데이터들도 같이 올리는데
만약에 해당 데이터를 사용하고 나서 주변에 원하는 데이터가 있다면 빠르게 접근할 수 있다.
하지만 메모리 주소를 넘나드는 기존의 객체지향 방식은 캐시 미스가 발생하기 쉽다.
따라서 데이터 중심 디자인이 그 대안인데 자주 사용하는 데이터 끼리 메모리 상에서 인접한 위치에 두자는 것이다.
속도는 대규모 게임이건 아니건 간에 항상 중요한 문제다. 인디 레벨에서 필요할지 아닐지는 선택하는 것은 당신의 몫이다.
끝.
스크래치에서 테스트 한번 돌려봤는데 속도가 몇십배 차이남.
아마 유니티나 게임메이커도 비슷하지 않을까 싶음.
전에 올린 코드인데 비슷한 데이터 끼리 묶어놓고 모든 데이터들이 연속된 메모리에 올라갈 수 있게끔 구조를 잡았음.
그 결과 좀 난해하고 조잡하게 보이긴 하는데 난 이게 더 편한듯.
러스트나 고랭이나 요새 새로나오는 언어는 언어자체에 인헤리턴스 개념이 없다. mechanical sympathy라고도 하고 데이터 중심이라고도 하나 보지.. 레벨3 이상의 다양한 캐쉬와 프리페치 최적화가 중요해지면서... 인헤리던스를 기본으로한 추상화는 이제 끝난듯...
ㄴ 인헤리턴스와 캐시 최적화랑 어떻게 연관 되는 건가요? 참고 자료 있나요
부모 클래스로부터 읽어오고 그러려면 필연적으로 캐시랑 궁합이 안 좋을 것 같긴 하지만요
띠용 댓글에서 모르는거 많이 알려주시네
http://gameprogrammingpatterns.com/data-locality.html
근데 그거랑 상속이랑 무슨상관인지 잘 모르겟음
상속해도 메모리는 달라붙어있고 님이 말하는 지역성을 깨는건 상속이 문제가 아니라 상속에 다형성 끼얹으면서 가상테이블 참조할때 발생하는 캐시미스 아님?
그 제가 쓴 댓글은 글이 아니라 1번댓글에 한말
내가 헛소리했어 ㅋㅋ. "상속에 다형성 끼얹으면서 가상테이블 참조할때 발생하는 캐시미스" 그렇음.
이제 상속 통한 폴리모피즘 구현은 유행이 아닌듯.
http://harmful.cat-v.org/software/OO_programming/_pdf/Pitfalls_of_Object_Oriented_Programming_GCAP_09.pdf
가상테이블 캐시미스 싫어서 보통 쓰는게 CRTP 인데 - return 0;
crtp는 먼가여
구글링 해봤음 crtp 신기한거 많이 알아가네 ㄱㅅㄱㅅ