Как измерить такт процессора

Обновлено: 07.07.2024

image


КДПВ

От переводчика:
Большинство моих знакомых для измерения времени в разного вида бенчмарках в С++ используют chrono или, в особо запущенных случаях, ctime . Но для бенчмаркинга гораздо полезнее замерять процессорное время. Недавно я наткнулся на статью о кроссплатформенном замере процессорного времени и решил поделиться ею тут, возможно несколько увеличив качество местных бенчмарков.

P.S. Когда в статье написано "сегодня" или "сейчас", имеется ввиду "на момент выхода статьи", то есть, если я не ошибаюсь, март 2012. Ни я, ни автор не гарантируем, что это до сих пор так.
P.P.S. На момент публикации оригинал недоступен, но хранится в кэше Яндекса

Функции API, позволяющие получить процессорное время, использованное процессом, отличаются в разных операционных системах: Windows, Linux, OSX, BSD, Solaris, а также прочих UNIX-подобных ОС. Эта статья предоставляет кросс-платформенную функцию, получающую процессорное время процесса и объясняет, какие функции поддерживает каждая ОС.

Процессорное время увеличивается, когда процесс работает и потребляет циклы CPU. Во время операций ввода-вывода, блокировок потоков и других операций, которые приостанавливают работу процессора, процессорное время не увеличивается пока процесс снова не начнет использовать CPU.

Разные инструменты, такие как ps в POSIX, Activity Monitor в OSX и Task Manager в Windows показывают процессорное время, используемое процессами, но часто бывает полезным отслеживать его прямо из самого процесса. Это особенно полезно во время бенчмаркинга алгоритмов или маленькой части сложной программы. Несмотря на то, что все ОС предоставляют API для получения процессорного времени, в каждой из них есть свои тонкости.

Функция getCPUTime( ) , представленная ниже, работает на большинстве ОС (просто скопируйте код или скачайте файл getCPUTime.c). Там, где это нужно, слинкуйтесь с librt, чтобы получить POSIX-таймеры (например, AIX, BSD, Cygwin, HP-UX, Linux и Solaris, но не OSX). В противном случае, достаточно стандартных библиотек.

Использование

Чтобы замерить процессорное время алгоритма, вызовите getCPUTime( ) до и после запуска алгоритма, и выведите разницу. Не стоит предполагать, что значение, возвращенное при единичном вызове функции, несет какой-то смысл.

Каждая ОС предоставляет один или несколько способов получить процессорное время. Однако некоторые способы точнее остальных.


OS clock clock_gettime GetProcessTimes getrusage times
AIX yes yes yes yes
BSD yes yes yes yes
HP-UX yes yes yes yes
Linux yes yes yes yes
OSX yes yes yes
Solaris yes yes yes yes
Windows yes

Каждый из этих способов подробно освещен ниже.

GetProcessTimes( )

На Windows и Cygwin (UNIX-подобная среда и интерфейс командной строки для Windows), функция GetProcessTimes( ) заполняет структуру FILETIME процессорным временем, использованным процессом, а функция FileTimeToSystemTime( ) конвертирует структуру FILETIME в структуру SYSTEMTIME, содержащую пригодное для использования значение времени.

Доступность GetProcessTimes( ): Cygwin, Windows XP и более поздние версии.

Получение процессорного времени:

clock_gettme( )

На большинстве POSIX-совместимых ОС, clock_gettime( ) (смотри мануалы к AIX, BSD, HP-UX, Linux и Solaris) предоставляет самое точное значение процессорного времени. Первый аргумент функции выбирает "clock id", а второй это структура timespec , заполняемая использованным процессорным временем в секундах и наносекундах. Для большинства ОС, программа должна быть слинкована с librt.

