2011-08-03 6 views
0

경과 시간 (벽 시간)이 사용자 + 커널 시간보다 적은 상황에 대해 묻는 많은 스레드가 있는데이 상황에서 멀티 스레딩이 어떻게 발생하는지 이해합니다. 그러나 통해 일부 MPI 코드의 실행 타이밍 때경과 시간이 사용자 + 커널 시간을 크게 초과하는 이유는 무엇입니까?

$ 시간에 mpirun -n 4 ./a.out

나는 약 40의 경과 4~5분에 이르기까지 다양 시간, 사용자 시간을보고 있어요 초, 커널 시간은 약 40 초입니다. 나는 프로세스 간의 장벽 동기화가 원인의 일부일 수 있다고 생각합니다. 또는 단일 MPI 프로세스에 대한 정보를 얻는 데만 시간이 걸릴 수 있다고 생각합니다.하지만 여전히 판독 결과를 정확히 합리화 할 수는 없습니다. 아무도 그것을 설명 할 수 있습니까?

대단히 감사합니다.

+0

수면 시간은 사용자 시간이나 커널 시간의 일부가 아닙니다. 쓰레드는 디스크에서 기다리고, 네트워크에서 대기하고, 파이프에서 기다리고, 뮤텍스에서 기다릴 수 있습니다. – Nemo

답변

3

많은 프로세스에서 벽시계 시간이 총 CPU 시간을 크게 초과 할 것으로 예상됩니다. CPU를 사용하는 프로세스가 거의 없으므로 기다리는 데 많은 시간이 소요됩니다. 다행스럽게도 대기 시간은 더 이상 프로세스에 청구되지 않습니다. 대기 상태의 원인 :

  • 모든 종류의 I/O (디스크, 네트워크, 프로세스 파이프 등).
  • 프로세스 간 리소스 동기화.
  • 다른 프로세스에 할당 된 시간 조각입니다.
  • 메모리 스와핑 (요즘에는 일반적이지 않음).
  • 꽤 다른 어떤 종류의 인터럽트.

CPU 사용률이 벽시계 시간보다 짧아지는 중대한 통계 소프트웨어조차도 I/O를 수행하기 쉽습니다.

디스크의 한 파티션에있는 큰 파일을 같은 디스크의 다른 파티션으로 복사하는 극단적 인 예가 있습니다. 이것은 CPU 시간을 거의 들이지 않고 Wall time을 많이 걸릴 수 있습니다. ionice을 사용할 수있는 경우 디스크가 다른 작업으로 모두 사용 중이면 더 높은 벽 시간을 설정할 수 있습니다.

다음 명령은 사용자와 시스템 시간을 합친 것보다 실제 시간이 월등히 클 것입니다.

time bash -c "read ans" 
1

사용자/커널 시간은 프로세서가 사용 중일 때만 증가합니다. 코드가 디스크 나 네트워크 IO와 같은 것을 기다리는 경우 실제 경과 시간은 CPU 시간보다 훨씬 길어집니다.