Разница между clock() и MPI Wtime()

Быстрый Вопрос . для реализации MPI моего кода я получаю огромную разницу в обоих. Я знаю, что MPI_Wtime-это реальное время, прошедшее каждым процессором, и clock () дает приблизительное представление о ожидаемом времени . Кто-нибудь хочет добавить утверждение ?

2 ответов


на clock функция совершенно бесполезна. Он измеряет время процессора, а не реальное время / время стены, и, кроме того, у него есть следующие серьезные проблемы:

  1. в большинстве реализаций разрешение крайне плохое, например, 1/100 секунды. CLOCKS_PER_SECOND это не разрешение,а только масштаб.

  2. с типичными значениями CLOCKS_PER_SECOND (стандарты Unix требуют, чтобы это был 1 миллион, например),clock переполнит в считанные минуты на 32-битные системы. После переполнения он возвращает -1.

  3. большинство исторических реализаций фактически не возвращают -1 при переполнении, как требует стандарт C,а вместо этого переносят. As clock_t обычно является подписанным типом, попытка выполнить арифметику с обернутыми значениями приведет либо к бессмысленным результатам, либо к неопределенному поведению.

  4. в Windows он делает совершенно неправильную вещь и измеряет истекшее Реальное время, а не процессор время.


официальное определение clock Это дает вам CPU-время. В Windows, для истеричка исторические причины-это сломает некоторые приложения, если вы измените его, чтобы отразить CPU-time now-on Windows, время просто истекло.

MPI_Wtime дает, как вы говорите, "текущее время на этом процессоре", что совсем другое. Если вы делаете что-то, что спит в течение 1 минуты, MPI_Wtime будет двигаться 60 секунд вперед, где clock (за исключением Windows) было бы довольно почти без изменений.