우리는 최적화 노력을 통해 균일하게 느려지 는 적당한 크기의 C ++ 코드베이스 (10Mloc)를 연구하고 있습니다.
이 코드베이스는 우리가 결합하여 작동하도록 라이브러리 세트입니다. 이러한 라이브러리의 통신 방식에 대한 일반적인 프레임 워크가 개발 될 때 성능에 중점을 두었고 나중에 추가 된 부분이 많을 때 일반적인 프레임 워크는 크게 바뀌지 않았습니다. 필요할 때와 하드웨어가 발전함에 따라 최적화가 이루어졌습니다. 이로 인해 고가의 조기 결정이 훨씬 늦게 나타났습니다. 우리는 이제 코드베이스의 많은 부분을 다시 작성해야하기 때문에 추가 최적화가 훨씬 더 비싼 시점에 있습니다. 우리는 원칙적으로 코드가 훨씬 빠르게 실행될 수 있다는 것을 알고 있기 때문에 바람직하지 않은 로컬 최소값에 접근하고 있습니다.
쉬운 최적화 기회로 쉽게 혼동되지 않는 전 세계적으로 최적의 성능을 발휘하는 솔루션으로 코드베이스의 진화를 대체 할 방법을 결정하는 데 도움이되는 성공적인 방법이 있습니까?
편집하다
현재 프로파일 링 방식에 대한 질문에 답변하려면 :
우리는이 코드를 어떻게 사용할 수있는 지에 대해 두 가지 다른 시나리오만을 가지고 있습니다. 프로파일 링은 대량의 입력 샘플에 대한 평균 벽시계 시간과보다 자세한 실행 (명령 비용, 분기 오판 및 캐싱 문제)으로 수행됩니다. 이는 매우 균일 한 머신 (수천 개의 동일한 머신 클러스터)에서만 독점적으로 실행되므로 잘 작동합니다. 우리는 일반적으로 대부분의 시간 동안 대부분의 컴퓨터를 바쁘게 유지하기 때문에 새로운 것을 추가로 볼 수 있습니다. 문제는 새로운 입력 변형이 나타날 때 다른 사용 사례에서 가장 명백한 미세 비 효율성을 제거하여 "최적의 실행"시나리오의 수를 좁히기 때문에 후발 페널티를받을 수 있다는 것입니다.
sloc
입니다. 여기서 "큰"항목이 무엇인지 알 수 없기 때문에 "보통 크기"라고했습니다.