Точное определение частоты CPU

Тема в разделе "WASM.ASSEMBLER", создана пользователем mr_Infern0, 4 май 2007.

  1. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    Ykidia
    Не спорю, но это влияет на результат в порядка +-10kHz, о которых я писал выше. - я бы не стал говорить так категорично. Вам выше сказали, что частота ЦПУ получается умножением частоты системного кварцевого генератора (14.318). То, что это кварц - замечательно, но есть один нюанс. Все кварцы уходят с завода с определенным допуском, допустим +-0.1% от его номинала. Как правило, заводской номинал не имеет никто. Любой кварц всегда можно подстраивать на нужную частоту пользователю. Увы, в писюхах подстройки не предусмотрено (да и не нужно такой точности). Поэтому и частота ЦПУ будет иметь допуск +-0.1%. Не поленился и считанул для 1 ГГц ЦПУ - +-1 МГц. 100 килогерц получу для допуска 0.01%. Ну а утверждать, что Вы меряете частоту с точностью 10 КГц - заблуждение, увы. Тем более не забываем название темы - Точное определение частоты ЦПУ. Наверное, корректнее будет так - Определение частоты...

    Сами говорите, что кварц, и тут же плетете макароны о том, как сильно она влияет... Говорите тогда уже "RC-генератор", и всем будет понятно. В общем-то 1) насколько я знаю, PIT уже давно не в материнке сидит, а в микропроцессоре (поэтому там должен быть нормальный кварцевый генератор); - ну ежели речь пошла о макаронах, то напомню, что Ваш любимый PIT прописан не на материне, не в процессоре, а в южном мосту чипсета.

    Pavia
    Ух, как много Вы всего понаписали. В общем все верно, но:
    14,31818 МГц - это значение выбито на самом кварце. И не понятно, какой резонанс имеют ввиду - последовательный или параллельный. Но дело даже не в этом. Во всех тестовых прогах, где фигурирует время мне приходится брать значение частоты кварца идеального, без допуска. А чему оно должно быть в идеале - быстренько посчитаем. Для этого внимательно изучим процедуру отработки аппаратного IRQ0 (системный таймер) любой захудалой БИОС матери и наткнемся на замечательную константу 1573040 (я ее помню наизусть !!!) - именно столько тиков отпущено на 86400 секунд в сутках. Ну а далее сам Бог велит посчитать, какова должна быть истинная частота системного генератора, чтобы наши часики в писюхе шли идеально точно - 1573040*12*65536/86400=14318159.644444444444444444444444 Гц. Именно поэтому я и написал - 14.318160 MHz (малость покривив душой).
     
  2. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Э-э-э может просто добавить в прогу ползунок "точность измерения", который будет влиять на длительность sleep`а. Чем дольше sleep, тем точнее результат.

    Но это конечно по-ламерски :)
     
  3. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    murder
    Не поможет, уважаемый. Точность будет повышаться, но циферки будут привязаны к реальной частоте системного кварцевого генератора, которую точно то мы не знаем (и помним о допусках с завода). А чтобы померить точно, нужно эталонным частотомером мерить номинал кварца 14.318 (или нам для измерений нужен эталон времени/частоты).
     
  4. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    Memphis
    Великоватый разброс допустили. Читаем на эту тему 1, 2, 3 и т.д.
    Вы так и не поняли. Речь шла о стабильности получаемых результатов и разбросов между ними в пределах одной системы. Никто и не говорил об абсолютных результатах.
    Сами себе противоречите. Определитесь прежде, что Вы хотите.

    Далее простые рассчеты
    Код (Text):
    1. 1573040*12*65536/86400 = 14318159,64444
    2. 1573041*12*65536/86400 = 14318168,74667
    3. 1573039*12*65536/86400 = 14318150,54222
    показывают, что все указанные Вами значения частоты кварца укладываются в область влияния константы 1573040.
    Однако история упорно указывает на другую частоту:
    Наиболее близкая константа к этой частоте 1573042. Но похоже на то, что древние версии BIOS подстраивали под кварцы, закупаемые для мат. плат на тот момент. А может просто кто-то фанател от круглых и рядом с ними чисел, ибо 1573040 = 0x1800B0. А может на тестовых машинах наиболее подходила именно эта константа (как раз из-за разброса их кварцов). А может еще что-нибудь. Откуда теперь знать?
    Позже, когда расплодились производители мат. плат и BIOS'ов к ним, код вокруг константы 1573040 и ее саму вряд ли меняли - скорее просто копировали, не вдаваясь в подробности. И вовсе не потому, что он наиболее точно отражал суть дела. А 1) для совместимости и 2) потому что работает.
    Поэтому
    оно никому ничего не должно. Известно, что в случаях, когда разработчику дается свобода действий (если от этой свободы ничего не зависит), подобные значения берутся чуть ли не от балды. "Балдой" может быть партия кварцов с определенным статистическим отклонением от нормы; чья-либо любовь к круглым числам; еще что-нибудь. Главное понимать, что получившаяся константа - всего лишь следствие. А не причина, что можно углядеть в акценте Ваших рассчетов.

    Могу сказать, что я предпринимал попытки мерять частоту PIT по CMOS. Я был смущен действительно немного другой частотой PIT (если считать часы CMOS за эталон). Но, как писалось выше, я забил на CMOS после пары недоразумений. Как еще померить частоту PIT или хотя бы с чем ее можно сравнить, я не в курсе.

    Ссылку дайте. Ибо у меня другая информация. Возможно, она устарела. Так что прошу привести ссылку для выяснения обстоятельств. Я уже устал лазить по тырнету в рабочее время - Ваша очередь :)

    P.S. Хочу заострить внимание на то, что в любых разработках - будь то железо или ПО, - велико влияние т.н. человеческого фактора. Собственно, имея в виду именно человеческий фактор, влияние которого мне не раз приходилось наблюдать в разработках различной сложности, я и позволяю себе рассуждать о чьей-то "любви к круглым числам" и т.д.
     
  5. asmdev

    asmdev New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    12
    Я вот хочу добавить что при сменённом multiplier в BIOS, таймер(PIT,RTC,HPET) + rdtsc работать не будет если у вас TSC увеличеваетса с одинаковой (Intel Manual Vol3B 18.10 - TIME-Stamp counter) частотой внезависимости от скорости процессора.
     
  6. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    А в каких процессорах так реализовано?
     
  7. asmdev

    asmdev New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    12
    многие x86-64 от Intel: Core Solo / Duo / 2 Duo, некоторые P4 & Xeon,
    если прочитать то что я сказал прочитать то выяснется что ето делается из за SpeedStep и тд.
    в будущем rdtsc будет только годна чтоб выеснит быстрее ли один кусок кода посравнению с другим

    проверял на 45nm Core2Duo, берется максимально возможный multiplier
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Memphis
    поидее эта константа должна зависить от материнки. Но я допускаю что разработчик просто вбил эту константу чтобы она соответсовала его материнке. Собственно никто ее не меняет вот она и осталась.
    А допуски у кварца просто ужасные.

    Ykidia
    В системе обычно 2 кварцивых генератора. Один для CMOS другой для всего остального.
    Частоты хотя и разные зато точность одного порядка 30-50 ошибок на милион. Ссылки не привожу, но это легко найти в описании на кварцевые генераторы. Других не бывает.

    Так что померить первый через второй собственно как и наоборот сомнительная затея. Зато можно оценить ошибку.

    Незнаю на что ссылаться. На intel в документации на чипсеты и материнки.

    http://mysearch.intel.com/corporate/default.aspx?q=Clock+Synthesizer&filter=1&num=15&category=all&&start=0
    Первые три ссылки. Это генераторы тактов. На новых компьютерах также используются такиеже генераторы.
    Он выдает частоту 14,318 на SIO(Super I/O) и LPC (то что раньше было ISA).
    Пример чипсета
    ftp://download.intel.com/design/chipsets/designex/29834901.pdf
    Всего два основных производителя генераторов Integrated Circuit Systems, Inc (ICS) и второй CYPRESS.
    Устройство такое кварц находиться на материнке подключен к генератору частот который имеет кучу выводов. Они идут на различные нужды один из источников подключен к южному мосту. В котором в блоке отвечающим за LPC (устаревшии устройства) находиться PIT который занимается делением частоты и выроботкой прерываний.
     
  9. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    asmdev
    Не совсем так. Зависимость там есть. Только она неявная. Частота TSC выбирается раз в зависимости от частоты(к примеру на старте), а дальше уже TSC не зависит от частоты процессора. Тут нужно подробнее разбираться.
     
  10. asmdev

    asmdev New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    12
    Верно, на старте. ОДИН раз. Потом скорость процессора изменяется BIOSoм или через SpeedStep
     
  11. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    asmdev
    Intel в своем репертуаре. Сначала сделали удобный инструмент, а потом нафиг его изгадили и извратили.
    Хотя SpeedStep мне что-то ни разу не помешал.
    А это смотря для каких целей мы использовали rdtsc. Мне это нужно не столько для определения частоты микропроцессора, сколько для выяснения частоты таймера, по которому потом можно синхронизироваться посредством rdtsc.

    Pavia
    Спасибо за сылки, конечно, посмотрю. Но вообще я обращался к члену под названием Memphis ;), уж очень загадочно он говорит, умничает то бишь, а фактической инфы от него маловато. Скрывает что-то...

    Memphis
    Хватит шифроваться, выкладывай все как есть =)
     
  12. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    Ykidia
    выкладывай все как есть - да нечего больше выкладывать. За работой Ваши посты некогда почитать, а уж отписаться... Тем более сегодня без обеда весь день, ни крошки во рту целый день, во как.
     
  13. asmdev

    asmdev New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    12
    Intel преподносит это как очень и очень хорошо. Неважно что у тебя частота процессора изменется в середине тестируемово кода.
     
  14. zloy

    zloy New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2007
    Сообщения:
    18
    А мне кажеться все эти проги просто округляют частоту до целой части.
     
  15. 4VR

    4VR New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2008
    Сообщения:
    25
    спор ни о чём
     
  16. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Ykidia
    А вот мне помешал... я как-то долго не мог понять, почему связка
    N*(
    rdtsc
    некие извращения
    rdtsc
    printf результаты
    )
    дает разные результаты при выоде на консоль и в файл. Причем на Vista все нормально, эффект проявляется только на XP. Видимо, вывод на консоль не буферизуется и проц успевает "остыть", трудно сказать, я не интересовался особенностями реализации SpeedStep.
     
  17. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    Может канеш чегото не понимаю, но разве нет какой-нить микрухи-клокера в реге которой соб-сно лежит значение FSB и множителя?
     
  18. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Это явно не SpeedStep, а вмешательство системы в "долгоиграющий" тестируемый код (не забыл приоритет поднять?, хотя и это не полная гарантия). SpeedStep как раз на количество тактов (rdtsc), которое занимает тестируемый код не влияет совсем и никак ;) а влияет она на GetTickCount, QueryPerformanceCounter и прочие "альтернативные" способы измерения производительности. Во всяком случае так у меня - XP sp3, AMD Turion(tm) 64 X2 Mobile Technology TL-58.
    зы:мой тестер здесь
     
  19. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    Возможно, неверное предположение, но все же: когда я лазил по BIOS+SMI handler, вроде бы были там процедуры получения... проверить легко - дамп биос (или smi) и поиск строк ~MH (чего он там в setup выводит). Возможно, у smi есть такой интерфейс и тогда можно попросить [даже] из ring3 совершенно прозрачна.
     
  20. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    smi как то не по дзенски, вот вылезти в ring0 и повтыкать SMbus это вариант :)