LINUX.ORG.RU

История изменений

Исправление wandrien, (текущая версия) :

Кстати, академический вопрос знатокам.

У меня тут мой самописный компилятор на очередной итерации работы над логикой кодогенератора произвёл на свет следующий фрагмент:

        xor     EAX, EAX
        mov     dword [@@DATA+776656], EAX
        inc     EAX
        mov     dword [@@DATA+49268], EAX
        mov     dword [@@DATA+49272], EAX
        dec     EAX
        mov     dword [@@DATA+49264], EAX
        inc     EAX
        mov     dword [@@DATA+776668], EAX

Вопрос такой, насколько это НЕЭФФЕКТИВНЫЙ код для современной суперскалярной архитектуры? Такой как Intel Core и подобные.

Вопрос касается зависимостей по данным, возникающих на операциях inc и dec.

Я эту ситуацию предполагаю так:

  • Для «тупого» последовательно работающего процессора такой код не является проблемой, поскольку «забегать вперёд» и отправлять на конвеер по несколько команд он всё равно не умеет.
  • Для современного суперскалярного CPU с большим регистровым файлом и умной логикой переименования регистров, этот код скорее всего тоже не представляет сложности.
  • Данный код, скорее всего, будет неэффективным на упрощенных суперскалярных CPU (возможно, уровня Pentium 2 или Pentium III), которые упрутся в ожидание готовности АЛУ, в недостаточный размер регистрового файла для переименования регистров, или в неспособность достаточно разумно разложить этот код на параллельные микрооперации.

Исправление wandrien, :

Кстати, академический вопрос знатокам.

У меня тут мой самописный компилятор на очередной итерации работы над логикой кодогенератора произвёл на свет следующий фрагмент:

        xor     EAX, EAX
        mov     dword [@@DATA+776656], EAX
        inc     EAX
        mov     dword [@@DATA+49268], EAX
        mov     dword [@@DATA+49272], EAX
        dec     EAX
        mov     dword [@@DATA+49264], EAX
        inc     EAX
        mov     dword [@@DATA+776668], EAX

Вопрос такой, насколько это НЕЭФФЕКТИВНЫЙ код для современной суперскалярной архитектуры? Такой как Intel Core и подобные.

Вопрос касается зависимостей по данным, возникающих на операциях inc и dec.

Я эту ситуацию предполагаю так:

  • Для «тупого» последовательно работающего процессора такой код не является проблемой, поскольку «забегать вперёд» и отправлять на конвеер по несколько команд он всё равно не умеет.
  • Для современного суперскалярного CPU с большим регистровым файлом и умной логикой переименования регистров, этот код скорее всего тоже не представляет сложности.
  • Данный код, скорее всего, будет неээфективным на упрощенных суперскалярных CPU (возможно, уровня Pentium 2 или Pentium III), которые упрутся в ожидание готовности АЛУ, в недостаточный размер регистрового файла для переименования регистров, или в неспособность достаточно разумно разложить этот код на параллельные микрооперации.

Исправление wandrien, :

Кстати, академический вопрос знатокам.

У меня тут мой самописный компилятор на очередной итерации работы над логикой кодогенератора произвёл на свет следующий фрагмент:

        xor     EAX, EAX
        mov     dword [@@DATA+776656], EAX
        inc     EAX
        mov     dword [@@DATA+49268], EAX
        mov     dword [@@DATA+49272], EAX
        dec     EAX
        mov     dword [@@DATA+49264], EAX
        inc     EAX
        mov     dword [@@DATA+776668], EAX

Вопрос такой, насколько это НЕЭФФЕКТИВНЫЙ код для современной суперскалярной архитектуры? Такой как Intel Core и подобные.

Вопрос касается зависимостей по данным, возникающих на операциях inc и dec.

Я эту ситуацию предполагаю так:

  • Для «тупого» последовательно работающего процессора такой код не является проблемой, поскольку «забегать вперёд» и отправлять на конвеер по несколько команд он всё равно не умеет.
  • Для современного суперскалярного CPU с большим регистровым файлом и умной логикой переименования регистров, этот код скорее всего тоже не представляет сложности.
  • Данный код, скорее всего, будет неээфективным на упрощенных суперскалярных CPU (возможно, уровня Pentium 2 или Pentium III), которые упрутся в ожидание готовности АЛУ, в недостатточный размер регистрового файла для переименования регистров, или в неспособность достаточно разумно разложить этот код на параллельные микрооперации.

Исходная версия wandrien, :

Кстати, академический вопрос знатокам.

У меня тут мой самописный компилятор на очередной итерации работы над логикой кодогенератора произвёл на свет следующий фрагмент:

        xor     EAX, EAX
        mov     dword [@@DATA+776656], EAX
        inc     EAX
        mov     dword [@@DATA+49268], EAX
        mov     dword [@@DATA+49272], EAX
        dec     EAX
        mov     dword [@@DATA+49264], EAX
        inc     EAX
        mov     dword [@@DATA+776668], EAX

Вопрос такой, насколько это НЕЭФФЕКТИВНЫЙ код для современной суперскалярной архитектуры? Такой как Intel Core и подобные.

Вопрос касается зависимостей по данным, возникающих на операциях inc и dec.

Я эту ситуацию предполагаю так:

  • Для «тупого» последовательно работающего процессора такой код не является проблемой, поскольку «забегать вперёд» и отправлять на конвеер по несколько команд он всё равно не умеет.
  • Для современного суперскалярного CPU с большим регистровым файлом и умной логикой переименования регистров, этот код скорее всего тоже не представляет сложности.
  • Данный код, скорее всего, будет неээфективным на упрощенных суперскалярных CPU (возможно, уровня Pentium 2 или Pentium III), которые упрутся в ожидание готовности АЛУ, в недостатточный размер регистрового файла для переименования регистров, или в неспособность достаточно разумно разложить этот код на параллельные микрооперации.