Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 
Вернуться
Тема: Добрый день. Вчера зарегистрировался и решаю задачи... Здесь один момент: отправляю одну задачу несколько раз на сервер с одним и тем же кодом, а время выполнение и память отличается. Из за чего это так?! Спасибо.
1
  1  Меньшиков Фёдор Владимирович, 02 апреля 2016 г. 12:22:59
      С Windows Vista есть QueryProcessCycleTime. Возможно, лучше, чем GetProcessTimes, но всё равно точно измерять то, что объективно меняется от запуска к запуску, дело неблагодарное.
  2  Хворых Павел, 31 марта 2016 г. 21:13:38
      To: Беляев Сергей Николаевич
Да, к сожалению не выйдет. Время у процессов (GetProcessTimes) измеряется с точностью всего лишь 64 герца (15 мс), а таймер высокой точности (QueryPerformanceCounter) измеряет общее время процессора.
Кстати, на Codeforces используют именно GetProcessTimes. На acm.timus.ru, судя по временам посылок, тоже.
  3  Хворых Павел, 31 марта 2016 г. 21:12:24
      To: Меньшиков Фёдор Владимирович
А что вам даст виртуальный процессор (что бы это не было)? Много времени работы программы происходит вообще вне процессора: работа с файлами (время зависит от загруженности диска) и работа с памятью (время зависит от фрагментации памяти и еще чёрт знает от чего, а конкретные выделенные адреса влияют на работу кэша).
  4  Меньшиков Фёдор Владимирович, 31 марта 2016 г. 16:37:48
      Павел, замерить абсолютно точно можно, используя виртуальную модель процессора, работающего с одной программой, и считая в ней такты. Но это слишком много возни. В реальном компьютере много что друг на друга влияет, взять хотя бы тот же кэш. Один процесс туда свои данные записал - второму для восстановления своих данных пришлось притормозить. А если бы данные второго остались лежать в кэше - всё было бы быстрее. Так что даже точное нахождение числа тактов на машине с многозадачностью не даёт одинакового времени работы.

Из менее радикального можно попробовать дать проверяющей виртуалке 2 ядра и повысить приоритет исполняемой программы до реального времени, но мне кажется, что выгода, состоящая в постоянном времени работы, того не стоит.
  5  Хворых Павел, 30 марта 2016 г. 20:30:57
      Если не секрет, как можно точно замерять? Да и еще чтобы замер влиял на время работы.
     Я так понимаю, что нужно считать такты процессора для заданного процесса. Но что-то в windows у меня это не получилось сделать. Поэтому я замеряю только реальное время выполнения, которое зависит от других процессов.
  6  Меньшиков Фёдор Владимирович, 30 марта 2016 г. 16:47:57
      Тут всё очень похоже на принцип неопределённости Гейзенберга в физике. Можно точно замерить, но сам замер будет влиять на время работы. Можно неточно замерить, но влияние замера будет минимально. Я так понимаю, на acmp предпочли второе.
1

Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!

Красноярский краевой Дворец пионеров, (c)2006 - 2026, ИНН 246305493507, E-mail: admin@acmp.ru