Skip to content

[RU] Статьи и примеры для доклада "Эволюция моделей памяти"

Notifications You must be signed in to change notification settings

lantalex/mm-evolution

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Эволюция моделей памяти

Примеры для доклада на SnowOne 2025 и JPoint 2025

Термин «модель памяти» — интересный и непростой для понимания, так как в него вкладывается множество различных смыслов.

Чтобы упростить его осознание, мы проведем историческую ретроспективу: от появления первых моделей памяти «в железе» до их современного состояния. Затем рассмотрим, какие модели памяти используются в популярных языках программирования — на примере Java, C++, Rust и Go, сравним их особенности и принципы. Кроме того, обсудим недавние исследования и перспективные подходы, которые могут появиться в будущем.

Цель доклада — помочь лучше разобраться в ключевых аспектах моделей памяти и показать, как они эволюционировали до сегодняшнего дня. Будет полезно всем, кто интересуется вопросами многопоточности и конкурентности.

Статьи и примеры

Слайд Файл Комментарий
7 «How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs» Классическая статья, дающая определение Sequential Consistency (SC)
8-11 SequentialConsistency_MessagePassing.java Пример, демонстрирующий SC message passing
12 «Weak Ordering – A New Definition» Классическая статья, дающая определение Data-Race-Free
13 «A Better x86 Memory Model: x86-TSO» Исправление и актуализация модели памяти x86
15, 18 Hardware_MessagePassing.java Пример, демонстрирующий message passing на конкретных архитектурах
16 SequentialConsistency_StoreBuffer.java
Hardware_StoreBuffer.java
Примеры, демонстрирующие store buffering
19-21 Java_Coherence.java
Hardware_Coherence.java
Примеры, демонстрирующие нарушение когерентности в Java, в отличии от hardware
23 «The Java Language Specification» (1996) Спецификация первой версии Java, глава №17 описывает самую первую, неудачную модель памяти
23 «The Java Memory Model is Fatally Flawed» Проблемы самой первой модели памяти Java
24 «The Java Memory Model» (2005) Актуальная модель памяти Java
25 «On Validity of Program Transformations in the Java Memory Model»
«Memory Models: A Case For Rethinking Parallel Languages and Hardware»
«Compiling Volatile Correctly in Java»
Статьи, описывающие проблемы в текущей модели памяти Java
33 «Common Compiler Optimisations are Invalid in the C11 Memory Model and what we can do about it» Статья, описывающая проблемы в текущей модели памяти C++
37 «What Memory Model Should the Rust Language Use?» Применимость модели памяти Rust в Linux Kernel
38 «The Go Memory Model» Модель памяти Go
40 «Bounding Data Races in Space and Time» Статья, дающая определение local Data-Race-Free
46-48 LocalDRF_BrokenAssign.java
LocalDRF_BrokenDoubleRead.java
Примеры, демонстрирующие невозможность локальных рассуждений в случае гонок в Java
49 «OСaml Memory Model» Модель памяти OCaml, использующая операционную семантику и local Data-Race-Free
50 «Promising 2.0: Global Optimizations in Relaxed Memory Concurrency» Статья, описывающая Promising Semantics

Конфигурация оборудования

Для запуска примеров использовалось следующее оборудование:

Архитектура x86-64

Основная машина

CPU: Intel Core i9 12900K
RAM: 32GB DDR5-4800 MHz
JVM: 21.0.4+9-LTS
OS: Ubuntu 22.04.5 LTS/Linux 6.8.0-52-generic

Архитектура ARM

ARMv8 - Raspberry Pi 4 Model B

CPU: Broadcom BCM2711
RAM: 8GB LPDDR4-1500 MHz
JVM: 21.0.1+12-LTS
OS: Ubuntu 22.04.5 LTS/Linux 5.15.0-1070-raspi

About

[RU] Статьи и примеры для доклада "Эволюция моделей памяти"

Topics

Resources

Stars

Watchers

Forks

Languages