시간이 지남에 따라 직감 이 향상 될 수 있습니다 . 나는 약간 논란의 여지가 있지만, VTune과 CodeAnalyst를 사용하고 현재 CodeXL을 사용하면서 수년 동안 핫스팟이 어디에 있는지에 대해 직관보다 훨씬 정확하다고 말했습니다. 일부 코드를 프로파일 링 할 때 더 이상 완벽하게 보호되지 않는 지점. 그렇다고 맹목적으로 최적화하려고 시도하는 것은 아닙니다.
프로파일 링은 실제로 프로파일 러에 대한 의존도를 높이는 것이 아니라 줄였습니다. 필자는 프로파일 링 결과가 어느 정도 더 쉽게 예측 될 수 있는지, 핫스팟을 성공적으로 제거하고 어둠 속에서 길을 잃지 않고 사용자 엔드 작업을 완료하는 데 걸리는 시간을 단축 할 수 있다고 말합니다. 핫스팟이 무엇인지뿐만 아니라 캐시 미스와 관련하여 핫스팟이 왜 정확한지 이해하기 시작할 때까지 프로파일 러를 사용할 때도 가능합니다.
그러나 프로파일 러를 사용하기 전에는 직관력을 향상시키기 시작했습니다. 그 이유 중 하나는 코드에 익숙한 경우 가장 크고 가장 명백한 핫스팟과 관련하여 사용자의 직감이 정확할 수 있지만 그 사이의 모든 미묘한 것은 아닙니다. 당연히 완료하는 데 1 시간이 걸리는 사용자 엔드 작업이 있고 수십만 개의 요소에 걸친 입력을 처리하는 격차 이차 복잡성 알고리즘이 있다면, 아마도 이차 복잡성이라는 생각으로 전체 생명을 구할 수있는 풍부한 도박을 할 수있을 것입니다 여기서 오류 알고리즘. 그러나 그것은 당신에게 자세한 통찰력을 제공하지 않거나 , 시간에 기여 하지 않는 것을 정확하게 알려주지 않습니다 .
프로파일 링을 시작하고 시간을 크게 기여한 것으로 생각 된 모든 것들이 많은 시간을 기여하지 않는 곳을 볼 때 많은 가치가 있습니다. 비효율적 인 명백한 비 효율성의 원인이 아니라 의심되는 것들이 약간 비효율적이었을 수도 있지만 프로파일 링 후에는 시간이 거의 걸리지 않았다는 것을 깨달았습니다. 그리고 그것이 가장 직관적 인 통찰력을 얻는 곳은 잠재적으로 얼마나 많은 시간을 소비하고 있는지 명확하지 않은 모든 미묘한 영역에서 자신이 잘못되고 있음을 발견하는 것입니다.
명백한 알고리즘 복잡성 이상의 인간 직관은 종종 기계에 효율적인 것과 인간의 마음에 효율적인 것이 매우 다르기 때문에 잘못된 것으로 시작합니다. 처음에는 레지스터에서 CPU 캐시로, DRAM에서 디스크로가는 메모리 계층 구조에 대해 생각하는 것이 직관적이지 않습니다. 일부 처리 작업을 건너 뛰기 위해 룩업 테이블의 더 많은 분기 또는 메모리 액세스를 수행하는 것보다 중복 산술이 더 빠르다고 생각하는 것은 직관적으로 오지 않습니다. 의사 결정 비용, 메모리로드 및 저장 비용 등을 할인하면서 수행해야하는 작업량을 고려하는 경향이 있습니다. 하드웨어에 효율적인 것은 인간의 모든 가정을 시작하는 방식으로 반 직관적 일 수 있습니다.
프로파일 링을 통해 직관을 향상시키는 데 도움이되는 부분은 인터페이스 디자인 입니다. 인터페이스 디자인은 후시로 변경하는 데 비용이 많이 들고, 인터페이스에 따라 장소 수에 비례하여 비용이 증가합니다. 직관력 향상을 시작하면 비용이 많이 드는 설계 변경없이 향후 최적화를위한 호흡 공간을 남겨 두는 방식으로 인터페이스를 처음으로 더 잘 설계 할 수 있습니다. 다시 말하지만, 직관은 일반적으로 당신이 일반적으로 개발하고 항상 그 프로파일 러를 손에 둠으로써 무한정으로 발전하는 것입니다.