Однако, есть несколько тонкостей, затрудняющих использование этой функции в кросс-платформенном коде:

  • Функция является опциональной частью стандарта POSIX и доступна только если _POSIX_TIMERS определен в <unistd.h> значением больше 0. На сегодняшний день, AIX, BSD, HP-UX, Linux и Solaris поддерживают эту функцию, но OSX не поддерживает.
  • Структура timespec , заполняемая функцией clock_gettime( ) может хранить время в наносекундах, но точность часов отличается в разных ОС и на разных системах. Функция clock_getres( ) возвращает точность часов, если она вам нужна. Эта функция, опять-таки, является опциональной частью стандарта POSIX, доступной только если _POSIX_TIMERS больше нуля. На данный момент, AIX, BSD, HP-UX, Linux и Solaris предоставляют эту функцию, но в Solaris она не работает. определяет имена нескольких стандартных значений "clock id", включая CLOCK_PROCESS_CPUTIME_ID , чтобы получить процессорное время процесса. Тем не менее, сегодня BSD и HP-UX не имеют этого id, и взамен определяют собственный id CLOCK_VIRTUAL для процессорного времени. Чтобы запутать все ещё больше, Solaris определяет оба этих, но использует CLOCK_VIRTUAL для процессорного времени потока, а не процесса.
  • Вместо того, чтобы использовать одну из констант, объявленных выше, функция clock_getcpuclockid( ) возвращает таймер для выбранного процесса. Использование процесса 0 позволяет получить процессорное время текущего процесса. Однако, это ещё одна опциональная часть стандарта POSIX и доступна только если _POSIX_CPUTIME больше 0. На сегодняшний день, только AIX и Linux предоставляют эту функцию, но линуксовские include-файлы не определяют _POSIX_CPUTIME и функция возвращает ненадёжные и несовместимые с POSIX результаты.
  • Функция clock_gettime( ) может быть реализована с помощью регистра времени процессора. На многопроцессорных системах, у отдельных процессоров может быть несколько разное восприятие времени, из-за чего функция может возвращать неверные значения, если процесс передавался от процессора процессору. На Linux, и только на Linux, это может быть обнаружено, если clock_getcpuclockid( ) возвращает не-POSIX ошибку и устанавливает errno в ENOENT . Однако, как замечено выше, на Linux clock_getcpuclockid( ) ненадежен.

Доступность clock_gettime( ): AIX, BSD, Cygwin, HP-UX, Linux и Solaris. Но clock id на BSD и HP-UX нестандартные.

Доступность clock_getres( ): AIX, BSD, Cygwin, HP-UX и Linux, но не работает Solaris.

Доступность clock_getcpuclockid( ): AIX и Cygwin, не недостоверна на Linux.

Получение процессорного времени:

getrusage( )

На всех UNIX-подобных ОС, функция getrusage( ) это самый надежный способ получить процессорное время, использованное текущим процессом. Функция заполняет структуру rusage временем в секундах и микросекундах. Поле ru_utime содержит время проведенное в user mode, а поле ru_stime — в system mode от имени процесса.

Внимание: Некоторые ОС, до широкого распространения поддержки 64-бит, определяли функцию getrusage( ) , возвращающую 32-битное значение, и функцию getrusage64( ) , возвращающую 64-битное значение. Сегодня, getrusage( ) возвращает 64-битное значение, а getrusage64( ) устарело.

Доступность getrusage( ): AIX, BSD, Cygwin, HP-UX, Linux, OSX, and Solaris.

Получение процессорного времени:

times( )

На всех UNIX-подобных ОС, устаревшая функция times( ) заполняет структуру tms с процессорным временем в тиках, а функция sysconf( ) возвращает количество тиков в секунду. Поле tms_utime содержит время, проведенное в user mode, а поле tms_stime — в system mode от имени процесса.

Внимание: Более старый аргумент функции sysconf( ) CLK_TCK устарел и может не поддерживаться в некоторых ОС. Если он доступен, функция sysconf( ) обычно не работает при его использовании. Используйте _SC_CLK_TCK вместо него.

Доступность times( ): AIX, BSD, Cygwin, HP-UX, Linux, OSX и Solaris.

Получение процессорного времени:

clock( )

На всех UNIX-подобных ОС, очень старая функция clock( ) возвращает процессорное время процесса в тиках, а макрос CLOCKS_PER_SEC количество тиков в секунду.

Заметка: Возвращенное процессорное время включает в себя время проведенное в user mode И в system mode от имени процесса.

Внимание: Хотя изначально CLOCKS_PER_SEC должен был возвращать значение, зависящее от процессора, стандарты C ISO C89 и C99, Single UNIX Specification и стандарт POSIX требуют, чтобы CLOCKS_PER_SEC имел фиксированное значение 1,000,000, что ограничивает точность функции микросекундами. Большинство ОС соответствует этим стандартам, но FreeBSD, Cygwin и старые версии OSX используют нестандартные значения.

Внимание: На AIX и Solaris, функция clock( ) включает процессорное время текущего процесса И и любого завершенного дочернего процесса для которого родитель выполнил одну из функций wait( ) , system( ) или pclose( ) .

