Флейм
GameDev.ru / Флейм / Форум / CISC-x80: ПРАвәльный 8-битный «ДОМАШНИЙ» (псевдо-совместимый с PC-XT / CP/M-80 / DOS) (13 стр)

CISC-x80: ПРАвәльный 8-битный «ДОМАШНИЙ» (псевдо-совместимый с PC-XT / CP/M-80 / DOS) (13 стр)

Advanced: Тема повышенной сложности или важная.
Страницы: 110 11 12 13 14 15 Следующая »
MahagamПостоялецwww12 июня 20189:53#180
=A=L=X=
> А зачем его вообще останавливать?
батарейку экономить. а так придётся смотреть какая часть конвейера должна ещё клацать регистрами, а какая - нет. дешевле с точки зрения и энергопотребления и простоты логики тупо остановить всё.

> До Out-of-order ведь даже дошли в процессе эволюции.
это другое, там не команд в очереди нет, а данных. ну и длина команд на конвейере разная

Правка: 12 июня 2018 9:55

=A=L=X=Постоялецwww12 июня 201810:01#181
Mahagam
> простоты логики

Ну с этим никто и не спорит.
Начали просто с префетча кода инструкции пока проц обрабатывал предыдущую, а сейчас имеем Out-Of-Order, предсказания ветвлений и кеш-выборок.
От простого к сложному. Я просто называю конвеером всё что находится между потоком инструкций и вычислительными блоками -  всю эту кашу отношу в это одно слово, может терминологически это неверно, но вроде как верно.

MahagamПостоялецwww12 июня 201811:30#182
=A=L=X=
> а сейчас имеем Out-Of-Order, предсказания ветвлений и кеш-выборок.
это все способы быстрее исполнить заданный программой алгоритм в условиях конечного быстродействия элементарной логики.
DelfigamerПостоялецwww12 июня 201812:35#183
=A=L=X=
> Что произойдет когда на выборке инструкций произойдет кешиисс, но конвеер будет
> еще забит под завязку?
https://en.wikipedia.org/wiki/Classic_RISC_pipeline#Cache_miss_handling
Чем позднее инструкция попадёт в конвеер, тем позднее она из него выйдет. Если в конвеере 5 стадий - инструкция будет выполняться не менее 5 тактов вне зависимости от загруженности конвеера. Когда из-за кэш-промаха в конвеере образуется пустота - новые инструкции не будут ничего догонять и перекрывать, эта пустота так и пройдёт через весь конвеер, и всё время, потраченное на кэш-промах, без изменений выйдет в итоговое время работы программы.
Так что - конвеер не поможет против медленной памяти. У него совершенно другие цели - помогать против медленных транзисторов.

Правка: 12 июня 2018 12:45

=A=L=X=Постоялецwww12 июня 201813:08#184
Delfigamer
> новые инструкции не будут ничего догонять и перекрывать

Ну это какие то первые примитивные архитектуры конвееров, сейчас всё уже намного усложнилось, см. тот же Out-of-order у него прямо оговаривается способность переставлять всё местами чтобы убрать как можно больше простоев. И не вижу ничего предосудительного чтобы даже примитивный конвеер рациональнее даже просто дешифровал команды ожидая пока в его конце вычисляется FSIN какой нибудь сотни тактов - зачем простаивать и прогонять по стадиям NOP-ы? Только из соображений простоты/примитивности первых дизайнов. Вообще даже 8086 имел буфер в несколько байт для считанных наперёд инструкций для опережающего считывания там где это возможно, технике тыщу лет в обед и из неё вообще конвееры и выросли.

Правка: 12 июня 2018 13:09

=A=L=X=Постоялецwww12 июня 201813:15#185
Мне кажется те конвееры про которые мне тут имеют ввиду постоянно устарели когда микрокод появился. То есть такая синхронная машина из клик-клок стадий дешифровал-считал-выполнил-сохранил в шахматном порядке.
MahagamПостоялецwww12 июня 201813:18#186
=A=L=X=
> прямо оговаривается способность переставлять всё местами
далеко не всё. иначе можно поломать логику работы программы.
=A=L=X=Постоялецwww12 июня 201813:22#187
Mahagam
> далеко не всё

Про это была вторая часть "как можно больше". Потому что не всегда "можно". "Всё" - это имеются ввиду любые примитивные операции.

DelfigamerПостоялецwww12 июня 201813:53#188
=A=L=X=
> Ну это какие то первые примитивные архитектуры конвееров, сейчас всё уже
> намного усложнилось, см. тот же Out-of-order у него прямо оговаривается
> способность переставлять всё местами чтобы убрать как можно больше простоев.
Это на десктопах, а на многих мобилках и микроконтроллерах - простые конвееры без OoE и прочих синхропроблем.
И касательно твоего изначального вопроса - нормально работают, хоть и не так быстро, как топовые десктопные, которые за счёт OoE могут выполнять по несколько инструкций за один такт.

Правка: 12 июня 2018 13:55

=A=L=X=Постоялецwww12 июня 201814:27#189
А кстати очень да:
ARM2 стал, возможно, самым простым из популярных 32-битных процессоров в мире, имея всего лишь 30 тысяч транзисторов (для сравнения, в сделанном на 6 лет раньше процессоре Motorola 68000 было около 70 тысяч транзисторов). Многое из этой простоты обусловлено отсутствием микрокода (который в процессоре 68000 занимает от одной четверти до одной трети площади кристалла), и отсутствием кэша, как и в многих процессорах того времени.

Нда, RISC-и судя по всему действительно тяготели к примитивным конвеерах с самого начала. Сейчас правда они уже тоже перешагнули через это - Thumb, все дела.
innuendoПостоялецwww12 июня 201814:57#190
=A=L=X=

об чём и разговор

=A=L=X=Постоялецwww12 июня 201816:44#191
innuendo
> об чём и разговор

Разговор был о том, что конвеер в том числе ускоряет работу с медленной памятью, но мне начали вкручивать в ухо сразу несколько господ, что это не так и конвеер решает совсем другие вещи (хотя я последнего и не отрицал).
Теперь понятно, что они имели ввиду только узкие классы примитивных конвееров без микрокода (хотя я говорил чётко "в современных архитектурах") и тому подобное, но если кто-то про это и имел ввиду, то полностью оказался косноязычен и неспособен ясно изьясняться.
Такой вот разговор получился.
P.S.
Хотя скорее всего даже в конвеерах без микрокода, опять таки, какие то механизмы префетча есть, ибо это слишком простая идея чтобы проходить мимо.

Правка: 12 июня 2018 16:49

DelfigamerПостоялецwww12 июня 201817:44#192
=A=L=X=
> Разговор был о том, что конвеер в том числе ускоряет работу с медленной памятью
Что, как тебе уже кучу раз повторили - не верно. Позднее начатая инструкция в любом конвеере будет закончена позднее.
OoE увеличивает среднее количество инструкций за один такт, но он не поможет против медленной памяти, потому что невозможно начать выполнение того, чего ещё не существует.

Правка: 12 июня 2018 18:39

=A=L=X=Постоялецwww12 июня 201817:55#193
Delfigamer
> Что, как тебе уже кучу раз повторили - не верно.

Верно. Хотя это и не основная функция - основная функция распараллелить процессы по обработке инструкций внутри процессора, но очень часто в ходе распараллеливания возникали одни и те же грабли и моменты по медленной памяти и их тоже разумеется решали как могли. Ну наскипидарил ты процессор параллельностью - а он всё равно сосьет женерале, потому что память теперь за ним не успевает - чтобы выкручиваться надо усложнить конвеер и так далее.
Просто не читайте русскую статью "конвеер", а идите сразу в английскую "instruction pipelining". Просто одно цепляется за другое постоянно. Начиналось от предвыборки кода инструкции, пришло ко всяким предсказаниям выборок кеша и переходов. Потому что злая память.

Правка: 12 июня 2018 18:04

MahagamПостоялецwww12 июня 201818:13#194
=A=L=X=
> потому что память теперь за ним не успевает - чтобы выкручиваться надо
> усложнить конвеер и так далее.
щито???
тормоза памяти решаются практически одним способом - толстым кэшем. а при наличии толстого кэша можно думать про упреждающее чтение.
Страницы: 110 11 12 13 14 15 Следующая »

/ Форум / Флейм / ПроЭкты

2001—2018 © GameDev.ru — Разработка игр