Re[9]: Эльбрус - 8 ядер
От: Cyberax Марс  
Дата: 04.06.17 19:18
Оценка:
Здравствуйте, Kernighan, Вы писали:

C>>Минус в том, что глубина предсказания ограничена (на практике одним уровнем) и требуется больше ALU на выполнение ненужных операций (которые можно было бы израсходовать на ещё одно ядро).

K>Ну разумеется. И поэтому ВСЕГДА предпочитают сделать ещё одно ядро, а не то, что ты тут нафантазировал.
Ну почитай про Silvermont.

K>Остальные случаи угадываются за счёт того, что помнится направление перехода в этом месте в прошлый раз.

K>Но мы это рассматривать не будем. Просто поверим в то, что предсказатель в 90% (или больше) предсказывает правильно.
K>Теперь мы стоим перед выбором — что делать: выполнять одну ветку или обе?
Отойдём на шаг назад. CPU при прохождении ветки переименовывает регистры, так что у него получается две копии их. Одна для прохождения ветки, другая для отката назад.

K>Пусть процессор имеет 4 АЛУ, которые можно загрузить операциями.

K>И пусть направление перехода мы узнаем через три такта.
K>В случае, если мы все 4 АЛУ отдали под главную ветку, мы выполним 12 операций и с 90% вероятностью угадаем.
K>В случае, если мы 2 АЛУ отдали под одну ветку, а 2 под другую, то мы выполним только 6 операций нужной ветки.
Пока всё так.

Но 3 такта на результат операции — это очень часто сверхоптимистичная оценка, очень часто вычисление условия требует взятия данных из дальних областей памяти. И в этих случаях получаем классический pipeline stall, что позволяет нам безболезненно использовать свободные ALU для вычисления второй ветки.

K>Так работает любой нормальный суперскалярный RISC (и с перестановкой и без перестановки команд).

Не совсем любой. Некоторые предпочитают вместо предсказания перехода делать, например, переключение на другой поток.
Sapienti sat!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.