Pull to refresh

Java Multicore Programming: Lecture #1

Reading time 2 min
Views 17K
Добрый день.
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


Memory hierarchy #2


Memory hierarchy #3


Типичное время доступа к разным уровням памяти


Примеры регистров конкретного процессора


Схематичное взаимодействие контроллеров кэшей


False sharing: код


False sharing: эффект (отрицательная масштабируемость)


Плохое соответствие между ядрами, кэшами и данными


Хорошее соответствие между ядрами, кэшами и данными


Термины


Термины
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
Tags:
Hubs:
+3
Comments 14
Comments Comments 14

Articles

Information

Website
www.golovachcourses.com
Registered
Founded
Employees
2–10 employees
Location
Украина