- PVSM.RU - https://www.pvsm.ru -
Добрый день.
15 мая была проведен первый вебинар (из 16) курса «Multicore programming in Java» [1]. Вебинары, видео в записи, исходный код программ и проверка заданий доступны только записавшимся на курс (запись еще открыта, свяжитесь по контактам внизу страницы). Но тут я бы хотел опубликовать материалы, упоминавшиеся на лекции: ссылки на источники, термины, картинки, задание. Возможно кто-то сочтет их полезными для себя.
Стоит «посмотреть картинки» в следующих источниках
Maurice Herlihy, Nir Shavit, “The Art of Multiprocessor Programming” [8]: «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» [9]
— Mechanical Sympathy: «Memory Access Patterns Are Important» [10]
— Mechanical Sympathy: «False Sharing» [11]
— Mechanical Sympathy: «False Sharing && Java 7» [12]
— Руслан Черемин: «False sharing» [13]
— Руслан Черемин: «Cache coherency #3: false sharing» [14]
— Руслан Черемин: «How caching affects hashing» [15]
Написать утилитарный класс (в варианте A или в обоих вариантах (А и В)), который возвращает следующие характеристики процессора
— размер кэш-линии
— количество и размеры кэшей (L1, L2, L3)
— количество ядер
— определяет SMP или NUMA архитектура
A) путем «постановки программных экспериментов». Рекомендуется прочитать статью «Gallery of Processor Cache Effects» [16] (на лекции #2 разберем примеры из статьи и наметим пути решения задачи)
B) путем использования JNA [17] для вызовов 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: GolovachCources
email: GolovachCources@gmail.com
Автор: IvanGolovach
Источник [18]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/60015
Ссылки в тексте:
[1] «Multicore programming in Java»: http://habrahabr.ru/company/golovachcourses/blog/217051/
[2] Moore’s law: http://en.wikipedia.org/wiki/Moore's_law
[3] “The Free Lunch Is Over”: http://www.gotw.ca/publications/concurrency-ddj.htm
[4] Amdahl’s law: http://en.wikipedia.org/wiki/Amdahl%27s_law
[5] «What Every Programmer Should Know About Memory»: http://diyhpl.us/~bryan/papers2/distributed/distributed-systems/what-every-programmer-should-know-about-memory.2007.pdf
[6] «The Architecture of the Nehalem Processor and Nehalem-EP SMP Platforms»: http://sc.tamu.edu/systems/eos/nehalem.pdf
[7] «A Primer on Memory Consistency and Cache Coherence»: https://class.stanford.edu/c4x/Engineering/CS316/asset/A_Primer_on_Memory_Consistency_and_Coherence.pdf
[8] “The Art of Multiprocessor Programming”: http://www.amazon.com/The-Multiprocessor-Programming-Revised-Reprint/dp/0123973376/
[9] «CPU Cache Flushing Fallacy»: http://mechanical-sympathy.blogspot.com/2013/02/cpu-cache-flushing-fallacy.html
[10] «Memory Access Patterns Are Important»: http://mechanical-sympathy.blogspot.com/2012/08/memory-access-patterns-are-important.html
[11] «False Sharing»: http://mechanical-sympathy.blogspot.com/2011/07/false-sharing.html
[12] «False Sharing && Java 7»: http://mechanical-sympathy.blogspot.com/2011/08/false-sharing-java-7.html
[13] «False sharing»: http://cheremin.blogspot.com/2011/09/false-sharing.html
[14] «Cache coherency #3: false sharing»: http://cheremin.blogspot.com/2012/07/cache-coherency-3-false-sharing.html
[15] «How caching affects hashing»: http://cheremin.blogspot.com/2011/06/how-caching-affects-hashing.html
[16] «Gallery of Processor Cache Effects»: http://igoro.com/archive/gallery-of-processor-cache-effects/
[17] JNA: https://jna.java.net
[18] Источник: http://habrahabr.ru/post/223083/
Нажмите здесь для печати.