Внимание: В Windows, функция clock( ) поддерживается, но возвращает не процессорное, а реальное время.

Доступность clock( ): AIX, BSD, Cygwin, HP-UX, Linux, OSX и Solaris.

Получение процессорного времени:

Другие подходы

Существуют и другие ОС-специфичные способы получить процессорное время. На Linux, Solarisи некоторых BSD, можно парсить /proc/[pid]/stat, чтобы получить статистику процесса. На OSX, приватная функция API proc_pidtaskinfo( ) в libproc возвращает информацию о процессе. Также существуют открытые библиотеки, такие как libproc, procps и Sigar.

На UNIX существует несколько утилит позволяющих отобразить процессорное время процесса, включая ps, top, mpstat и другие. Можно также использовать утилиту time, чтобы отобразить время, потраченное на команду.

На Windows, можно использовать диспетчер задач, чтобы мониторить использование CPU.

На OSX, можно использовать Activity Monitor, чтобы мониторить использование CPU. Утилита для профайлинга Instruments поставляемая в комплекте с Xcode может мониторить использование CPU, а также много других вещей.

И если даже на AVR, где тактовые режимы можно по пальцам одной руки пересчитать, и где все изначально предсказуемо работает по дефолту, прозрачно и явно, у многих новичков были проблемы с пониманием того, в каком режиме работает генератор.

То в STM32, где описание системы RCC занимает 35 страниц убористого текста, схема не влезает на экран, а куча библиотек, вроде CMSIS и SPL или визардов, наподобие того что есть в CoIDE, генерируют стартовый код, определить текущую тактовую частоту превращается в непростую задачу. Ее и будем решать.

Как же понять, что у нас получилось на SYSCLOCK после всех этих HSI, HSE, делителей, мультиплексоров и PLL умножителей?


Но метод хорош, позволяет произвести непосредственный замер.

Вот тут, в нижней части схемы стоит мультиплексор MCO. На который можно вывести

Таким образом, через MCO можно поглядеть также на то, насколько плавает частота у HSI или поглядеть запустился ли HSE. А то и затактовать внешнюю периферию. В общем, вариантов применения много.


Итак, надо всего лишь правильно сконфигурировать вывод МСО. На STM32F103C8T6, который используется в модулях ARM STM для Pinboard это вывод А08

Если через SPL, то это выглядит вообще просто:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // Тактуем порт GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); // Конфигурируем вывод MCO RCC_MCOConfig(RCC_MCO_PLLCLK_Div2); // Подаем на MCO сигнал с PLL/2

Вручную чуть сложней, надо будет полазать в даташите и в определениях CMSIS:

RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // Подаем тактирование на порт GPIOA->CRH &=

GPIO_CRH_CNF8; // Сбрасываем биты CNF для бита 8. Режим 00 - Push-Pull GPIOA->CRH |= GPIO_CRH_CNF8_1; // Ставим режим для 8 го бита режим CNF = 10 (альтернативная функция, Push-Pull) GPIOA->CRH &=

GPIO_CRH_MODE8; // Сбрасываем биты MODE для бита 8 GPIOA->CRH |= GPIO_CRH_MODE8_1 | GPIO_CRH_MODE8_0; // Выставляем бит MODE для пятого пина. Режим MODE11 = Max Speed 50MHz RCC->CFGR &=

(RCC_CFGR_MCO); // Обнуляем MCO RCC->CFGR |=RCC_CFGR_MCO_PLL; // Выставлем для MCO сигнал с PLL/2 //RCC->CFGR |=RCC_CFGR_MCO_SYSCLK; // Выставляем для МСО сигнал с SYSCLK

Отладочные средства Keil
При работе в Keil, если запустить под отладчиком. например CoLinkEX (или просто CoLink, что установлен на Pinboard II), то можно открыть окно с настройками RCC и там посмотреть как происходит инициализация генератора. Какие режимы выставляются и так далее.



И, что самое приятное, там можно в режиме реального времени что угодно поменять на лету. Например, выдав сигнал на MCO (предварительно сконфигурировав вывод. Причем сделать это можно там же, в Keil, вызывав окно настроек GPIO и расставив галочки)



Эталонный код
На худой конец можно сунуть в память простейший эталонный код. Который выдает заведомо известную выдержку на заведомо известной частоте. И по расхождении частоты судить о реальной частоте контроллера.

