Тип работы:
Предмет:
Язык работы:


Структуры событий и современные мультипроцессоры

Работа №126360

Тип работы

Дипломные работы, ВКР

Предмет

информатика

Объем работы46
Год сдачи2022
Стоимость4850 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
53
Не подходит работа?

Узнай цену на написание


Введение 4
Постановка задачи 7
Обзор 8
Глава 1. Теорема о корректности компиляции 25
1.1. Схема доказательства теоремы 26
1.2. Пример построения структуры событий 28
Глава 2. Симуляция обхода графа IMM 31
2.1. Обход графа IMM 31
2.2. Отношение симуляции 33
2.3. Шаг симуляции 36
Заключение 43
Список литературы 44

Современные мультипроцессоры и компиляторы высокоуровневых язы­ков программирования выполняют множество оптимизаций при исполнении и компиляции программ соответственно с целью повышения производитель­ности конечного кода. В случае многопоточных программ применение этих оптимизаций может привести к неожиданным сценариям поведения. Рассмот­рим, например, программу LB-nodep, представленную ниже1.
а := x II1
b := у Ц1
а := x II1
b := у Ц1
a := x II1
b := у Ц1
У := 1
x := b
у := 1 + а * 0
x := b
У := a
x := b
(LB-nodep)
(LB-fakedep)
(LB-dep)
При сборке программы оптимизирующий компилятор может выполнить переупорядочивание инструкций a := x и у := 1 в левом потоке, так как дан­ные инструкции независимы. Тем не менее, при исполнении в многопоточной среде эффект от применения данной оптимизации может наблюдаться други­ми потоками. Например, в случае LB-nodep это может привести к сценарию исполнения программы, при котором обе локальные переменные а и b будут содержать значение 1. Подобные сценарии известны как слабые сценарии поведения (weak behaviors).
Моделью памяти (memory model) принято называть семантику мно­гопоточных программ, оперирующих с разделяемой памятью [1]. Слабые модели памяти (weak memory models) призваны описать поведение много­поточных программ с учетом слабых сценариев поведения. Основной иссле­довательской проблемой в данной области является формальное определение модели памяти, которая с одной стороны позволяла бы описывать эффекты от применения широкого класса оптимизаций, в частности, переупорядочи­вание независимых инструкций чтения и записи (load-to-store reordering) и распространение констант (constant propagation), а с другой стороны за­прещала бы появление так называемых значений из воздуха (out-of-thin-air values) [1, 2].
Данную проблему можно продемонстрировать на примере программ LB-nodep, LB-fakedep и LB-dep. Желаемая модель памяти должны допускать сценарий поведения, при котором в результате справедливо, что a = b = 1, для программ LB-nodep и LB-fakedep, но не для программы LB-dep. В слу­чае LB-nodep данный результат может быть обоснован переупорядочиванием независимых инструкций чтения и записи в левом потоке. В случае LB-fakedep тот же результат может быть получен после применения распространения констант и упрощения подвыражения у := 1 + a * 0 до у := 1, а затем пе­рестановки инструкций. В случае LB-dep сценарий поведения, при котором в результате получаем a = b = 1, не может быть обоснован никакой комби­нацией разумных оптимизаций. Значение 1 в данном случае появляется “из воздуха”.
Предъявленные выше требования, то есть поддержка широкого класса оптимизаций и запрещение значений из воздуха, являются критическими для моделей памяти высокопроизводительных языков программирования, таких как C/C++ [3], Java [4], или языка промежуточного представления LLVM (LLVMIR) [5]. Среди нескольких кандидатов [6, 7, 8], удовлетворяющих дан­ным требованиям, в контексте данной работы нас будет интересовать модель Weakestmo [9], основанная на теории структур событий [10]. К её достоин­ствам можно отнести декларативность и поддержку всего спектра возможно­стей модели памяти C/C++ [3]. Тем не менее, у данной модели существуют и недостатки. В частности, ранее для данной модели не была доказана коррект­ность оптимальной схемы компиляции для моделей памяти современных мультипроцессоров, таких как x86 [11], ARM [12] и POWER [13].
Корректность оптимальной схемы компиляции для моделей мультипро­цессоров является ещё одним критический важным требованием, предъявля­емым к моделям памяти высокопроизводительных языков программирова­ния [1]. Оно необходимо для того, чтобы гарантировать, что при компиляции инструкций обращения к разделяемым переменным из языка программиро­вания в инструкции целевого процессора не требовалось вставлять специаль­ные инструкции — барьеры памяти (memory barriers или memory fences) [14], которые могут снижать производительность кода, и при этом программа оста­валась корректной.
В данной работе исправляется данный недостаток. А именно, представ­лено доказательство корректности компиляции из модели Weakestmo в моде­ли современных мультипроцессоров x86, ARM и POWER, формализованное с помощью системы для интерактивного доказательства теорем Coq2 [15]. Предложенное доказательство использует промежуточную модель памяти (intermediate memory model, IMM) [16], предоставляющую удобную абстрак­цию над моделями x86, ARM и POWER, в качестве промежуточного звена между моделью Weakestmo и моделями мультипроцессоров. Поскольку кор­ректность компиляции из модели IMM в модели x86, ARM и POWER уже была показана ранее в работе [16], остается лишь доказать корректность ком­пиляции из модели Weakestmo в модель IMM (корректность компиляции из Weakestmo в модели x86, ARM и POWER получается по транзитивности).
Основной сложностью доказательства является то, что модели Weakestmo и IMM заданы в разных стилях. Модель IMM разрешает спекулятивное испол­нение инструкций вне очереди, но при этом отслеживает синтаксические зави­симости между инструкциями, чтобы запретить появление циклов причинно­следственной связи. С другой стороны, модель Weakestmo исполняет ин­струкции по порядку, но рассматривает единовременно несколько сценариев исполнения объединенных в структуру событий, некоторые из этих сценари­ев исполнения моделируют спекулятивное исполнение инструкций вне оче­реди. С помощью метода симуляции [17] демонстрируется, что построение необходимой структуры событий может симулировать процесс исполнения программы в модели IMM.

Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


