2011-04-12 5 views
2

Intel TBB를 사용하는 일부 코드가 있으며 32 코어 컴퓨터에서 실행됩니다. 코드에서 나는Intel Parallel Studio 타이밍 불일치

parallel_for (left_image_width-2 blocked_range (2, left_image_width/32) ...

더 경쟁 조건이없는, 동시 작업을 할 스레드 (32)를 생성하기 위해 사용하고 각 스레드입니다 clock_t를 사용하여 프로그램 시간을 측정합니다. 특정 이미지의 경우 완료하는 데 약 19 초가 걸립니다.

그런 다음 인텔 패러렐 스튜디오를 통해 코드를 실행하고 실행했습니다. 2 초 만에 코드. 이것은 내가 기대했던 결과이지만 두 가지 사이에 큰 차이가있는 이유를 알 수 없습니다 .tim_t는 모든 코어에서 클럭주기를 합친 것입니까? 그렇다면 그것은 이해가되지 않습니다. 아래 문제의 스 니펫입니다.

clock_t begin=clock(); 

create_threads_and_do_work(); 

clock_t end=clock(); 
double diffticks=end-begin; 
double diffms=(diffticks*1000)/CLOCKS_PER_SEC; 
cout<<"And the time is "<<diffms<<" ms"<<endl; 

어떤 조언을 주시면 감사하겠습니다.

답변

0

런타임의 차이가 두 개의 다른 입력 (이미지) 또는 단순히 두 개의 다른 런타임 측정 방법 (clock_t 차이와 Intel 소프트웨어 측정)의 결과인지 여부는 명확하지 않습니다. 또한 create_threads_and_do_work()에서 계속 진행되는 작업을 보여주지 않으며 사용중인 Intel Parallel Studio에서 어떤 도구를 언급하지 않았습니까? Vtune입니까?

clock_t 차이 방법은이를 호출 한 스레드 (예제의 주 스레드)를 합산하지만 create_threads_and_do_work() 내에서 생성 된 스레드의 처리 시간은 계산하지 않을 수 있습니다. 여부는 함수 내에서 모든 스레드가 완료 될 때까지 기다렸다가 함수를 종료하는지 또는 단순히 스레드를 생성하고 즉시 처리를 완료하기 전에 종료하는지 여부에 따라 다릅니다. 함수에서 수행 한 작업이 모두 parallel_for() 인 경우 clock_t 차이가 올바른 결과를 가져와야하며 다른 런타임 시간 측정과 달라야합니다.

인텔 패러렐 스튜디오에는 Vtune이라는 프로파일 링 도구가 있습니다. 강력한 도구입니다. 프로그램을 통해 프로그램을 실행하면 코드에서 각 함수의 처리 시간 (호출 시간은 물론)을 그래픽으로 즐겁게 볼 수 있습니다. 나는 이것을 한 후에 아마 당신이 그것을 알아낼 것입니다.

하나의 마지막 아이디어 - 인텔 소프트웨어를 사용할 때 프로그램이 완료 되었습니까? 때때로 Vtune이 데이터를 수집 한 다음 프로그램을 완료하지 않고 중지하기 때문에 묻습니다.