Q1 : 코드 프로파일 링을 위해 어떤 도구를 사용하고 있습니까 (벤치마킹이 아닌 프로파일 링)?
Q2 : 코드를 얼마나 오래 실행할 수 있습니까 (통계 : 시간 단계 수)?
Q3 : 케이스가 얼마나 큰가?
내가하는 방법의 예는 다음과 같습니다.
벤치마킹 (시간이 얼마나 걸리는지 확인)과 프로파일 링 (빠르게 만드는 방법 식별)을 분리했습니다. 프로파일 러가 빠르다는 것은 중요하지 않습니다. 수정해야 할 사항을 알려주는 것이 중요합니다.
"프로파일 링"이라는 단어는 마음에 들지 않습니다. 히스토그램과 같은 이미지를 활용하기 때문입니다. 각 루틴에 대한 비용 막대가 있거나 "병목 현상"은 코드에 약간의 위치가 있어야 함을 의미하기 때문에 결정된. 이 두 가지 모두 일종의 타이밍과 통계를 의미하며 정확도가 중요하다고 가정합니다. 타이밍의 정확성에 대한 통찰력을 포기할 가치가 없습니다.
내가 사용하는 방법은 무작위 일시 중지이며 여기에 전체 사례 연구 및 슬라이드 쇼가 있습니다 . 프로파일 러 병목 세계관의 일부는 아무것도 찾지 못하면 찾을 것이 없으며, 무언가를 찾아 일정 퍼센트의 속도를 올리면 승리를 선언하고 종료한다는 것입니다. 프로필러 팬은 속도를 얼마나 높이는지 거의 말하지 않으며 광고는 쉽게 찾을 수 있도록 인위적으로 고안된 문제 만 표시합니다. 무작위 일시 중지는 쉽고 어려운 문제를 찾습니다. 그런 다음 하나의 문제를 해결하면 다른 문제가 드러나므로 프로세스를 반복하여 속도를 높일 수 있습니다.
수많은 예제에서 얻은 경험에 따르면 다음과 같습니다. 무작위로 일시 중지하여 한 가지 문제를 찾아서 고칠 수 있습니다 (예 : 30 % 또는 1.3x). 그런 다음 다시 할 수 있고 다른 문제를 찾아서 고칠 수 있습니다. 다른 속도 향상, 아마도 30 % 미만, 더 많을 수도 있습니다. 그런 다음 다시 고칠 다른 것을 찾을 수 없을 때까지 여러 번 다시 할 수 있습니다. 궁극적 속도 향상 요소는 개별 요소의 실행 결과이며 놀랍게도 큰 경우가 있습니다.
삽입 :이 마지막 요점을 설명하기 위해. 슬라이드 쇼와 모든 파일 이 포함 된 자세한 예제가 여기 있으며 일련의 문제 제거에서 730x의 속도 향상을 달성 한 방법을 보여줍니다. 첫 번째 버전은 작업 단위당 2700 마이크로 초가 걸렸습니다. 문제 A가 제거되어 시간이 1800으로 줄어들고 남은 문제의 비율이 1.5 배 (2700/1800)로 확대되었습니다. 그런 다음 B가 제거되었습니다. 이 프로세스는 6 번의 반복으로 계속되어 거의 3 배의 속도가 향상되었습니다. 그러나 프로파일 링 기술은 실제로 효과적이어야합니다. 왜냐하면 그러한 문제가 발견되지 않으면, 즉 더 이상 할 수있는 일이 잘못되었다고 생각되면 프로세스가 중단되기 때문입니다.
삽입 : 다른 방법으로 말하면, 연속적인 문제가 제거 될 때의 총 속도 향상 요소에 대한 그래프는 다음과 같습니다.
Q1의 경우 간단한 타이머를 벤치마킹하면 충분합니다. "프로파일 링"을 위해 임의 일시 정지를 사용합니다.
Q2 : 충분한 워크로드를 제공하거나 주변에 루프를 배치하여 일시 정지 할 정도로 오래 실행됩니다.
Q3 : 캐시 문제를 놓치지 않도록 사실적으로 큰 작업 부하를 제공하십시오. 메모리 가져 오기를 수행하는 코드에서 샘플로 표시됩니다.