Быстрый вопрос . для реализации моего кода MPI, я получаю огромную разницу в обоих. Я знаю, что MPI_Wtime — это реальное время, истекшее каждым процессором, а clock () дает приблизительное представление об ожидаемом времени. Кто-нибудь хочет добавить какое-то утверждение?
clock
функция совершенно бесполезна. Он измеряет время процессора, а не время реального времени / стены, и, кроме того, у него есть следующие серьезные проблемы:
В большинстве реализаций разрешение очень плохое, например, 1/100 секунды. CLOCKS_PER_SECOND
это не разрешение, а масштаб.
С типичными значениями CLOCKS_PER_SECOND
(Стандарты Unix требуют, чтобы это было 1 миллион, например), clock
переполнится за считанные минуты на 32-битных системах. После переполнения возвращается -1.
Большинство исторических реализаций фактически не возвращают -1 при переполнении, как требует стандарт C, но вместо этого переносят. Как clock_t
обычно со знаком, попытка выполнить арифметику с перенесенными значениями приведет к либо бессмысленным результатам, либо неопределенному поведению.
В Windows он делает совершенно неправильные вещи и измеряет прошедшее время, а не процессорное время.
Официальное определение clock
в том, что он дает вам время процессора. В Windows для истеричный исторические причины — некоторые приложения могут сломаться, если вы измените его так, чтобы теперь отображать время процессора — в Windows время просто истекло.
MPI_Wtime
дает, как вы говорите, «текущее время на этом процессоре», которое совершенно другое. Если вы делаете что-то, что спит в течение 1 минуты, MPI_Wtime
будет двигаться вперед на 60 секунд, где clock
(за исключением Windows) будет в значительной степени неизменным.