Вот этот код, например, выдает по 1килогерцу на 1 мегагерц тактовой. Замеряя частотомером сигнал на выходе B05 можно узнать величину тактовой частоты контроллера в текущий момент:

RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // Конфигурируем CRL регистры. GPIOB->CRL &=

GPIO_CRL_CNF5; // Сбрасываем биты CNF для бита 5. Режим 00 - Push-Pull GPIOB->CRL |= GPIO_CRL_MODE5_0; // Выставляем бит MODE0 для пятого пина. Режим MODE01 = Max Speed 10MHz while(1) < GPIOB->BSRR = GPIO_BSRR_BR5; // Сбросили бит. Delay(55560); GPIOB->BSRR = GPIO_BSRR_BS5; // Установили бит. Delay(55560); >> /* Тупая задержка */ void Delay( uint32_t Val) < for( ; Val != 0; Val--) < __nop(); >>

В примере используется порт B05 т.к. мне удобно его бросить на светодиод на Pinboard. А так можно его перенастроить на любой другой. Разумеется изменив инициализацию.

Вот как это выглядит:

Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!

А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.

15 thoughts on “Определение текущей тактовой частоты при отладке”

а куча библиотек, вроде CMSIS и SPL или визардов, наподобие того что есть в CoIDE, генерирующих стартовый код, определить текущую тактовую частоту

Предложение несогласовано. Ты скорее всего какой-то кусок фразы забыл написать.

У меня STM32F4Dsicovery. Почему в Keil при отладке у меня есть только Core peripherals?

Новый проц и кейл еще не допили его поддержку. Через пол годика обнови кейл и попробуй еще раз :)

Ну начнем с того, что у меня совсем другое семейство. Другое ядро (кортекс м3) в котором все по другому. А во вторых, тут мсо полностью хардверное.

[i]Как же понять, что у нас получилось на SYSCLOCK после всех этих HSI, HSE, делителей, мультиплексоров и PLL умножителей?[/i]

Это если ты точно уверен, что все выставил правильно, что все работает именно так, как ты думаешь. Это ооочень часто бывает не так. Особенно когда только осваиваешь новое железо.

Ну, так обычно и делаю. Распечатываю и пишу.
Вот именно, когда новое железо. А после того, как фукнции отлажены (или спизжены из STD Periph Framework) уже нет необходимости следить за тактовой частотой (если не считать возможнй фейл кварца и переброс на RC).
Или еще бывают варианты сбоя тактовой частоты?
Поправьте, если ошибся.

А зачем? Есть же утилитка в виде экселевского файла у них. Все наглядно+сама формирует стартовый код.

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // Тактуем порт

Необходимо ещё включить тактирование AFIO (MCO относится к AF, судя по RM).

Заметил что кейл5 некорректно отображает время при отладке (ST-Link v2). У меня системный таймер тактируемый 9 МГц бросался в прерывание каждую секунду. А в симуляторе как то загадочно успевало натикать ровно 9 секунд.

Когда переводил проц на HSI и перенастроил систаймер на 1 сек. время в симуляторе отображалось правильно.
(не помню как использовал делитель hklc/8 в первом и втором случае.)

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.


Быстрая скорость выполнения задач – это цель каждого активного пользователя, решившего обновить персональный компьютер. Вне зависимости от предпочтений, как для геймеров, так и для видеомонтажеров, дизайнеров, копирайтеров и художников – нужно хорошее «железо», а в частности «камень». Многие, с целью увеличить производительность, покупают новый плашки оперативной памяти, забывая, что за скорость и качество выполнения задач отвечает другой компонент – центральный процессор. Чтобы купить подходящий «камень», важно уделить внимание всем характеристикам, но в первую очередь тактовой частоте, что это такое и как ее определить, разобраться нужно до покупки компьютера.

CPU персонального компьютера предопределяет его работу как в настоящем, так и в будущем. Возможность увеличить его показатели в будущем есть, но покупать следует сразу современную модель. Сэкономив пару тысяч, вы сокращаете актуальность «камня» на пару лет.

Что такое тактовая частота

Тактовая частота процессора

Заложенная в ЦП мощность не является стандартной, ее можно увеличить

Количество команд (тактов), которое выполняет процессор за 1 секунду, это и есть тактовая частота процессора. В роли единицы измерения для этой характеристики используются «герц», обозначение которого «HZ» или в русскоязычном варианте «ГЦ». Количество выполняемых тактов в секунду у современных процессоров превышает значения в 2-4 миллиона герц, поэтому чаще можно встретить модели с тактовой частотой в 2-4 GHZ (ГигаГерц).

