2010-07-30 3 views
0

내가 아는 모든 .net 프로파일 러는 CPU 캐시의 효과를 고려하지 않습니다.CPU 캐시의 효과를 고려하여 .net 응용 프로그램을 어떻게 프로파일 링합니까?

CPU 캐시에서 필드를 읽는 것이 주 메모리에서 읽는 것보다 100 배 빠를 수 있다면 큰 요인이 될 수 있습니다. (answer에서 이것을 설명해야만했습니다.)

저는 프로파일 러가 말하는 느린 루프를 빠르게하는 긴 타이머를 너무 많이 보았습니다. 실제로는 CPU 캐시가 속도를 빠르게합니다.


예컨대 나는 데이터 액세스가 CPU 캐시 많이 누락뿐만 아니라 단지 내가 더 신뢰할 수있는 기본 프로파일 링 결과를 얻는 경우 볼 수 있도록 바랍니다.

과거에는 데이터를 좀 더 압축하여 CPU 캐시에 모두 넣거나 다른 데이터를 액세스하면 큰 영향을 미칠 수 있음을 발견했습니다. 예 : 배열은 CPU 캐시에 적합하지 않을 경우

AccessArrarFromStartAndDoSomething() 
AccessArrayFromEndAndDoSomethingElse() 

더 나은 다음

AccessArrarFromStartAndDoSomething() 
AccessArrayStartEndAndDoSomethingElse() 

이지만, inprovment의 유형을 발견하는 것은 매우 어렵다. 이 시스템을 많이 확산 할 수있는 CPU의 캐시 나은에 맞도록


지출 더 많은 CPU 사이클은 데이터가 작게,하지만 대부분의 프로파일은 다른 방향을 가리 킵니다.

+2

정확하게 무엇입니까? – Walter

+1

.NET은 큰 런타임의 고수준 언어이며 CPU 캐시가 가능하지만 그것을 최적화하기위한 작업을 수행하지 못했습니다. –

답변

0

내가 본 너무 많은 사람들이 프로파일이 때 실제 생활 CPU에, 느린 말한다 루프를 과속 긴 타이머를 지출 : 예 사용 ANTS Performance Profiler's 새로운 샘플링 모드 것 캐시를 사용하면 속도가 빨라집니다.

일부 프로파일 러는 그런 말도 안되는 소리에 정말 좋습니다.

전체 목표는 무엇입니까? 벽시계가 적은 시간에 계산이 완료되기를 원하십니까?

그렇지 않은 경우이 대답을 무시하십시오.

그렇다면 벽 시계 시간을 낭비하는 원인이 무엇인지 알아야합니다.

타이밍 정확도가 아닙니다. 그것은 위치의 정확성에 관한 것입니다. 당신이 정말로 알아야 할 것은 코드 라인이 1) 합리적인 시간을 소비하고, 2) 더 잘 수행 될 수 있거나 전혀 수행 될 수 없다는 것입니다. 그러한 코드 행이 없으면 최적화 할 대상이 무엇인지 알아야합니다.

코드의 같은 라인을 찾을 수있는 좋은 방법은 1)가 호출 스택벽 시계 시간 (안 CPU-시간), 샘플을 받아, 2) 각각에 대해 알려줍니다 것이 어떤 프로파일입니다 코드 스택 (함수가 아님)이 호출 스택에 표시되면 스택에 나타나는 퍼센트의이 표시됩니다. 최적화를위한 후보 라인은 큰 비율의 라인 중 하나입니다. (몇 가지 비례 예 : ZoomLTProf)

솔직히 내가 사용하는 프로필러는 이미 가지고있는 프로필러입니다. 프로그램이 느려지는 동안 프로그램을 일시 중지하고 스택을 살펴 봅니다. 나는 많은 표본을 필요로하지 않는다. 실제로, 내가 할 수있는 코드 라인이 있다면, 두 개의 샘플로 나타난다면, 나는 픽스할만한 가치가 있다는 것을 알고 있으며, 그 지점에 도달하는 데 샘플 수가 적을수록 더 커진다. Here's a more thorough explanation.

거의 항상 "병목 현상"이 여러 개 있습니다. 그래서 나는 큰 것을 찾아서 고쳐주고 다시해야합니다. 병목 현상이 남아있는 병목 현상을 해결하는 것은 - 일 때 더 커졌습니다.. 이 "확대 효과 *는 단순히 더 이상 속도를 낼 때까지 계속 사용할 수 있습니다.

0

질문에 대한 오해가있을 수 있지만 간단히 말해서 프로필러를 높은 정확도, 세부 묘사 모드로 전환하는 것입니다.

http://www.simple-talk.com/community/blogs/andrewh/archive/2009/11/13/76420.aspx

+0

감사합니다. 지금까지는 샘플링 모드가 대부분의 .not 프로파일 러에 없었습니다. –

+0

그래, 그게 내가 다른 방향으로가는 곳이야. –

관련 문제