|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.09.2011, 08:33 | #1 |
Форумчанин
Регистрация: 21.02.2009
Сообщений: 372
|
Оператор ветвления в различных языках программирования
Интересует следующее. Есть какой-то код:
... if [уловие] { код1 } else { код2 } ... Вопрос: если условие не верно, (то есть будет выполнен "код2"), то будет ли компьютер тратить время на чтение "код'а1" или он просто будет игнорировать его? Аналогично, если условие верно, важно ли для компьютера, выполняющего программу, что находится в блоке "код2"? Зависит ли это от самого ЯП, от того компилируемый/интерпретируемый ли ЯП или нет?
No name. Just Linel.
|
14.09.2011, 08:45 | #2 | |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
Цитата:
Для инструкций есть только одно: быть загруженной в конвеер и выполненной. Иначе говоря, это выполнение. Так вот: выполнения не будет. Но тут есть одно "но".. В современных процессорах есть т.н. предсказание ветвления. То есть, проц может начать выполнять ту ветку, которую считает более вероятной. Но это никак не влияет на результат выполнения программы. Если предсказание было верным - выполнение продолжается, если нет - конвеер очищается.
Предпочитаю на "ты".
|
|
14.09.2011, 08:51 | #3 | ||
Форумчанин
Регистрация: 21.02.2009
Сообщений: 372
|
Цитата:
Цитата:
No name. Just Linel.
|
||
14.09.2011, 09:13 | #4 |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
Добавлю для пущей убедительности.. ))
Такие ветвления часто делают, чтоб обойти ситуацию типа деления на нуль. Возможно, что реально комп выберет именно ветку с делением на нуль и ВЫПОЛНИТ ЕГО. Но исключения (ошибки) НЕ ВОЗНИКНЕТ, если потом выяснится, что ветка неверная. Ты все это можешь подтвердить экспериментом, что называется )).
Предпочитаю на "ты".
|
14.09.2011, 09:23 | #5 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Если критично быстродействие - старайся составлять алгоритмы так, чтобы условия в большинстве случаев выполнялись с истинной ветвью.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
14.09.2011, 12:19 | #6 | ||
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
Цитата:
Код:
Код:
Цитата:
это фишка даёт выигрыш максимум в 3-4 такта, и как следствие имеет значение только в миллионых или миллардных циклах. Последний раз редактировалось rpy3uH; 14.09.2011 в 12:23. |
||
14.09.2011, 12:34 | #7 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Может в самих х86-64 и не заложено предсказаний, но у современных процессоров, совместимых с данными архитектурами, блок предсказания ветвлений имеется.
|
14.09.2011, 13:12 | #8 | |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
Цитата:
rpy3uH, спасибо за поправку, +1
Предпочитаю на "ты".
|
|
14.09.2011, 14:03 | #9 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Цитата:
Какой смысл в этом предсказателе, если он практически ничего не делает? Спорить не буду, т.к. особо не вникал в этот вопрос, но в ВУЗе нам говорили, что предсказатель этот как раз загружает инструкции и данные, а так же по возможности выполняет эти самые инструкции, чтобы конвейер не простаивал, что и является целью, ради которой этот самый предсказатель вообще придумали. |
|
14.09.2011, 14:23 | #10 | |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
Цитата:
|
|