Если говорить профессиональным языком, что значит термин тактовая частота процессора, то это количество приходящих на ЦП тактовых импульсов, которые синхронизируют его работу. Это понятие более точное, так как операции на современном компьютере могут состоять не просто из нескольких тактов, а иногда из десятков тактов. Поэтому и характеристики в несколько миллионов герц являются вполне адекватными, а не превышающими норму.

На что влияет частота процессора

На что влияет частота процессора

Значение тактовой частоты равняется ТЧ системной шины и множителя в настройках CPU

Таким образом даже разобравшись, что такое частота у процессора, обычный пользователь не до конца может понять, на что именно влияет этот показатель. Согласно заявлениям разработчиков, количество герц определяет, с какой скоростью ЦП, используя вычислительные мощности, выполняет задачи. Одним словом, данный показатель влияет на производительность, а следовательно, на качество работы пользователя.

Как узнать тактовую частоту процессора

Как узнать тактовую частоту процессора

Узнать характеристики процессора можно несколькими способами, стандартные обычно указываются в описании к модели процессора и на самом «камне». Информацию о CPU можно найти в разделе «Свойства системы», открыв «Панель управления ОС». Но эти два метода дают информацию о показателях, установленных по умолчанию. Для получения основных данных о ПК не нужны никакие утилиты

  1. Штатная – номинальное состояние, которые позволяет работать ЦП без нагрузок, сохранять его допустимые показатели тепловыделения, не занижая его быстродействие.
  2. Действующая – состояние ЦП, при котором используются необходимые показатели для работы системы в данный момент.
  3. Максимальная – в некоторых условиях, например, при запущенных играх или ПО, где нужна быстродействие от ПК, процессор может значительно нагреваться и увеличивать количество обрабатываемых тактов, для комфортной работы пользователя.

Показатели каждой из разновидности частот можно как понижать, так и снижать. Узнать, какая тактовая частота у процессора, возможно в программах: CPU-Z, AIDA64, HWInfo и др. Также эта характеристика указана в BIOS. Для получения информации, нужно открыть его (при загрузке компьютера нажмите «F12» или «Del», в зависимости от модели материнской платы), а затем откройте раздел «CPU Info».

Нужно ли изменять тактовую частоту

Нужно ли изменять тактовую частоту

Срок службы ЦП определяет сам пользователь, решая, на какой мощности будет работать и какого качества будет охлаждение

С целью повысить технические данные процессора и увеличить его производительность, можно изменить тактовую частоту CPU. Недостатком этого будет то, что после повышения входящих тактов, увеличится не только количество герц, но и количество подаваемой энергии. Будет регулярно перегреваться процессор, а значит, для его стабильной работы понадобится дополнительное охлаждение.

Решение изменить производительность – дело индивидуальное. Это делать можно, но с осторожным переходом между показателями, регулярно наблюдая за температурным режимом компьютера. Делать это не обязательно, но актуально, если ЦП слишком слаб для определенной игры или для работы в программе либо уже устарел.

Постоянный перегрев CPU гарантированно приведет к его постепенному повреждению и преждевременному выходу из строя.

Зависимость частоты процессора от количества ядер

Некоторые пользователи считают, что тактовая частота процессора – это показатель, который зависит от количества ядер, что указано в характеристиках. Это не так – данные показатели не являются смежными и никак не связаны друг с другом.

Интересно! В твикерах (утилиты для тонкой настройки операционной системы) можно изменить значение частоты для каждого ядра по отдельности. Но только специалистами, так как самостоятельная работа с многоядерностью попросту уничтожит процессор.

Варианты изменения частоты процессора на ноутбуке и компьютере

При желании можно увеличить количество GHz на любом ПК, но важно контролировать температуру и следить, не перегревается ли дорогостоящий компонент. Поэтому перед разгоном тактовой частоты нужно установить специальные утилиты, которые отображают температуру ЦП.

Справка. Увеличение тактовой частоты вручную или «разгон» также называют «оверлокингом».
Важно! Множитель нельзя сразу увеличивать на несколько единиц, это может привести к выходу из строя самого процессора – чем выше множитель, тем больше подается энергии. Если кулеры сломаны или недостаточно охлаждают системный блок, «камень», «сердце компьютера», просто сгорит, даже при первом запуске. Постепенно поднимая множитель и проверяя показатели температуры, пользователь определяет, какое значение оптимально.

