Добрый день.
15 мая была проведен первый вебинар (из 16) курса «Multicore programming in Java». Тут я бы хотел опубликовать материалы, упоминавшиеся на лекции: ссылки на источники, термины, картинки, задание. Возможно кто-то сочтет их полезными для себя.
Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
Стоит «посмотреть картинки» в следующих источниках
Maurice Herlihy, Nir Shavit, “The Art of Multiprocessor Programming”: «Hardware Basics» page 469-482
Memory hierarchy #1
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/c8f/ed2/45b/c8fed245bba0dd46065571a4f0f3810d.png)
Memory hierarchy #2
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/4d8/b40/30d/4d8b4030d85354557bf2c7a5ebe4f46c.png)
Memory hierarchy #3
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/15a/3db/ed6/15a3dbed6f6b7503d74d52c5b72cd392.png)
Типичное время доступа к разным уровням памяти
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/9e4/eaf/594/9e4eaf594d7dff81b460a8f085366807.png)
Примеры регистров конкретного процессора
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/5a6/2f7/f01/5a62f7f010e2e52fbcb033660959e6e5.png)
Схематичное взаимодействие контроллеров кэшей
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/aaf/411/f7b/aaf411f7b604713f5a5c2bee32ae122b.png)
False sharing: код
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/b6f/5d7/bac/b6f5d7bac3d0eec40ed5731c8ff19539.png)
False sharing: эффект (отрицательная масштабируемость)
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/234/27a/2db/23427a2db0f2b6af359713dfbbf0a6d7.png)
Плохое соответствие между ядрами, кэшами и данными
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/00b/408/393/00b408393abbce3546c61b9cb57c0f8c.png)
Хорошее соответствие между ядрами, кэшами и данными
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/758/eaf/af2/758eafaf2eea0378c7d0c3cb7b1fef42.png)
Термины
CPU, core, multicore era, memory wall, memory hierarchy, registers, L1/L2/L3 caches, cache line, false sharing, memory padding, cache pollution, cache miss, SMP, NUMA, multisocket, thread affinity
Что читать по терминам
— Mechanical Sympathy: «CPU Cache Flushing Fallacy»
— Mechanical Sympathy: «Memory Access Patterns Are Important»
— Mechanical Sympathy: «False Sharing»
— Mechanical Sympathy: «False Sharing && Java 7»
— Руслан Черемин: «False sharing»
— Руслан Черемин: «Cache coherency #3: false sharing»
— Руслан Черемин: «How caching affects hashing»
Написать утилитарный класс (в варианте A или в обоих вариантах (А и В)), который возвращает следующие характеристики процессора
— размер кэш-линии
— количество и размеры кэшей (L1, L2, L3)
— количество ядер
— определяет SMP или NUMA архитектура
A) путем «постановки программных экспериментов». Рекомендуется прочитать статью «Gallery of Processor Cache Effects» (на лекции #2 разберем примеры из статьи и наметим пути решения задачи)
B) путем использования JNA для вызовов API операционной системы
Вебинары, видео в записи, исходный код программ и проверка заданий доступны только записавшимся на курс.
Я занимаюсь онлайн обучением Java (вот курсы программирования) и публикую часть учебных материалов в рамках переработки курса Java Core. Видеозаписи лекций в аудитории Вы можете увидеть на youtube-канале, возможно, видео канала лучше систематизировано в этой статье.
skype: GolovachCourses
email: GolovachCourses@gmail.com
15 мая была проведен первый вебинар (из 16) курса «Multicore programming in Java». Тут я бы хотел опубликовать материалы, упоминавшиеся на лекции: ссылки на источники, термины, картинки, задание. Возможно кто-то сочтет их полезными для себя.
Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
Введение
- Закон Мура, Moore’s law
- Herb Satter, “The Free Lunch Is Over”
- Закон Амдала, Amdahl’s law
“Железо”
Стоит «посмотреть картинки» в следующих источниках
- «What Every Programmer Should Know About Memory»
- «The Architecture of the Nehalem Processor and Nehalem-EP SMP Platforms»
- «A Primer on Memory Consistency and Cache Coherence»
Учебники
Maurice Herlihy, Nir Shavit, “The Art of Multiprocessor Programming”: «Hardware Basics» page 469-482
«Картинки»
Memory hierarchy #1
![](https://habrastorage.org/getpro/habr/post_images/c8f/ed2/45b/c8fed245bba0dd46065571a4f0f3810d.png)
Memory hierarchy #2
![](https://habrastorage.org/getpro/habr/post_images/4d8/b40/30d/4d8b4030d85354557bf2c7a5ebe4f46c.png)
Memory hierarchy #3
![](https://habrastorage.org/getpro/habr/post_images/15a/3db/ed6/15a3dbed6f6b7503d74d52c5b72cd392.png)
Типичное время доступа к разным уровням памяти
![](https://habrastorage.org/getpro/habr/post_images/9e4/eaf/594/9e4eaf594d7dff81b460a8f085366807.png)
Примеры регистров конкретного процессора
![](https://habrastorage.org/getpro/habr/post_images/5a6/2f7/f01/5a62f7f010e2e52fbcb033660959e6e5.png)
Схематичное взаимодействие контроллеров кэшей
![](https://habrastorage.org/getpro/habr/post_images/aaf/411/f7b/aaf411f7b604713f5a5c2bee32ae122b.png)
False sharing: код
![](https://habrastorage.org/getpro/habr/post_images/b6f/5d7/bac/b6f5d7bac3d0eec40ed5731c8ff19539.png)
False sharing: эффект (отрицательная масштабируемость)
![](https://habrastorage.org/getpro/habr/post_images/234/27a/2db/23427a2db0f2b6af359713dfbbf0a6d7.png)
Плохое соответствие между ядрами, кэшами и данными
![](https://habrastorage.org/getpro/habr/post_images/00b/408/393/00b408393abbce3546c61b9cb57c0f8c.png)
Хорошее соответствие между ядрами, кэшами и данными
![](https://habrastorage.org/getpro/habr/post_images/758/eaf/af2/758eafaf2eea0378c7d0c3cb7b1fef42.png)
Термины
Термины
CPU, core, multicore era, memory wall, memory hierarchy, registers, L1/L2/L3 caches, cache line, false sharing, memory padding, cache pollution, cache miss, SMP, NUMA, multisocket, thread affinity
Что читать по терминам
— Mechanical Sympathy: «CPU Cache Flushing Fallacy»
— Mechanical Sympathy: «Memory Access Patterns Are Important»
— Mechanical Sympathy: «False Sharing»
— Mechanical Sympathy: «False Sharing && Java 7»
— Руслан Черемин: «False sharing»
— Руслан Черемин: «Cache coherency #3: false sharing»
— Руслан Черемин: «How caching affects hashing»
Задание к Лекции #1
Написать утилитарный класс (в варианте A или в обоих вариантах (А и В)), который возвращает следующие характеристики процессора
— размер кэш-линии
— количество и размеры кэшей (L1, L2, L3)
— количество ядер
— определяет SMP или NUMA архитектура
A) путем «постановки программных экспериментов». Рекомендуется прочитать статью «Gallery of Processor Cache Effects» (на лекции #2 разберем примеры из статьи и наметим пути решения задачи)
B) путем использования JNA для вызовов API операционной системы
public class HardwareSpy {
public int cacheLineSize() {...}
public int cacheL1Size() {...} // -1 если считается, что нет L1
public int cacheL2Size() {...} // -1 если считается, что нет L2
public int cacheL3Size() {...} // -1 если считается, что нет L3
public int coreCount() {...}
public int isSMP() {...}
public int isNUMA() {...}
}
Контакты
Вебинары, видео в записи, исходный код программ и проверка заданий доступны только записавшимся на курс.
Я занимаюсь онлайн обучением Java (вот курсы программирования) и публикую часть учебных материалов в рамках переработки курса Java Core. Видеозаписи лекций в аудитории Вы можете увидеть на youtube-канале, возможно, видео канала лучше систематизировано в этой статье.
skype: GolovachCourses
email: GolovachCourses@gmail.com