next up previous contents
Next: Расширенные коллективные операции Up: Семантика и правильность Previous: Процесс выполнения   Contents

Регистры и компайлер-оптимизации

Совет пользователям: Весь материал в этом разделе является советом пользователю.

Существует проблема когерентности между переменными, содержащимися в регистрах и значениями этих переменных в памяти. RMA вызов может обратиться к переменной в памяти (или кэше), в то время как ``свежее'' значение этой переменой находится в регистре. В таком случае get не вернет самое последнее значение переменной, а результат работы put может быть перезаписан в тот момент, когда регистр заносится обратно в память.

Проблема проиллюстрирована следующим кодом:

Source of Process 1 Source of Process 2 Executed in Process 2  
bbbb = 777

call MPI_WIN_FENCE

call MPI_PUT(bbbb

into buff of process2)



call MPI_WIN_FENCE

buff=999

call MPI_WIN_FENCE





call MPI_WIN_FENCE

ccc=buff

reg_A:=999


stop appl.thread

buff:=77 in PUT handler

continue appl.thread


ccc:=reg_A

 

В этом примере, переменная buff размещена в регистре REG_A и поэтому ccc будет иметь старое значение buff, а не новое $777$.

Эта проблема, которая также разрушает в некоторых случаях send/receive взаимодействие, обсуждается глубже в разделе 10.2.2.

MPI реализации не столкнутся с этой проблемой в отношении стандарта, касающегося Си программ. Множество компиляторов ФОРТРАНa не столкнутся с этой проблемой, даже без отключения оптимизации в компиляторе. Однако, для того, чтобы избежать проблемы когерентности регистров полностью переносимым образом, пользователи должны ограничить себя в использовании в RMA окнах переменных, хранящихся в блоках COMMON, или переменных, которые были объявлены VOLATILE (несмотря на то, что VOLATILE не является стандартной декларацией ФОРТРАНa, оно поддерживается многими ФОРТРАН-компиляторами). Детали и дополнительное решение обсуждаются в разделе 8.2.2, ``Проблемы регистровой оптимизации''. Смотрите также ``Проблемы из-за копирования данных и последовательности ассоциаций'', по поводу дополнительных проблем ФОРТРАНa.



Alex Otwagin 2002-12-10