![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Как отмерить кол-во тактов процессора, которые потребовались на выполнение функции или блока кода?
Можно конкретно под VS -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
W4FhLF |
|
||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Ну тут ещё под будет погрешность в кол-во тиков, которые занимают вот эти команды:
Можешь отдельно посчитать за сколько тиков они выполняются и искусственно отнимать это значение. Это сообщение отредактировал(а) W4FhLF - 29.4.2007, 09:11 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||
|
|||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
конкретно на ассемблере
в WinAPI есть по-моему функции QueryPerformanceCounter(), GetTicksCount() Добавлено через 1 минуту и 24 секунды W4FhLF, зачем так сложно? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
MAKCim, что именно тебе показалось сложным? rdtsc читает 64х разрядный счётчик из MSR10h и возвращает его в edx:eax, поэтому если между вызовами rdtsc проходит больше FFFFFFFFh тиков("тактов"), твой код работает неправильно.
Это сообщение отредактировал(а) W4FhLF - 29.4.2007, 09:24 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
rdtsc и QueryPerformanceCounter() - это одно и то же. Одна проблема у них, не считают они время ядра, обе возвращают только время вне ядра(пользовательское). Чтобы посчитать фактическое время выполнения любого кода, нужно использовать функцию GetTicksCount, но она вернет сразу количество милисекунд, т.е., чтобы перевести в тики, нужно получить текущую частоту перфоманс-счетчика(QueryPerformanceFrequency/1000) и умножить на неё, полученное время, и то, это будет не точным значением, но позволит замерить относительную производительность. Частоту делим на 1000, чтобы получить число тиков в милисекунду.
Добавлено через 9 минут и 5 секунд кстати, если кто-то сомневается, вызовите Sleep на пару секунд внутри блока замера. При слипе происходит переключение задач, все время, которое уходит на слип - это время работы ядра, а не программы, оно учтено не будет. Это простой пример. В основе любой программы время ядра распределено по-разному, поэтому мерить его необходимо тоже. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
GremlinProg, что за бред ты несёшь? Ботай умные книги и впредь не неси такой ахинеи.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Во первых, за бред ты уже получил минус, во вторых, ближе к сути.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
GremlinProg, хаха... Парень, ну если ты так в себе самоуверен, хотя не понимаешь элементарных вещей, то я даже не знаю с чего начать... В каждом твоём утверждении есть ошибки, причём настолько глупые, что зная ты то, что знаю, посмеялся бы над ними вместе со мной. Я думаю рейтинг мой тебе лучше исправить, а сообщение своё удалить, автора темы оно только запутает и никакой пользы не принесёт, в личку я дам тебе информацию и некоторые объяснения, ты всё сразу поймёшь. Или я могу в этой теме легко доказать твою дисскуссионную несостоятельность, только потом без обид. Что выбираешь?
![]() Это сообщение отредактировал(а) W4FhLF - 29.4.2007, 11:37 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Ты уж поверь мне, я проверил сей факт на реальных задачах, а не на высказываниях, подобных твоим, так что менять я ни чего не собираюсь.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Tectoder |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 202 Регистрация: 13.3.2007 Репутация: 7 Всего: 8 |
W4FhLF, молодец, но плюс поставить не могу, не дорос еще. Это сообщение отредактировал(а) Tectoder - 29.4.2007, 11:46 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
ты крайне не прав для начала бы посмотрел, что такое Time Stamp Counter, и не говорил глупостей изменение значения этого счетчика вообще говоря не зависит от CPL (user mode, kernel mode) процессор увеличивает значение этого счетчика при каждом clock cycle Добавлено через 2 минуты и 43 секунды W4FhLF, ну да, все верно просто для небольших фрагментов кода я не думаю, что количество циклов системных часов будет больше 0xFFFFFFFF -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
GremlinProg, ну тогда запасайся терпением парень
![]() Ну во-первых, если бы ты знал архитектуру процессора хотя бы на среднем уровне, то был бы в курсе, что rdtsc считывает значение одного из MSR регистров процессора(под номером 10h), этот регистр есть ни что иное, как внутрипроцессорный счётчик, который инкрементируется самим процессором, это целиком и полностью внутрипроцессорный механизм. На WinXP и выше(вроде даже на Win2k, но на память сказать не могу) QueryPerformanceCounter использует HPIT таймер, если он аппратано поддерживает, в противном случае используется PM таймер. Оба таймера располагаются на материнской плате. Оба эти механизма реализованы аппаратно и на этом уровне абсолютно всё равно на каком кольце привелегий выполняется код, счётчик в процессоре будет инкрементироваться, а таймер на мат.плате генерировать прерывания. Сможешь опровергнуть то, что я написал выше - будем вести беседу дальше. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Хорошо, спорить не буду, сейчас не могу повторить свой прошлый эксперимент, работаю в другом проекте. Минус не исправлю, просто потому, что было оскорбление. Но поставлю плюс, если мои слова не подтвердятся. Скажу лишь, что замеры производились при разреженном по потокам рисовании в дибы, каждый отдельный диб - это слой конечного образа, которые при рисовании собирались в один, путем прозрачного наложения, вычислений было много, каждый поток реализовывал свой метод, каждый поток имел свою нагрузку, тратил различное время. Замеры вычилялись перфоменсом и тиком. При больших нагрузках перфоменс считал только время потока, без учета простоя при конкуренции, тик считал све стабильно и правильно.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
Tectoder,
это уже реализовано на уровне архитектуры (Performance Monitoring (см. IA-32 System Programming Manual)) Добавлено через 2 минуты и 43 секунды что это? знаю APIC таймер, внешний 8252 совместимый таймер, а о таком не слышал -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Где было оскробление? Где? Покажи! Я лишь констатировал факт. Твоё незнание архитектуры системы и процессора - это твоя проблема, а не моя, вот и разбирайся в ней сам, а не метай стрелки. А если будут вопросы - создавай тему, помогу, чем смогу. В пределах данного топика твоего сообщение смотрелось бредово, потому, что твои рассуждения неверный и в любом случае ни GetTickCount, ни QueryPerformanceCounter не дают возможность !!!ИЗМЕРИТЬ КОЛ-ВО ТАКТОВ!!!!, именно это было нужно автору и именно rdtsc с некоторой степенью точности решает эту проблему! Добавлено через 1 минуту и 43 секунды
Пардон, HPET(High Precision Event Timers). http://en.wikipedia.org/wiki/High_Precision_Event_Timer -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
W4FhLF, о чем ты интересно ведешь речь? О разнице между rdtsc и QueryPerformanceCounter, или о своей отменной скорости чтения книжек, у меня зубков лежит перед глазами, я и сам прекрасно могу прочитать об RDTSC, что, кстати я и сделал перед своим первым постом. Теперь я тебе плюс точно не поставлю, учись уважать собеседника.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
GremlinProg, авторитет собеседника начинает падать в моих глазах, когда он пытается доказать что-то, чего он сам до конца не понимает, а вкупе с мальчишеской бронью в плане нежелания признать свою неправоту авторитет сводится в нулю, потому и у меня пропадает интерес. Давно бы поставил тебе минус, но считаю, что репа - это только твои положительные заслуги и свою личную неоправданную неприязнь переносить на рейтинг просто глупо.
А вот с Зубковым правильно, почаще читай его. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Первое, с чего ты начал, это понижения моего авторитета вглазах других собеседников. Я ни кому это не позволял и позволять не буду. Ответная реакция не заставила себя долго ждать. Вместо того, чтобы спросить, почему я так считаю, ты сразу перешел в наступление, ну и чье тут ребячество проявляется? А свои слова я уже четко аргументировал. Тебе стоило просто извиниться за резкость с твоей стороны и мы бы мирно решили разногласия, тем более, я не думаю, что твои твои аргументы сильно противоречат моим, у нас просто разный взгляд на вещи. Бросаться обвинениями в некомпетентности было просто глупо, у меня за плечами большой опыт работы.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Ну у вас тут детский сад, штаны на лямках: за минусы, плюсы боретесь
![]() W4FhLF, Спасибо Solved Это сообщение отредактировал(а) Rickert - 29.4.2007, 13:01 -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
в том то и дело, что ты выдаешь за факт то, что фактом не является если бы ты начал с фразы "Мне кажется...", "Могу предположить, что...", "ИМХО, ..." и пр., то я думаю вопрос решился бы тихо и мирно это не аргумент, а личные наблюдения (имхо) и их нельзя выдавать за факт, точнее это факт, но локального характера, который не претендует на обобщенность, всегда есть куча факторов, которые могли повлиять на работу твоей программы Это сообщение отредактировал(а) MAKCim - 29.4.2007, 13:03 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Не путай понятия. На фоне самого рационального решение, которое было предложено мною и MAKCim'om двуя постами выше ты берёшь и опровергаешь его правильность, приводя неверные доводы и вообще заставляя думать автора в другом направлении, после чего пытаешься мне доказать свою компетентность в этой области? Выводы о твоей некомпетентности в этом вопросе я сделал исходя из твоих сообщений и, видимо, при этом задел твоё самолюбие. Но это уже всё твои личные проблемы, мне всё равно. Решение проблемы было предложено вь втором посте, тему считаю исчерпанной. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
OK
где тут про режим ядра и пользовательский режим написано? ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
MAKCim, с каких это пор практический опыт не является аргументом, скажи мне, чему ты поверишь, тому что написано в книжке, или тому, что ты видишь в работающей системе, собранной своими же руками? Я конечно понимаю, что если ты и ответишь, то ответ будет в рамках приоритетности, которую ты уже выбрал(ты ведь поддерживаешь W4FhLF).
Я вообще не особо дерусь за плюсы, говорил ведь уже, если уж я и отвечаю на что-то, значит в этом вопросе я сам принимал участие и у меня есть время. Вот этот пост был основой дискуссии
Я его поддерживал и W4FhLF, только не нужно говорить, что каждый специалист должен активно использовать асм в своем коде, это не так, асм нужен только там, где нет более простого выхода, в этом, я с MAKCim согласен, жертвовать удобочитаемостью кода ради "мальчишеской брони", как сказал W4FhLF... PS: ИМХО - мы ведь все прекрасно знаем как эта абревеатура расшифровывается, зачем её использовать на каждом шагу, это невежливо. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
если то, что я увижу, будет противоречить официальной документации, буду у себя баг искать (честно) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
я тоже ), но только если, разложив все по полочкам, раз-за-разом не буду убеждаться в обратном. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: нет Всего: 93 |
ой, ребятки... не читайте Зубкова... у меня вот в своё время перед глазами лежали IA-32 manual и зубков... зубков есть не что иное как перевод первого с кучей косяков и отсебятины... хотя... если всё воспринимать абстрактно, то при незнании английского почитать можно... ИМХО -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: нет Всего: 25 |
Встречал вот такой вариант.
Вроде рабочий.
Это сообщение отредактировал(а) dizzy1984 - 1.5.2007, 09:28 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
dizzy1984,
зачем CPUID? Это сообщение отредактировал(а) MAKCim - 1.5.2007, 09:32 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: нет Всего: 25 |
Посмотрел что ты имеешь в виду.
Качал этот код из интернета и был уверен, что он только возвращает значение TSC. Звиняйте.
Зачем он там был я не знаю. Поленился проверить. ![]() |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Вообще правильно. Обычно, перед вызовом rdtsc, принято убеждаться в том, что все предыдущие операции были выполнены процессором. CPUID может быть выполнена только в случае завершённости все остальных инструкций(находящихся в очереди, на других конвейерах, в других блоках etc.), т.о. вызывая rdtsc после cpuid мы получаем более точные данные. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
W4FhLF,
точно, инструкция сериализации, совсем забыл ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |