RosettaStone
RosettaStone copied to clipboard
Optimizing std::map<GameTag, T>
GameTag는 현제 std::map으로 관리되고있습니다. 하지만 키 자체가 Dense하고 키의 갯수가 그렇게 많지 않은 GameTag는 오히려 Dense Hash Map이나 특수하게 GameTag을 위해 만든 컨테이너로 관리되어야 하는게 좀더 좋은것같습니다.
VTune으로 측정한 결과는 이렇습니다.

GameTag의 std::map에 접근하는것과, 그 std::map에 접근하는 iterator의 코스트가 소프트웨어의 병목에 거의 모든걸 차지하는것으로 나타났습니다.
그래서 이 부분을 충분히 최적화한다면 훨씬 좋은 퍼포먼스를 보여줄 수 있을거라고 생각합니다.
추가로 Dense Hash Map과 비슷하게 GameTag에 특화된 컨테이너를 만든다면. 2번의 접근으로 std::map과 비슷한 메모리 사용량으로 훨씬 빠른 컨테이너를 만들 수 있을거라고 예상됩니다.
또는 어처피 거의 카피되지 않는 GameTag의 특성이라면, 어느정도 메모리를 사용함에도 성능이 빠른 std::array<GameTag Count, T> 로 만드는것도 꽤 좋은 방법이라고 생각합니다.