2013-06-27 2 views
4

빠른 질문. 내 코드의 MPI 구현을 위해, 나는 둘 다 큰 차이를 보이고있다. MPI_Wtime은 각 프로세서에서 경과 한 실제 시간이며 clock()은 예상 시간에 대한 대략적인 아이디어를 제공합니다. 누구든지 어떤 주장을 추가하고 싶습니까?clock()과 MPI_Wtime()의 차이점

답변

3

clock 기능은 전혀 쓸모가 없습니다. 그것은 CPU 시간이 아닌 실시간/벽 시간을 측정하고, 또한 다음과 같은 심각한 문제가 있습니다 : 대부분의 구현에

  1. 는, 해상도가, 예를 들어, 1/100 초 매우 나쁘다. CLOCKS_PER_SECOND은 (는) 해상도가 아니라 해상도입니다.

  2. 일반적인 값이 CLOCKS_PER_SECOND (예 : 유닉스 표준의 경우 1 백만 회 필요) 인 경우, clock은 32 비트 시스템에서 오버 플로우됩니다. 오버플로 후 -1을 반환합니다.

  3. 대부분의 히스토리 구현은 C 표준에 필요하지만 실제로 대신 랩핑 할 때 -1을 반환하지 않습니다. clock_t은 일반적으로 서명 된 형식이므로 래핑 된 값으로 산술 연산을 수행하면 의미없는 결과 또는 정의되지 않은 동작이 발생합니다.

  4. Windows에서는 완전히 잘못된 것이므로 CPU 시간보다 실시간으로 측정됩니다.

+0

답변 해 주셔서 감사합니다. MPI 프로그램의 전체 시간을 측정해야합니다 (각 MPI_Wtime()과 다를 수 있음). 프로파일 링은 MPI 구현에서 오는 몇 가지 다른 기능을 감지하는 데 상당한 시간이 걸리지 않기 때문에 나에게 좋지 않은 것처럼 보입니다. 어떻게 할 수 있는지 생각해보십시오. –

+0

나는 마지막으로 MPI_Barrier (MPI_COMM_WORLD)에 전화를 걸 수 있으며,이 후에 MPI_Wtime()을 전체 실행 시간으로 기록 할 수 있습니다 (이것은 속도 결정 단계로 작동 함) 또는 문자 그대로 말하면 최대 값이 될 것입니다 MPI_Wtime(). 나를 확인해주세요! –

+0

저는 MPI에 익숙하지 않지만 문서를 빨리 ​​확인하면'MPI_Wtime'이 CPU 시간이 아닌 실시간을 반환한다는 것을 알 수 있습니다. "호출 프로세서에서"라는 구절은 오해의 소지가 있습니다. 그것은 CPU 시간과 관련이없는 것처럼 보이지만 오히려 다른 코어가 현재 실시간이 무엇인지에 대해 약간 다른 아이디어를 가질 가능성을 허용합니다. 그러나 이러한 불일치는 고품질 시스템에는 존재해서는 안됩니다. –

3

clock의 공식 정의는 CPU 시간을 제공한다는 것입니다. Windows에서 히스테리컬 한 역사적인 이유 - 그것은 CPU 시간을 반영하도록 변경하면 일부 응용 프로그램을 깨뜨릴 것입니다 - Windows에서 시간은 그냥 경과 시간입니다.

MPI_Wtime은 "이 프로세서의 현재 시간"을 제공합니다. 이는 상당히 다릅니다. 1 분 동안 잠자는 것을하면 MPI_Wtime은 60 초 앞으로 움직이며, clock (Windows 제외)은 거의 변경되지 않습니다.