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

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

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2011, 14:59   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Какой смысл в этом предсказателе, если он практически ничего не делает?
презагрузка команд в конвейер.
если он ошибся, то конвейер чистится, и грузится по новой, с нужного места.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.09.2011, 15:23   #12
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
презагрузка команд в конвейер.
если он ошибся, то конвейер чистится, и грузится по новой, с нужного места.
Сколько тактов длится этот процесс?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 15.09.2011, 00:08   #13
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

где то около того как Вы и говорили, то естьв одиночном случае это не много, в массовом это будет много.(честно, не мерял)
правда я слышал, что некоторые модели процев всегда сбрасывают конвейер если видят условный переход, но тот слух старый, думаю уже сильно умнее стали процы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.09.2011, 04:36   #14
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Ссылку на источник можно?
Ссылку - легко )).
Wiki
Но только там написано все же, что (болд везде мой):
Цитата:
Предсказание ветвлений позволяет осуществлять предварительную выборку инструкций и данных из памяти, а также выполнять инструкции, находящиеся после условного перехода, до того, как он будет выполнен.
Если честно, я это не совсем понимаю. Ну, допустим, вычисление условия требует какого-то времени.. Но проц-то обычно в это время НЕ СТОИТ! Он же занимается как раз тем самым вычислением условия. Зачем его загружать другой работой?..

Загрузка конвеера - это да, это понятно. Она тоже требует времени, так что заблаговременная загрузка (при правильном предсказании) - это хорошо. Но КАК этот код будет выполняться, скажите?.. (давайте пока не будем говорить про параллельные вычисления, ограничимся одноядерными процессорами).

Короче, я с недоверием отношусь к тому, что написано по той ссылке.. Я, конечно, посмотрел английский вариант этой статьи. В нем тоже говорится, что производится загрузка и speculative execution, причем для последнего понятия есть своя статья. Но, как это ни печально, нигде не сказано КАК это делается. То есть везде говорится о некоей принципиальной возможности..

Далее, в русском варианте (ссылка выше) есть ссылка на статью в PC Magazine/RE. И в той статье написано так:
Цитата:
процессор «уверен», что они будут выполнены и поэтому просто начинает выборку команд по указанному адресу. ... Если предсказание окажется верным, то исполнение продолжится с малой задержкой либо вовсе без нее. Если же предположение ошибочно, то частично выполненные команды придется удалить из конвейера, а новые команды выбрать из области памяти с правильным адресом, декодировать и выполнить их
Я думаю, что "частично выполненными" тут все же называются просто загруженные в конвеер команды.

Короче, вопрос все-таки интересный, и ясности у меня по нему нет. Что скажете?
pu4koff, тебе +1 за повторное поднятие вопроса )).
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 15.09.2011, 08:08   #15
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от TinMan Посмотреть сообщение
Если честно, я это не совсем понимаю. Ну, допустим, вычисление условия требует какого-то времени.. Но проц-то обычно в это время НЕ СТОИТ! Он же занимается как раз тем самым вычислением условия. Зачем его загружать другой работой?..
Никакой другой работой он не загружается. Ему в очередь поставляются новые задания и всё.
Цитата:
Сообщение от TinMan Посмотреть сообщение
Загрузка конвеера - это да, это понятно. Она тоже требует времени, так что заблаговременная загрузка (при правильном предсказании) - это хорошо.
Этого мало? При правильном предсказании получается дополнительный бонус к времени выполнения нескольких операций, за счет того, что они уже попали в конвейер и частично выполнены. При ошибке предсказания получается то же самое, как если бы его вовсе и не делалось.
Цитата:
Сообщение от TinMan Посмотреть сообщение
Но КАК этот код будет выполняться, скажите?.. (давайте пока не будем говорить про параллельные вычисления, ограничимся одноядерными процессорами).
Операции бывают разные, выполнять их могут разные блоки процессора.
Цитата:
Сообщение от TinMan Посмотреть сообщение
Я думаю, что "частично выполненными" тут все же называются просто загруженные в конвеер команды.
Мне кажется, что частично выполненная - это команда, которая не дошла до конца конвейера. Может уже расчеты выполнены, а всего-лишь результат не записался, а может данные еще даже не подгрузились.
pu4koff вне форума Ответить с цитированием
Старый 15.09.2011, 08:31   #16
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Насколько я понимаю, предзагрузка на x86 включает в себя загрузку команды и её аргументов в процессор (конвеер/кэш). Это может включать в себя обращения к памяти (ОЗУ), так что это загрузка команды - операция медленная (в общем случае). Вот для чего нужна предзагрузка: чтобы к моменту выполнения инструкции процессором, она была уже готова.

Предзагрузка также включает в себя парсинг команды (анализ/разбор/декодирование). Но никак не выполнение. Именно это подразумевалось под "частично выполненные". Команды загружены, декодированы, но не выполнены.

Предварительное выполнение в явном виде есть на IA-64 (не уверен насчёт автоматического предвыполнения).
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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