Как часто меняется содержимое регистра ЦП? - PullRequest
0 голосов
/ 04 апреля 2020

Часто ли изменяются данные, которые хранятся в регистрах процессора? В статье Википедии описываются регистры как " быстро доступное местоположение ... небольшого количества быстрого хранилища ". Я предполагаю, что память быстрая, потому что регистр часто используется и изменяется?

Ответы [ 2 ]

2 голосов
/ 04 апреля 2020

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

// Type your code here, or load an example.
int polynom(int num) {
    return num * num + 2 * num + 1;
}

, который компилируется как:

polynom(int):
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-4], edi
      * mov     eax, DWORD PTR [rbp-4]
      * imul    eax, eax
      * mov     edx, DWORD PTR [rbp-4]
        add     edx, edx
      * add     eax, edx
      * add     eax, 1
        pop     rbp
        ret

Обратите внимание на множество записей в регистр eax, отмечен звездочкой. В этой маленькой функции пять почти последовательных инструкций записывают в этот регистр c, что означает, что мы можем ожидать, что видимое программой состояние eax 1 изменится в с частотой более 1 ГГц, если этот код должен вызываться с жесткой l oop.

На более фундаментальной ноте есть некоторые архитектурные регистры, которые почти всегда изменяются в каждой инструкции , Наиболее очевидным из них является программный счетчик (во многих контекстах он называется P C, EIP на x86, RIP на x86_64). Поскольку этот регистр указывает на выполняемую в настоящее время инструкцию, он, безусловно, должен меняться с каждой инструкцией, за исключением контрпримеров, таких как кодировки x86 REP, или инструкции, которая просто переходит к самому себе.

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

1 голос
/ 04 апреля 2020

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

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

...