Исследование характеристик динамического предсказания ветвлений в конвейере с...Semen MartynovКонвейерный принцип обработки информации используется с целью увеличения быстродействия процессора и максимального использования всех его возможностей в современных микропроцессорах. Выполнение каждой команды складывается из ряда последовательных этапов, суть которых не меняется от команды к команде. Рассмотрим принципы конвейерной обработки информации на примере пятиступенчатого конвейера
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матрицSemen MartynovПри разработке кэш-независимых алгоритмов (cache-oblivious algorithms) не делается предположений о реальной структуре кэша (а реальная производительность не должна заметно деградировать), но используется модель "идеального кэша"
Lecture1: Introduction to Parallel ComputingAndrii RodionovВ первой лекции рассматриваются основные виды параллелизма и способы написания высокопроизводительных приложений.
В конце рассматривается поддержка параллелизма в Java.
[DD] 10. MemoryGabit AltybaevMemory. Static memory; dynamic memory; flash memory. Memory in FPGA. Firmware machines on ROM. RAM. RAM for temporary storage of information. RAM as an information buffer.
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыAlexey PaznikovЛЕКЦИЯ 1. Основные понятия стандарта MPI. Дифференцированные обмены
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
О.В.Сухорослов "Параллельное программирование"YandexО.В.Сухорослов "Параллельное программирование", 16.03.2012, место показа МФТИ, Школа анализа данных (ШАД)
Алгоритмы и структуры данных BigData для графов большой размерностиAlexey ZinovievArticle "Algorithms and Data Structures Big Data for large-scale graphs" presented on School-conference on Mathematical Problems of Informatics http://omskconf2013.oscsbras.ru/index.html by Alexey Zinoviev
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213Слайды лекции курса "Архитектура и программирование потоковых многоядерных процессоров для научных рассчетов".
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213Слайды лекции курса "Архитектура и программирование потоковых многоядерных процессоров для научных рассчетов".
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail KurnosovОптимизация ветвлений и циклов (Branch prediction and loop optimization)
О.В.Сухорослов "Многопотчное программирование. Часть 2"YandexО.В.Сухорослов "Многопотчное программирование. Часть 2", 24.02.2012, место показа МФТИ, Школа анализа данных (ШАД)
Big data algorithms and data structures for large scale graphsAlexey ZinovievAlexey Zinoviev presents graph processing tools and new algorythms for shortest path problem on the DUMP-2014 (popular Ural IT conference)
Keywords: Pregel, Apache Giraph, shortest path problem
Video: http://youtu.be/MGccYYrP9f0
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213Слайды лекции курса "Архитектура и программирование потоковых многоядерных процессоров для научных рассчетов".
Multithreading in goLohika_Odessa_TechTalksThere are a lot of things in multi-threading world, which we, as engineers, have to consider while developing applications. During Golang Odesa #TechTalks we will talk about three main problems – data races, race conditions, and deadlocks. Also, we will discuss how to avoid fantom bugs and do not shoot yourself in the foot while developing Golang applications
About speaker:
Oleksandr Karlov is Golang Team Lead at Lohika. Currently, Oleksandr is working on SLO project, which helps engineers to control reliability of their services. Before that he worked on CDN and statistics platform.
Быстрое прототипирование алгоритмов управленияMATLABИспользование отладочных стендов является естественным шагом при внедрении модельно-ориентированного проектирования. Мы хотим показать как быстро и эффективно строить стенды реального времени для проведения безопасных испытаний систем управления.
О.В.Сухорослов "Параллельное программирование"YandexО.В.Сухорослов "Параллельное программирование", 16.03.2012, место показа МФТИ, Школа анализа данных (ШАД)
Алгоритмы и структуры данных BigData для графов большой размерностиAlexey ZinovievArticle "Algorithms and Data Structures Big Data for large-scale graphs" presented on School-conference on Mathematical Problems of Informatics http://omskconf2013.oscsbras.ru/index.html by Alexey Zinoviev
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213Слайды лекции курса "Архитектура и программирование потоковых многоядерных процессоров для научных рассчетов".
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213Слайды лекции курса "Архитектура и программирование потоковых многоядерных процессоров для научных рассчетов".
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail KurnosovОптимизация ветвлений и циклов (Branch prediction and loop optimization)
О.В.Сухорослов "Многопотчное программирование. Часть 2"YandexО.В.Сухорослов "Многопотчное программирование. Часть 2", 24.02.2012, место показа МФТИ, Школа анализа данных (ШАД)
Big data algorithms and data structures for large scale graphsAlexey ZinovievAlexey Zinoviev presents graph processing tools and new algorythms for shortest path problem on the DUMP-2014 (popular Ural IT conference)
Keywords: Pregel, Apache Giraph, shortest path problem
Video: http://youtu.be/MGccYYrP9f0
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213Слайды лекции курса "Архитектура и программирование потоковых многоядерных процессоров для научных рассчетов".
Multithreading in goLohika_Odessa_TechTalksThere are a lot of things in multi-threading world, which we, as engineers, have to consider while developing applications. During Golang Odesa #TechTalks we will talk about three main problems – data races, race conditions, and deadlocks. Also, we will discuss how to avoid fantom bugs and do not shoot yourself in the foot while developing Golang applications
About speaker:
Oleksandr Karlov is Golang Team Lead at Lohika. Currently, Oleksandr is working on SLO project, which helps engineers to control reliability of their services. Before that he worked on CDN and statistics platform.
Быстрое прототипирование алгоритмов управленияMATLABИспользование отладочных стендов является естественным шагом при внедрении модельно-ориентированного проектирования. Мы хотим показать как быстро и эффективно строить стенды реального времени для проведения безопасных испытаний систем управления.
Инновационные решения в области интернет-продвижения алкогольных брендовPolina TashakovaПрезентация "Инновационные решения в области интернет-продвижения алкогольных брендов" (Алексей Игнатьев, РА "Эдформер") на V Международной конференции "Маркетинговые стратегии в продвижении алкогольной продукции". 5 февраля 2010. Одесса, Украина
http://expodessa.od.ua/conference/about/
В рамках выставки "Вино и виноделие".
Организатор: выставочная компания "Экспо-Юг-Сервис"
Продвижение алкогольных брендов с помощью мобильных приложенийStanfyЯркие примеры использования мобильных приложений в маркетинговых стратегиях алкогольных брендов.
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...OnticoОперативная память становится всё более дешёвой и производительной, что позволяет использовать её для хранения рабочего набора данных всё большего числа приложений. Хранение всех данных в оперативной памяти позволяет сделать их высоко доступными, а алгоритмы для работы с данными либо существенно упростить, либо ускорить, а иногда — и то, и другое.
Тезисы - http://www.highload.ru/2015/abstracts/1964.html
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryTatyanazaxarovaВ этой статье Анатолий Кузнецов отвечает на вопросы и рассказывает об открытой библиотеке BitMagic C++ Library.
Корпоративная культура организации: примеры и формированиеSemen MartynovСобрание некоторых взглядов и мнений на процесс построения и значение корпоративной культуры
Задача выделения объекта на изображении: хаотично-фазовая синхронизация и аси...Semen MartynovПрименение осцилляторных нейронных сетей позволяет выделить все объекты на фотоснимке (путём группировки осцилляторов по частоте синхронизации) и переключать внимание между ними. Известны и более простые способы выделения объекта, однако данный метод максимально близко моделирует процесс распознавания, который происходит в человеческом мозгу.
Задача выделения объекта на изображении: хаотично-фазовая синхронизация и аси...Semen Martynov
Исследование работы Кэш-памяти центрального процессора
1. Исследование работы Кэш-памяти
центрального процессора
Чёрная команда
Санкт-Петербургский политехнический университет Петра Великого
Антон Абрамов <abramov91@mail.ru>
Владислав Бусаров <happyfanik@yandex.ru>
Сергей Дедков <dsv.mail@yandex.ru>
Семён Мартынов <semen.martynov@gmail.com>
Николай Патраков <noon.vlg@gmail.com>
23 ноября 2015 г.
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 1 / 32
2. Содержание
1 Назначение кэш памяти
2 Принцип работы кэша процессора
3 Организация кэша
4 Понятие ассоциативности кэша
5 Эксперимент
6 Заключение
7 Источники
8 Вопросы
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 2 / 32
3. Понятие кэш-памяти
Кэш (от фр. cacher – "прятать")
промежуточный буфер с быстрым доступом, содержащий информацию,
которая может быть запрошена с наибольшей вероятностью. Доступ к
данным в кэше осуществляется быстрее, чем выборка исходных данных
из более медленной памяти или удаленного источника, однако её объём
существенно ограничен по сравнению с хранилищем исходных данных.
Понятие предложено в 1967 году Лайлом Джонсоном (редактором
журнала "IBM Systems Journal") как замена термину "высокоскоростной
буфер"при описании памяти в разрабатываемой модели 85 из серии
IBM System/360.
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 3 / 32
4. Нужна ли кэш-память в современных системах?
Оперативная память представляет собой динамическую память с
произвольным доступом (Dynamic Random Access Memory, DRAM), а
кэш процессора выполняется на базе статической оперативной памяти
(Static Random Access Memory, SRAM).
Рассмотрим память DDR3-1600 9-9-9-27 (tCL-tRCD-tRP-tRAS):
эффективная частота составляет 1600 МГц, это скорость с которой
данные поступают на внешнюю шину в пакетном режиме доступа, а
реальная частота ядра памяти составляет всего 200 МГц.
С момента активации нужной строки памяти и до появления данных на
шине пройдет промежуток времени, равный tCL+tRCD, то есть 18
тактов. С учетом того что частота работы ядра памяти DDR3-1600
составляет 200 МГц, это время равно 90 нс. Если частота работы
процессора составляет 3 ГГц, то это означает, что процессор должен
будет дожидаться нужных данных (простаивать) минимум 270 тактов!
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 4 / 32
5. Почему DRAM-память не заменить SRAM-памятью?
Каждая ячейка DRAM-памяти состоит из одного полевого транзистора
и одного конденсатора, ячейка SRAM-памяти – как минимум из шести
полевых транзисторов (есть варианты с числом транзисторов 8 и 12).
Об этом рассказывал проф. Мелехин.
В результате:
Модули SRAM-памяти были бы меньшего объема в сравнении с
модулями DRAM-памяти
Их цена (даже при равном объёме) была бы выше
Существенно возросла бы проблема кэширования периферийных
устройств
Пришлось бы перерабатывать систему кэширования, которая на
данный момент работает достаточно хорошо =)
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 5 / 32
6. Принцип работы кэша процессора
Рис. 1: Структура кэш-памяти процессора
Кэш-контроллер перехватывает запросы к оперативной памяти и
определяет, имеется ли копия затребованных данных в кэше. Если есть
(cache hit), то данные извлекаются из кэша, если нет (cache miss) –
тогда запрос переадресуется к оперативной памяти.
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 6 / 32
7. Стратегии кэширования
Кэш-контроллер должен уметь предсказывать какие данные
потребуются процессору в будущем и загружать их в кэш
(упреждающая загрузка данных)
On demand – обращение к оперативной памяти происходит только в
случае кэш-промаха
Look Ahead – алгоритмы упреждающей спекулятивной загрузки
данных в кэш основанные на предположении, что данные из
оперативной памяти обрабатываются последовательно, в порядке
возрастания адресов
Look Through – загрузка данных из памяти может либо начинаться
после фиксации кэш-промаха
Look Aside – загрузка осуществляться параллельно с проверкой
наличия соответствующей копии данных и до кэш-попадания (очень
эффективна, но увеличивается энергопотребление процессора)
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 7 / 32
8. Политики замещения данных в кэш-памяти
Кэш всегда полон; новые данные можно занести только путем
замещения каких-либо старых.
Rnd (Random) замещаемые данные выбираются случайным образом
LFU (Least Frequently Used) – в первую очередь замещаются данные, у
которых самая низкая частота обращений (требует наличия
счетчика удачных запросов в каждой строке кэша)
LRU (Least Recently Used) – замещаются те данные, к которым дольше
всего не обращались
LRR (Least Recently Replaced) – замещаются те данные, которые были
загружены раньше всех
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 8 / 32
9. Организация кэша
Из чего формируется кэш-строка (cache-line):
Счетчик возраста строк, для реализации политики замещения на
основе алгоритма LRU
32-разрядный (четырехбайтный) адрес памяти, используемый
контроллером для проверки промахов/попаданий. Адрес
сохраняемого слова принято называть тегом (tag)
Блок данных фиксированного размера (степени двойки – 2, 4, 8, 16
и т.д.), идущих подряд в оперативной памяти. Он называется
размером кэш строки.
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 9 / 32
10. Организация кэша
Рис. 2: Пример кэш-строки размером 16 байт
Размер кэш строки всегда равен степени двойки, а данные не
пересекаются. Тогда размер тега (в битах) равен 32 − log2S, где S –
размер кэш строки в байтах.
Если размер кэш строки равен 16 байт – то размер тега адреса 28 бита.
Для строки из 32 байт – 27 бит адреса, 64 бай адресуются 26 битами.
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 10 / 32
11. Организация кэша
Объём кэша можно рассматривать как полный, и как полезный.
Пусть имеется кэш размером 32 Кбайт и длина строки составляет 128
байт. Такой кэш будет содержать 256 строк (32 Кбайт/128 байт).
Каждая строка имеет тег размером 25 бит (32 – log2 128). Кроме того,
добавим счетчик старения, содержащий 8 бит (log2 256). То есть к
каждой строке добавляется еще 33 служебных бита. А всего таких
служебных бит будет 8’448 или 1’056 байт. Соответственно полный
объем кэша составит чуть более 33 Кбайт.
В рассмотренном нами кэше мы не учитывали так называемые биты
модификации, которые также добавляются в каждой строке кэша и
необходимы для поддержания когерентности.
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 11 / 32
12. Полностью ассоциативная кэш-память (Fully associative)
Рис. 3: Структура полностью ассоциативной кэш-памяти
Чтобы определить, имеются ли запрошенные процессором данные в
кэш-памяти, нужно перебрать все кэш строки.
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 12 / 32
13. Кэш-память с прямым отображением (Direct mapping)
Рис. 4: Структура кэш-памяти с прямым отображением
Каждой строке кэш-памяти соответствует несколько (строго
определенных) строк оперативной памяти.
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 13 / 32
14. Кэш-память с прямым отображением (Direct mapping)
Соотношение между номерами строк оперативной памяти и номерами
кэш-строк:
Ncache = (Nmemory )mod(Nmax_cache)
Где:
Ncache номер кэш строки
Nmemory номер строки оперативной памяти
Nmax_cache количество строк кэш-памяти
mod функция получения остатка от деления
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 14 / 32
15. Кэш-память с прямым отображением (Direct mapping)
Перейдём от строк оперативной памяти к адресному пространству.
Nmemory = (ADDR)div(CACHE_LINE_SIZE)
Где:
ADDR адрес элемента в оперативной памяти
CACHE_LINE_SIZE размер кэш-строки
div функция целочисленного деления
Количество строк кэш-памяти можно выразить следующим образом:
Nmax_cache = (CACHE_SIZE)div(CACHE_LINE_SIZE)
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 15 / 32
16. Кэш-память с прямым отображением (Direct mapping)
Тогда выражение, определяющее номер строки кэш-памяти, в которую
попадет элемент оперативной памяти с адресом ADDR, запишется в
виде:
Ncache =[(ADDR)div(CACHE_LINE_SIZE)]
mod[(CACHE_SIZE)div(CACHE_LINE_SIZE)]
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 16 / 32
17. Наборно-ассоциативный кэш (N-way cache)
Рис. 5: Структура наборно-ассоциативного кэша
Кэш состоит из нескольких независимых банков (сегментов), каждый из
которых представляет собой кэш с прямым отображением, а сами банки
полностью ассоциативны по отношению к оперативной памяти.
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 17 / 32
18. Наборно-ассоциативный кэш (N-way cache)
Количество банков кэша называется его степенью ассоциативности или
канальностью (way). То есть может быть 2-канальный (2-way),
4-канальный (4-way), 8-канальный (8-way) и т.д.
Поскольку каждый банк кэш-памяти является сегментом памяти с
прямым отображением, в нем действует то же правило, что и для
кэш-памяти с прямым отображением, то есть:
Nbank_cache = (Nmemory )mod(Nmax_bank_cache)
Где:
Nbank_cache номер кэш строки в банке памяти
Nmax_bank_cache количество строк кэш-памяти в банке
Nmemory номер строки оперативной памяти
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 18 / 32
19. Наборно-ассоциативный кэш (N-way cache)
Количество строк кэш-памяти в банке определяется соотношением:
Nmax_bank_cache =
Nmax_cache
N
Где:
Nmax_cache количество строк в кэш-памяти
N степень ассоциативности (количество банков или каналов).
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 19 / 32
20. Постановка задачи
Исследовать характеристики обращение к памяти для программ из
бенчмарка Ливерморские циклы, ядра 1-9.
Используя результаты исследования, определить оптимальную для этой
вычислительной нагрузки конфигурацию кэш-памяти общим объемом
0,5 Мбайт;
Параметры:
m – число строк
n – число слов в строке
k – коэффициент ассоциативности
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 20 / 32
21. Ливерморские циклы
"Ливерморские циклы"появился в середине 60-х годов и состоит из
фрагментов программ, имеющих реальное хождение в Ливерморской
Национальной лаборатории им. Лоуренса в США.
Считается, что Ливерморские циклы – это типичный набор программ
для решения численных задач. В этих фрагментах используются
различные вычислительные алгоритмы: сеточные, последовательные,
волновые, что существенно с точки зрения соответствия
вычислительных и аппаратных структур.
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 21 / 32
22. Ливерморские циклы
1 Hydro fragment
2 ICCG excerpt (Incomplete Cholesky Conjugate Gradient)
3 Inner product
4 Banded linear equations
5 Tri-diagonal elimination, below diagonal
6 General linear recurrence equations
7 Equation of state fragment
8 ADI integration
9 Integrate predictors
Исходный код:
https://github.com/SemenMartynov/SPbPU_ComputingSystems/
blob/master/lab2/livermorec/livermorec.c
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 22 / 32
23. Порядок решения
Для решения задачи было принято решение использовать средство
динамического анализа Intel Pin:
1 На 32-битной системе мы запустили pintool (для оптимизированной
и не оптимизированной версии Ливерморских циклов),
генерирующий журнал обращений к памяти
2 На С++ реализовали модель работы кэш-памяти 32-битного
процессора. Использовалась стратегии кэширования On demand, и
алгоритм LRU для замещения (перед этим мы использовали LFU,
но он обнаружил свои очевидные недостатки).
3 По итогам моделирования получили таблицу с количеством кэш
промахов и попаданий при различных коэффициентах
ассоциативности, количестве и длине кэш строк.
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 23 / 32
24. Сборка с использованием gcc 4.6.3.
Компиляция с максимальной оптимизацией
$ gcc livermorec.c -o livermorec-mxopt -O3
$ /opt/pin/pin -t /opt/pin/source/tools/SimpleExamples/obj-ia32/pinatrace.so -- ./livermorec-mxopt
$ mv pinatrace.out livermorec-mxopt.out
Реальное время работы программы с оснасткой 0m13.114s
Компиляция без оптимизации
$ gcc livermorec.c -o livermorec-noopt -O0
$ /opt/pin/pin -t /opt/pin/source/tools/SimpleExamples/obj-ia32/pinatrace.so -- ./livermorec-noopt
$ mv pinatrace.out livermorec-no/opt.out
Реальное время работы программы с оснасткой 0m13.442s
результаты компиляции (журналы отличаются)
$ du -hsBk livermorec*
20K livermorec.c
8K livermorec-mxopt
1756K livermorec-mxopt.out
12K livermorec-noopt
1764K livermorec-noopt.out
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 24 / 32
25. Особенности модели кэша
При разработке модели кэша мы заложили следующие особенности:
1 Проверка на размер. Общий объём кэша вычисляется в
зависимости от переданных параметров и составляет 512 Кбайт (в
действительности ± 16 Кбайт)
2 Если запрошенный из памяти кусок данных требует обращения к
нескольким кэш-строкам, то кэш-попадание засчитывается только
в случае если все куски были кэшированы и обращение к памяти
не потребовалось
3 Модель ориентирована на вычисление промахов и попаданий, а не
на эффективное хранение адресов (тегов). Очевидно, что после
определения строки поиск нужного банка производится перебором,
за линейную сложность.
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 25 / 32
26. Результаты эмуляции
Далее будут приведены результаты эмуляции для оптимизированной и
не оптимизированной версии программы, с кэшем в 512 (± 16) Кбайт.
В таблице используются следующие обозначения:
C.Lines – количество кэш-линий
Words – количество 32-битных слов в каждой линии
Assoc. – коэффициент ассоциативности
Total size – общий объём кэша
Miss ctr – количество кэш-попаданий
Hit ctr – количество кэш-промахов
Rate – коэффициент кэш-попаданий
LongHit – максимальное количество кэш-попаданий подряд
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 26 / 32
30. Заключение
В ходе анализа результатов, нами были сделаны следующие выводы:
Объём кэша влияет на эффективность работы (коэффициент
кэш-попаданий) меньше, чем его организация. Оптимальное
значение находится в районе 32 Кбайт.
Наиболее эффективно работает кэш с большим количеством
машинных слов в каждой кэш-линии. В случае с Ливерморскими
циклами это объясняется последовательным доступам к элементам
массива, созданного на стеке. В утилите ls, возможно, дело в
оптимизации компилятора.
Неоптимизированная версия Ливерморских циклов показала очень
хороший результат. Вероятно, это обусловлено достаточно
оптимальным исходным кодом.
Исходные коды, журналы и полные версии таблиц доступны по адресу:
https://github.com/SemenMartynov/SPbPU_ComputingSystems
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 30 / 32
31. Источники
Крис Касперский
Техника оптимизации программ. Эффективное использование памяти
БХВ-Петербург - ISBN 5-94157-232-8; 2003 г.
Корныхин Е. В.
Генерация тестовых данных для тестирования механизмов кэширования и
трансляции адресов микропроцессоров
Программирование, 2010,N N 1.-С.40-49
Сергей Пахомов
Что такое кэш процессора, и как он работает
Компьютер Пресс. - 2013. - № 1. - С. 48-54
Ulrich Drepper
Memory part 2: CPU caches
http://lwn.net/Articles/252125/
Чёрная команда (СПбПУ) Кэш-память 23 ноября 2015 г. 31 / 32