История изменений
Исправление 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), которые упрутся в ожидание готовности АЛУ, в недостатточный размер регистрового файла для переименования регистров, или в неспособность достаточно разумно разложить этот код на параллельные микрооперации.