2010-04-29 5 views
0

각 스레드의 실행 시간을 계산할 수 있는지 여부를 알고 싶습니다. pthread를 사용하여 C++로 멀티 스레드 프로그램을 구현합니다. 아시다시피, 각 스레드는 CPU를 경쟁하게됩니다. clock() 함수를 사용하여 각 스레드가 소비하는 실제 CPU 클럭 수를 계산할 수 있습니까?() 다중 스레드를 시작하는 것입니다C++ 스레드 실행 시간

Class Thread() 
{ 
Start(); 
Run(); 
Computing(); 
}; 

시작 : 같은

내 프로그램 보입니다. 그런 다음 각 스레드는 무언가를하기 위해 컴퓨팅 기능을 실행합니다. 내 질문은 어떻게 컴퓨팅 기능에 대한 각 스레드의 실행 시간을 계산할 수 있습니다.

+0

프로그램에서 항상이 측정을 수행하고 측정 된 수치를 사용해야합니까? 아니면 디버깅 목적입니까? 디버깅 용으로 사용할 수있는 도구가 많이 있습니다. 어떤 플랫폼을 코딩하고 있고 어떤 IDE를 사용하고 있는지 알려 주시면 도움을 드릴 수 있습니다 :-) – Fuzz

+0

. 여러분이 묻는 이유가 전반적인 실행 시간을 최소화하기 위해 무엇을 변경해야 하는지를 알고 싶다면, SO에서 찾을 수있는 좋은 대답이 있습니다. –

답변

2

아니, 당신은 clock 사용할 수 없습니다. 프로세서는 StartComputing 호출 사이의 다른 스레드로 전환 할 수 있으므로 여러 스레드의 시간을 계산할 수 있습니다. 한 스레드에 대해 진드기 카운터를 사용해야합니다.

+0

클럭에는 모든 스레드의 실행 시간이 포함됩니까? 그렇다면 내가 원하는 것은 각 스레드마다 틱 카운터를 사용하는 것이다. 틱 카운터에 대해 더 많은 설명을 해 주시겠습니까? – chnet

+0

예,'clock'에 대해. 그러나 스레드 로컬 카운터는 플랫폼 특정 기능이며 어떤 플랫폼을 사용합니까? –

+0

i686-apple-darwin9-g ++ - 4.0.1 – chnet

1

어떤 플랫폼을 사용하고 있습니까? 당신이 리눅스를 사용하고 커널> 2.6.26에있는 경우 getrusageRUSAGE_THREAD 플래그를 사용할 수 있습니다

struct rusage usage 
getrusage(RUSAGE_THREAD, &usage); 

struct rusage 내에서, 당신은 찾을 수 ru_utime 각각 사용자 시간 및 시스템 시간을 추적 ru_stime. 시작과 끝에서 한 번 호출하면 델타를 가져올 수 있습니다. clock_gettime(3)에 따라

1

: CLOCK_REALTIME 시스템 전체 실시간 시계 :

GNU libc와의

충분하게 최신 버전의 리눅스 커널은 다음과 같은 클럭을 지원한다. 이 시계를 설정하려면 적절한 권한이 필요합니다.

CLOCK_MONOTONIC 일부 지정되지 않은 시작 지점 이후로 설정 될 수없고 단조로운 시간을 나타내는 시계.

CLOCK_PROCESS_CPUTIME_ID CPU의 고해상도 프로세스 별 타이머입니다.

CLOCK_THREAD_CPUTIME_ID 스레드 별 CPU 시간 시계.

그래서 당신은 CLOCK_THREAD_CPUTIME_ID 시도가있을 수 있습니다.