Ошибочные предсказания ветвей

Этот вопрос может показаться глупым, но я все равно его задам.
Я слышал о предсказании переходов от этот ответ Mysticial
, и я хочу знать, возможно ли следующее

Допустим, у меня есть этот фрагмент кода C++

while(memoryAddress = getNextAddress()){

  if(haveAccess(memoryAddress))
    // change the value of *memoryAdrress
  else 
    // do something else

}

Итак, если предсказатель ветвления в каком-то случае неправильно предсказывает, что оператор if верен, а затем программа меняет значение *memoryAddress, может ли из этого произойти что-то плохое? Могут ли происходить такие вещи, как ошибка сегментации?


person Lan Pac    schedule 02.10.2013    source источник


Ответы (1)


Предсказатель ветвления внутри процессора не имеет функционально наблюдаемых эффектов.

Предсказатель ветвления недостаточно сложен, чтобы каждый раз делать это правильно, независимо от попыток обмануть его, таких как ваши. Если бы это было правильно каждый раз, это было бы просто тем, как всегда выполняются ветки, это не было бы «предиктором».

Условие ветки все еще вычисляется, пока продолжается выполнение, и если условие не имеет предсказанного значения, ничего не фиксируется в памяти. Выполнение возвращается к правильной ветке.

person Pascal Cuoq    schedule 02.10.2013
comment
Я понимаю, что предсказатель ветвления не всегда может сделать это правильно, и общее представление о том, как работает предсказатель ветвления. Я хочу знать о той части, которая, как вы описали, не имеет функционально наблюдаемых эффектов. - person Lan Pac; 02.10.2013
comment
@LanPac При всем уважении, я не думаю, что вы хотите знать, как работают спекуляции с ветками. Это чрезвычайно скучно и не меняет обсуждения, если предсказатель представляет собой простое 1-битное дело. Кажется, вы хотите знать, как работает спекулятивное выполнение (это также довольно прозаично, если вы не вдаетесь в подробности). Как я более или менее сказал: «Если выясняется, что работа в конце концов не нужна, любые изменения, внесенные в работу, отменяются, а результаты игнорируются». en.wikipedia.org/wiki/Speculative_execution - person Pascal Cuoq; 02.10.2013