Java Multicore Programming: Lecture #1

Добрый день.15 мая была проведен первый вебинар (из 16) курса «Multicore programming in Java». Вебинары, видео в записи, исходный код программ и проверка заданий доступны только записавшимся на курс (запись еще открыта, свяжитесь по контактам внизу страницы). Но тут я бы хотел опубликовать материалы, упоминавшиеся на лекции: ссылки на источники, термины, картинки, задание. Возможно кто-то сочтет их полезными для себя.Введение «Железо» Стоит «посмотреть картинки» в следующих источникахУчебники Maurice Herlihy, Nir Shavit, «The Art of Multiprocessor Programming»: «Hardware Basics» page 469–482«Картинки» Memory hierarchy #1c8fed245bba0dd46065571a4f0f3810d.pngMemory hierarchy #24d8b4030d85354557bf2c7a5ebe4f46c.png

Memory hierarchy #315a3dbed6f6b7503d74d52c5b72cd392.png

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

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

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

False sharing: кодb6f5d7bac3d0eec40ed5731c8ff19539.png

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

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

Хорошее соответствие между ядрами, кэшами и данными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 () {…} } Контакты skype: GolovachCourcesemail: GolovachCources@gmail.com

© Habrahabr.ru