일반적으로 (**) 실험을 통해 더 나은 성능을 얻지 못합니다.
당신은 그것을 얻을
간단하고 효율적인 디자인으로 시작하는 방법을 알고 있습니다. 이 부분이 잘못되면 실험에 큰 차이가 없습니다. 예를 들어, 코드 생성기 사용시기를 알리는 방법이 성공적인 설계 방법이라는 것을 알고 있습니다.
a) 백분율로 비싼 활동을 찾고 b) 더 나은 것으로 대체 할 수있는 활동을 찾아서 소프트웨어를 조정하는 방법을 알고 있습니다. 모두가 당신이 "프로필러를 사용해야한다"는 것을 알고 있지만 충분하지 않습니다.
다른 질문에 대한 답을 확인하십시오.
** 예외는 그래픽 렌더링, 프로세서 파이프 라인 또는 CUDA 동작과 같은 하드웨어 의존적 코드이거나 네트워크 또는 DB 프로토콜 실험과 같이 하드웨어를 사용하는 가장 좋은 방법에 익숙해 져야합니다.
ADDED : 큰 시스템의 많은 프로그래머들이 놀라운 것을 발견했습니다. 완벽하게 구성된 대규모 프로그램에는 크고 눈에 띄지 않는 성능 문제 가있을 수 있으며 프로파일 러는 일상적으로 현지화되지 않았기 때문에 찾을 수 없습니다. 비록 프로그램이 최상의 스타일로 수행 되더라도 프로그램의 일반적인 구조의 일부입니다.
구체적인 예를 들기 위해 다음은 작업을 수행하는 소스 코드 가있는 프로그램 입니다 (C ++로). 내가 작업 한 실제 C 프로그램에서 추출되었습니다.
그것은 의도 된 일을하지만 실제로 시간의 일부는 필요 하지 않습니까? 속도를 얼마나 높일 수 있습니까?
글쎄, 프로그램의 첫 번째 버전에서 완벽하게 합리적으로 보이고 비 로컬 (프로파일 러에게는 보이지 않음)의 시간이 33.3 %를 소비했습니다. 그것이 교체되었을 때, 그 시간은 절약되었고 그것은 프로그램의 두 번째 버전이었습니다.
프로그램의 두 번째 버전에서는 제거 할 수있는 다른 프로파일 러 (모든 프로파일 러에게는 보이지 않음)가 16.7 %의 시간이 걸렸습니다. 그것을 제거하면 버전 3이되었습니다.
버전 3에서는 13 %가 제거되었습니다. 남은 것 중 66 %가 제거되었습니다. 그 후 남은 것 중 61 %가 제거되었습니다!
그런 다음 마지막으로 남은 것 중 98 %가 제거되었습니다!
그래서 큰 그림은 무엇입니까? 원래 프로그램에서 사용한 1000 회주기 중 몇 개가 제거 되었습니까? 998!
모든 프로그램은 서로 다르지만 필자의 경험에 따르면 모든 대형 프로그램에는 프로파일 러가 찾을 수없고 수동 샘플링이 수행 할 수있는 일련의 시간 문제가 있으며 프로그래머가 실제로 최대 성능을 얻으 려면 제거 할 수 있습니다. 큰 속도 향상을 위해.