2013-06-27 6 views
4

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

ответ

3

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

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

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

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

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

+0

Спасибо за ответ. Мне нужно измерить общее время программы MPI (конечно, это будет отличаться от каждого MPI_Wtime()). Профилирование мне не кажется хорошим, поскольку он не занимает много времени и обнаруживает некоторые другие функции, вытекающие из реализации MPI. Любая идея, как я могу это сделать? –

+0

Я думаю, что в последний раз я могу позвонить в MPI_Barrier (MPI_COMM_WORLD), и после этого я могу отметить любой из MPI_Wtime() как общее время выполнения (это будет работать как шаг определения скорости) или буквально будет максимальным из всех MPI_Wtime(). Пожалуйста, подтвердите меня! –

+0

Я не знаком с MPI, но быстрая проверка документации показывает, что 'MPI_Wtime' возвращает в реальном времени, а не время процессора. Фраза «на вызывающем процессоре» довольно вводит в заблуждение; это, похоже, не имеет никакого отношения к времени процессора, а скорее позволяет предположить, что разные ядра могут иметь несколько разные представления о том, что такое текущее время. Однако это несоответствие не должно существовать в системах высокого качества. –

3

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

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