В рамках данной работы была доказана теорема о корректности ком­пиляции из модели памяти для языков программирования Weakestmo в мо­дели памяти современных мультипроцессоров x86, ARM и POWER. Модель Weakestmo и доказательство о корректности компиляции были формализо­ваны с помощью системы для интерактивного доказательства теорем Coq. По результатам данной работы в соавторстве с коллегами была опубликована статья [24] и подготовлен доклад на конференции European Conference on Object-Oriented Programming (ECOOP) 2020.
В дальнейшем планируется продолжить развитие модели Weakestmo и ее формализации в системе Coq. Также ведется работа по разработке алго­ритма проверки моделей (model checking) для автоматической верификации многопоточных программ в модели памяти Weakestmo.


[1] Moiseenko E, Podkopaev A, Koznov D. A Survey of Programming Lan­guage Memory Models // Programming and Computer Software. — 2021. — Vol. 47, no. 6.-P. 439-456.
[2] The Problem of Programming Language Concurrency Semantics / Mark Batty, Kayvan Memarian, Kyndylan Nienhuis et al. // ESOP. — Vol. 9032 of LNCS. - Springer, 2015. - P. 283-307.
[3] Mathematizing C++ Concurrency / Mark Batty, Scott Owens, Susmit Sarkar et al. // POPL 2011. - ACM, 2011. - P. 55-66.
[4] Manson Jeremy, Pugh William, Adve Sarita V. The Java Memory Model // POPL 2005. - ACM, 2005. - P. 378-391.
[5] Chakraborty Soham, Vafeiadis Viktor. Formalizing the concurrency seman­tics of an LLVM fragment // 2017 IEEE/ACM International Symposium on Code Generation and Optimization (CGO) / IEEE. — 2017. — P. 100-110.
[6] A Promising Semantics for Relaxed-Memory Concurrency / Jeehoon Kang, Chung-Kil Hur, Ori Lahav et al. // POPL 2017. - ACM, 2017.
[7] Modular Relaxed Dependencies in Weak Memory Concurrency / Marco Paviotti, Simon Cooksey, Anouk Paradis et al. // European Symposium on Programming / Springer, Cham. — 2020. — P. 599-625.
[8] Jagadeesan Radha, Jeffrey Alan, Riely James. Pomsets with preconditions: a simple model of relaxed memory // Proceedings of the ACM on Programming Languages. — 2020. — Vol. 4, no. OOPSLA. — P. 1-30.
[9] Chakraborty Soham, Vafeiadis Viktor. Grounding thin-air reads with event structures // Proceedings of the ACM on Programming Languages. — 2019. - Vol. 3, no. POPL. -P. 1-28.
[10] Winskel Glynn. Event structures // Advanced Course on Petri Nets / Springer. — 1986. — P. 325-392.
[11] x86-TSO: A Rigorous and Usable Programmer’s Model for x86 Multiproces­sors / Peter Sewell, Susmit Sarkar, Scott Owens et al. // Commun. ACM. — 2010.-Vol. 53, no. 7.-P. 89-97.
[12] Simplifying ARM concurrency: multicopy-atomic axiomatic and operational models for ARMv8 / Christopher Pulte, Shaked Flur, Will Deacon et al. // Proceedings of the ACM on Programming Languages. — 2018. — Vol. 2, no. POPL.-P. 1-29.
[13] Alglave Jade, Maranget Luc, Tautschnig Michael. Herding Cats: Modelling, Simulation, Testing, and Data Mining for Weak Memory // ACM Trans. Pro­gram. Lang. Syst.— 2014.— Vol. 36, no. 2. — P. 7:1-7:74.
[14] McKenney Paul E. Memory barriers: a hardware view for software hackers // Linux Technology Center, IBM Beaverton. — 2010.
[15] The Coq Development Team. The Coq Proof Assistant. — 2021. — Jan. — Access mode: https://doi.org/10.5281/zenodo.4501022.
...


Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