Вот как вы думаете, современные процессоры, встретив в коде условный переход типа if () {} else {}, какую ветвь кода выполняют?
Правильный ответ: обе.
Почему? Потому что оперативная память, раздери её Вулкан, до сих пор является самой тормозной частью компьютера. Компьютер может выполнять инструкции гораздо быстрее, чем подтаскивать данные из
(
Read more... )
Comments 12
Reply
Меня учили в 2010 году, что обе. Поменялось это, насколько я понимаю, с появлением архитектур IA64 и AMD64 и когда процессоры стали отращивать себе вооооот-такенные конвееры. И prediction поменялось на predication, не знаю, как по-русски. Результаты одной ветви разрешают менять системное состояние, а другую посылают нафиг.
( ... )
Reply
Непонятно только, при чём тут SIMD: во первых, в разных ветках скорее всего будут разные инструкции (с чего бы им быть одинаковыми), а это уже не single, а во вторых, SIMD же вроде подмножество (расширение набора) инструкций, вполне вероятно что исполняться будут инструкции не из этого подмножества.
Reply
Но если код типа
if (трусы == красные)
{
красныеТрусы++;
}
else
{
прочиеТрусы++;
}
То я думаю, что компилятор вполне может записать это в машкодах векторными инструкциями - операция-то одна и та же.
> Всё это на одном ядре, то есть действительно что-то типа гипертрединга
Может быть оно типа конвеер заполняет в шахматном порядке :) Точно не знаю, надо уже инженеров Интела спрашивать, для меня это уже слишком сильное шаманство.
Reply
В мейнстриме ничего не изменится, да.
При этом вполне вероятно, что появится (или уже есть) категория процессоров без спекулятивного исполнения - там, где безопасность важнее скорости.
Reply
Мне-то, например, это нафиг не надо -- я не запускаю произвольный код у себя.
Reply
Reply
Пользователь телефона - да, понятия не имеет, и даже существенно повлиять на это обычно не может. А вот создатель (телефонной) операционки (гугл, эппл) имеет возможность сделать так, чтобы запустить на выполнение произвольный процессорный код было бы очень сложно, а приложения распространялись бы в виде какого-нибудь промежуточного кода, вроде ява-машины - компилируемого внутри операционки в процессорный, но уже не допускающий такого типа уязвимостей.
С компьютерами всё и проще, и сложней: с одной стороны, теоретически я сам выбираю какую ОС ставить и какой софт запускать, с другой - даже если я использую только то что доступно в исходниках, и максимально собираю всё сам, я один фиг не смогу просмотреть все эти исходники в поисках уязвимостей, могу только надеяться, что это сделали до меня, а что там фоном по умолчанию запускается в линуксе, не говоря уж про винду - знают только те, кто этим реально интересуется. Содержимое BIOS - вообще отдельная тема...
Reply
Leave a comment