2010-08-11 2 views
0

Специалист по высоко оптимизированному коду однажды сказал мне, что важной частью его стратегии было наличие чрезвычайно высоких таймеров производительности на процессоре. Кто-нибудь знает, что это такое и как можно получить к ним доступ, чтобы протестировать различные оптимизации кода?Высокоточные таймеры cpu

Несмотря на то, что меня интересует независимо, я также хотел спросить, можно ли получить доступ к ним из чего-то большего, чем сборка (или с небольшой сборкой) через визуальную студию C++?

+1

http://icl.cs.utk.edu/papi/ – Anycorn

ответ

2

QueryPerformanceCounter() и связанные с ним функции в Win32 используют высокопроизводительные таймеры, встроенные в большинство современных чипов Intel.

4

Это зависит от платформы, но, поскольку вы упоминаете Visual Studio, я буду использовать окна.

Вам нужно QueryPerformanceCounter в win32. Вы также можете использовать StopWatch в .Net.

Re: Разрешение Секундомер
Непосредственно из связанной документации

использование частоты и IsHighResolution поля, чтобы определить точность и разрешение реализации Секундомер синхронизации.

Другими словами, это может быть высокое или низкое разрешение. В случае, если он низкий, и вам нужно быть высоким, вы будете вызывать функции таймера win32 (QueryPerformanceCounter и т. Д.)

+0

Я думал, что StopWatch использует только обычные предложения окон, например. с разрешением около 10-15 мс (что, я думаю, действительно обновляется с каждым переключателем потока). Я ошибаюсь в том, что StopWatch - это всего лишь таймер курса? –

+0

@ Джон Робертсон: см. Обновление –

+0

О, стреляй, ты прав, у него есть эти поля. Я забыл, но был знаком с StopWatch, который я использовал в прошлом, поэтому я не смотрел его более тщательно. Мои извинения. –

1

Точность вашего таймера полностью зависит от вашего оборудования. Если ваше оборудование не может измерить что-то меньшее, чем микросекунда, невозможно быть более точным, чем ближайшая микросекунда.

По моему опыту, я никогда не нуждался в более высокой точности, чем миллисекунды для измерения производительности. Если вы не строите микроконтроллер, где каждая инструкция по сборке имеет решающее значение для вашей скорости, любой заметный дифференциал скорости будет составлять порядка секунд, а не микросекунд. И если вы используете Visual C++, маловероятно, что вы будете работать на микроконтроллере.

+0

У меня очень много данных, поступающих очень быстро, и их нужно маркировать точными индикаторами времени прибытия. Микросекунда * может * работать, но я сомневаюсь, 10 не может быть и речи. Конечно, набрав это, я понимаю, что проблемы с потоками не позволяют вам получить больше 10 микросекунд, ваш поток будет заменен на длительные периоды. Хммм, мне интересно, как wirehark получает эти микросекундные времена прибытия. –

Смежные вопросы