2011-12-20 4 views
2

내 응용 프로그램이 스레드 수에 선형으로 비례하는 문제가 있습니다. 듀얼 코어 CPU에서는 400 스레드의 성능이 800 스레드로 두 배가됩니다. 그리고 나의 직감은 실이 자고 있거나 막히고 있다고 나에게 말하고있다 ... 그러나 나는 callgrind에서 그것을 볼 수 없다.Valgrind callgrind는 총 시간 또는 "실행 시간"을 사용하여 데이터를 생성합니까?

그래서 callgrind는 함수 시간을 측정하거나 스레드가 데이터를 만들기 위해 활성화 한 시간을 측정합니다. 그것이 내가 무엇을 물어 명확하지 않으면 ... 스레드는 i++ 약 100 % 또는 콜 그래프의 약 66 %가 될 것입니다 ... 다음

sleep(1);//thread will not be scheduled to run for min 1 second... 

, 2 초

i ++; 

않습니다.

+1

일부 문법 및 마크 업을 수정 한 후에도 여전히 귀하의 질문을 이해하지 못합니다. –

+0

약 100 %입니다. (하지만 시도해 보시지 않으시겠습니까?) –

+0

예 : 실행 시간 45 초 동안 스레드 X가 22 초 동안 실행 중 ... Valgrind가 호출 그래프를 계산할 때 계산 그래프에서 계산을 수행합니까? 22 초 또는 45 초 전체 ... 또 다른 예. 네트워크 rcv의 스레드 블록이보고되는 시간의 대기 부분 인 경우 ...? – NoSenseEtAl

답변

1

Valgrind는 실시간 통계가 아닌 사용자 시간 통계를 수집합니다. 따라서 스레드가 서로 인터럽트를하면 Valgrind에서 스레드를 볼 수 없습니다. 각 기능을 실행하는 데 소요되는 실제 시간입니다.