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

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

6

Решение

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

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

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

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

  4. В Windows он делает совершенно неправильные вещи и измеряет прошедшее время, а не процессорное время.

5

Другие решения

Официальное определение clock в том, что он дает вам время процессора. В Windows для истеричный исторические причины — некоторые приложения могут сломаться, если вы измените его так, чтобы теперь отображать время процессора — в Windows время просто истекло.

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

3

По вопросам рекламы [email protected]