AIDA64

Для оверлокинга и определения температуры лучше всего подходит утилита «AIDA64». С помощью этого твикера можно узнать все показатели материнской платы, операционной системы, SSD и HDD дисков. Но она чаще всего используется именно для настройки ЦП. Как видно на картинке, процессор, имеющий 3.4 GHz, переформатирован до 4.4 GHz

  • CPU-Z
  • Prime95
  • LinX
  • CoreTemp
  1. Измеряем и запоминаем стандартные характеристики в утилитах.
  2. Выключаем системный блок, дожидаемся окна загрузки и заходим в BIOS.
  3. В BIOS открываем раздел «CPU Clock», также он может называться «CPU Frenquency», а в некоторых материнских платах, настраивать множитель в «Advanced» в разделе «JumperFree Cinfiguration».
  4. Затем нужно в пункте «CPU Ratio» поднять значение множителя, на 0.5-1 единицу.
  5. Сохраняем и перезапускаем систему (кнопка F10).
  6. Ждем загрузки Windows, проверяем температуру через установленную программу.
  7. Если всё хорошо, перезапускаем ОС.
  8. Повышаем снова множитель на 0.5-1 единицу, сохраняем, проверяем и так далее.

Частота процессора

Кроме множителя, нужно увеличить и питание процессора, но делать это следует осторожно, также проверяя после каждого шага работу системы. Поднять этот параметр можно в настройках BIOS, в том же разделе, где повышается множитель, в пункте «CPU Over Voltage». Кроме настройки в утилитах, нужно регулярно менять термопасту и относиться к этому компоненту с осторожностью

Вышеуказанный способ, подойдет не для всех компьютеров. Метод настройки и допустимые значения различаются для каждой материнской платы, версии BIOS и других параметров. Разгон «AMD FX-4300» к примеру, требует отключения некоторых параметров, подробнее про оверлокинг этой модели ЦП читайте тут.

Например, ПК не будет показывать полную эффективность оверлокинга, если установленная оперативная память не справляется с ним. Самостоятельный разгон нужно делать осторожно, проверяя работу всех параметров. И помните, оверлокинг не является гарантийным случаем и если «камень» сгорит, то в этом будет виноват пользователь.

С коллегами обсуждаем до смешного простой вопрос: чем является такт работы процессора? Википедия уточняет:

В самом первом приближении тактовая частота характеризует производительность подсистемы (процессора, памяти и пр.), то есть количество выполняемых операций в секунду.

Обсуждаются два варианта:

  • изменение значения бита (одного)
  • ассемблерная операция (над рядом битов)


74.3k 8 8 золотых знаков 67 67 серебряных знаков 124 124 бронзовых знака 3,209 1 1 золотой знак 15 15 серебряных знаков 33 33 бронзовых знака IMHO более правильно обратить внимание на другую цитату Такт процессора или такт ядра процессора — промежуток между двумя импульсами тактового генератора, который синхронизирует выполнение всех операций процессора. из той же Википедии. -- Тут можно добавить, что в разных устройствах процессора могут использоваться разные тактовые частоты (обычно кратные). Напрямую связывать один такт процессора ни с изменением одного бита, ни с одной ассемблерной операцией в большинстве современных процессоров не следует. @VladD, почему эфемерное? Вполне ощутимое, а вот время обработки отдельной инструкции - да, вполне может варьироваться от 0 до каких-то космических значений (если, например, случился cache miss или чего похлеще).

Такт работы - это такт работы, т.е. промежуток времени между двумя соседними "пиками" некоего задающего тактового сигнала. Увы, без него не обойтись, т.к. схемы у нас цифровые и нам нужно фиксировать состояние сигналов. Физически к изменению битов и выполнению команд такт относится опосредованно. Во-первых, разные блоки процессора работают на разной частоте. Но если рассматривать простейший случай, то одна команда выполняется минимум за один такт работы исполнительного у-ва. Всякие команды типа умножения или деления могут выполняться за сотни тактов. Во-вторых, общение с внешним миром у процессора происходит через шины, например, шину данных. У этой шины есть разрядность, например, 64 бит. Опять же в простейшем случае мы можем по этой шине передать за единицу времени кол-во информации равное произведению частоты на битность. Т.е. за такт можно сделать одну передачу, при этом все 64 бита передаются одновременно

Еще раз поясню, что "кол-во тактов" - это по сути единица измерения времени. Связь со временем через частоту:

Читайте также: