Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2013, 01:00   #1
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию Конвейер микропроцессора

Всем добрый вечер! (а точнее быть ночи )

Прошу прощения, у меня просто возникли небольшие непонятки.
С назначением конвейера и того как он работает (на общем уровне) я разобрался. Но вот непонятен один момент, процитирую отрывок из книги (идет пояснение о блоке предсказания правильного перехода, речь о микропроцессоре Pentium):
Цитата:
Как показывает статистика, типичная программа на каждые 6-8 команд содержит 1 команду перехода. Последствия этого предсказать несложно: при наличии конвейера через каждые 6-8 команд его нужно очищать и заполнять заново в соответствии с адресом перехода. Все преимущества конвейеризации теряются.
Совсем не могу понять, почему при очистке конвейера все его преимущества теряются? Это трудоемкий процесс?
И почему нам приходится при встрече оператора ветвления очищать конвейер? (если не берем в учет блок предсказания правильного перехода, допустим мы рассматриваем микропроцессор i486). Что вообще значит очистить? Ведь там у нас находятся команды на разной стадии исполнения. Т.е. очистить - потерять результаты выполнения предыдущих команд и вообще все предыдущие 5 команд. Или это я что-то не понял?
Есть свои некие домыслы по этому поводу, но просто боюсь что они неверны и глупы

Спасибо!

Последний раз редактировалось Базиля; 08.07.2013 в 01:07.
Базиля вне форума Ответить с цитированием
Старый 08.07.2013, 02:55   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

потому что очистив конвейер он начинает снова наполнятся с нуля, потому некоторое время(несколько тактов, помоему это число равно количеству ступеней конвейера) его преимущества не используются.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.07.2013, 09:50   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Автор этой книжки, написал глупость. Дело в том, что всё зависит от размера конвейера. В 386-х процессорах, конвейер был 4-х уровневым. В современных компьютерах, конвейер имеет 20 уровней и более. Собственно, в конвейере, любая команда выполняестя за один такт процессора.
А то, что описал атор, это не конвейер, а кеш.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 08.07.2013, 11:00   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от Базиля Посмотреть сообщение
Что вообще значит очистить? Ведь там у нас находятся команды на разной стадии исполнения. Т.е. очистить - потерять результаты выполнения предыдущих команд и вообще все предыдущие 5 команд. Или это я что-то не понял?
Как я помню, команда перехода приостанавливает конвейерную обработку данных. Т.е. до момента ее завершения конвейер не используется.
Например, есть код из 5 команд исполняющихся за 4 процессорных такта и переход, занимающий три такта, после которого идут еще 5 команд по 4 такта.
- при работе конвейера, первые 5 команд исполняются за 8 тактов + переход. на некоторых процессорах переход тоже включается в общий конвейер, иногда с отставанием на один такт, а на других - выполняется вне конвейера. т.е. до момента окончания перехода проходит 8, 9 или 11 тактов.
- следующие 5 команд начинают заполнять конвейер и тоже выполняются за 8 тактов.

т.е. получаем:
- если переход полностью включается в конвейер (возможно только в случае безусловного перехода), то выполнение кода продлится 16 тактов
- если переход смещен в конвейере на такт - за 17 тактов
- если переход не включается в конвейер (во многих процессорах так и бывает в случае условного перехода - для принятия правильного решения требуется чтобы все флаги были актуальны для данной команды) - за 19 тактов
- если вместо перехода используется трехтактовая команда и конвейер не прерывается - 14 тактов
- если конвейер не используется - 43 такта.

т.е. видно, что переход увеличивает время работы конвейера, что снижает эффективность кода.
з.ы. это приблизительная модель. частности нужно смотреть для конкретного процессора.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 08.07.2013, 11:14   #5
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Цитата:
Как я помню, команда перехода приостанавливает конвейерную обработку данных. Т.е. до момента ее завершения конвейер не используется.
Давно это было. Уже давно есть блоки предсказаний переходов и предварительное выполнение и выборки.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 08.07.2013, 11:24   #6
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
Давно это было. Уже давно есть блоки предсказаний переходов и предварительное выполнение и выборки.
Да я и не спорю... Но для понимания принципа сгодится, а дальше уже будет проще...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 08.07.2013, 15:42   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
Давно это было. Уже давно есть блоки предсказаний переходов и предварительное выполнение и выборки.
они снижают шанс обнуления конвейера, но все же не на 100%.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.07.2013, 17:22   #8
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Спасибо за ответы

Пепел Феникса
Цитата:
потому что очистив конвейер он начинает снова наполнятся с нуля, потому некоторое время(несколько тактов, помоему это число равно количеству ступеней конвейера) его преимущества не используются.
Преимущества не используются, это имеется ввиду что проходит несколько тактов до последней ступени конвейера? (запись результата).

Smitt&Wesson
Цитата:
Автор этой книжки, написал глупость. Дело в том, что всё зависит от размера конвейера. В 386-х процессорах, конвейер был 4-х уровневым. В современных компьютерах, конвейер имеет 20 уровней и более. Собственно, в конвейере, любая команда выполняестя за один такт процессора.
А то, что описал атор, это не конвейер, а кеш.
Можно пояснения про кеш? Почему Вы так решили? Не вижу просто никакой связи между конвейером и кешом.
Поправьте если я не прав, но ведь конвейер это новшество 486?

DiemonStar
Цитата:
Как я помню, команда перехода приостанавливает конвейерную обработку данных. Т.е. до момента ее завершения конвейер не используется.
А что тогда отвечает за обработку команды перехода?
Цитата:
Например, есть код из 5 команд исполняющихся за 4 процессорных такта и переход, занимающий три такта, после которого идут еще 5 команд по 4 такта.
- при работе конвейера, первые 5 команд исполняются за 8 тактов + переход. на некоторых процессорах переход тоже включается в общий конвейер, иногда с отставанием на один такт, а на других - выполняется вне конвейера. т.е. до момента окончания перехода проходит 8, 9 или 11 тактов.
- следующие 5 команд начинают заполнять конвейер и тоже выполняются за 8 тактов.
За 8 или 4 такта?
Цитата:
тоже включается в общий конвейер, иногда с отставанием на один такт
А с чем связано отставание?
Цитата:
з.ы. это приблизительная модель. частности нужно смотреть для конкретного процессора.
Если есть возможность, поясните, пожалуйста, подробнее на примере 486 мп.
Как там происходит обработка команд перехода?

Последний раз редактировалось Базиля; 08.07.2013 в 17:29.
Базиля вне форума Ответить с цитированием
Старый 08.07.2013, 22:55   #9
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Базиля Посмотреть сообщение
Совсем не могу понять, почему при очистке конвейера все его преимущества теряются?
Сформулируйте, в чем состоят преимущества конвейера и, думаю, ответ появится сам собой.
Цитата:
Это трудоемкий процесс?
Вообще-то это откат по программе назад - на длину конвейера.
Как Вы считаете, регулярно откатываясь на несколько инсртукций назад и многократно повторяя один и тот же фрагмент кода - это эффекктивный режим работы?
Цитата:
И почему нам приходится при встрече оператора ветвления очищать конвейер? (если не берем в учет блок предсказания правильного перехода, допустим мы рассматриваем микропроцессор i486). Что вообще значит очистить? Ведь там у нас находятся команды на разной стадии исполнения. Т.е. очистить - потерять результаты выполнения предыдущих команд и вообще все предыдущие 5 команд. Или это я что-то не понял?
Все верно.
У нас есть несколько последовательных команд. Пусть их 4:
1. команда до условного перехода,
2. команда условного перехода,
3. команда, которая выполняется по истинному условию,
4. команда, которая выполняется по ложному условию.
Очевидно, что если мы выполняем команду 3, а в результате вычисления 2 условие оказалось ложным, нам следует очистить конвейер от результатов работы команды 3.
s-andriano вне форума Ответить с цитированием
Старый 08.07.2013, 23:08   #10
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Автор этой книжки, написал глупость. Дело в том, что всё зависит от размера конвейера. В 386-х процессорах, конвейер был 4-х уровневым. В современных компьютерах, конвейер имеет 20 уровней и более. Собственно, в конвейере, любая команда выполняестя за один такт процессора.
А то, что описал атор, это не конвейер, а кеш.
Вы путаете два совершенно разных устройства:
- конвейер выборки из памяти в процессорах 8086-80386,
- конвейер выполнения инструкций в суперскалярных процессорах (от Pentium и выше).
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение типа микропроцессора (TASM) -danger- Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 24.11.2013 20:58
Конвейер рендеринга. Warn Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 16.12.2011 09:51
Ленточный конвейер.... dj-Oleg Помощь студентам 2 03.11.2011 15:57
Shell на C(Конвейер) l1pton17 Общие вопросы C/C++ 0 01.11.2010 22:01
тестирование микропроцессора на быстродействие swatkiev Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 16.09.2010 08:20