Содержание Введение в Cache-oblivious алгоритмы: – Определение Cache-oblivious алгоритмов. – Модель памяти компьютера. – Cache-oblivious модель – Примеры сache-oblivious алгоритмов: • Сумма элементов массива. • Разворот массива. Cache-oblivious матричное перемножение: – Cache-aware алгоритм. – Cache-oblivious алгоритм. – Результаты экспериментов. Список литературы. Н.Новгород, 2011 г. Cache-oblivious algorithms 2 из 21 Введение в Cache-oblivious алгоритмы Н.Новгород, 2011 г. Cache-oblivious algorithms 3 из 21 Cache-oblivious алгоритмы Cache-oblivious алгоритмы (кэш-независимые алгоритмы): Оптимальные cache-oblivious алгоритмы: Алгоритмы не делают никаких предположений о размере кэша и кэш линеек. Cache-oblivious алгоритмы использующие кэш оптимальным образом. Преимущества сache-oblivious алгоритмов: Алгоритмы работают одинаково эффективно на различных машинах: Различные иерархии памяти. Различные размеры кэша. Н.Новгород, 2011 г. Cache-oblivious algorithms 4 из 21 Модель памяти компьютера Размер памяти CPU L1 L2 L3 Основная память Жесткий диск Скорость доступа к памяти Н.Новгород, 2011 г. Cache-oblivious algorithms 5 из 21 Cache-oblivious модель Основная память Кэш • Доступ к кэшу считается бесплатным •Память представлена в виде линеек размером B. • Размер кэша M. Количество линеек в кэше M/B. • Размер основной памяти считается неограниченным. • В результате кэш промаха из основной памяти подгружается M B B Н.Новгород, 2011 г. необходимая линейка. • Если в кэше нет свободного места, происходит замена одной из линек , которая находится в кэше. Cache-oblivious algorithms 6 из 21 Уточнение определения Cache-oblivious алгоритмы: Алгоритмы не знающие значения B и M. Оптимальные cache-oblivious алгоритмы: MT(N) (memory transfers) – количество доступов к памяти для решения задачи размером N. Оптимальные cache-oblivious алгоритмы имеют минимальную оценку MT(N). Оптимальные cache-oblivious алгоритмы работают одинаково оптимально для всех возможных B и M. Н.Новгород, 2011 г. Cache-oblivious algorithms 7 из 21 Примеры Cache-oblivious алгоритмов Н.Новгород, 2011 г. Cache-oblivious algorithms 8 из 21 Сумма элементов массива int res = 0; for (int i = 0; i < N; i++) { res += array[i] } 1 2 3 4 i N-1 N MT(N) = O(N/B+1) Н.Новгород, 2011 г. Cache-oblivious algorithms 9 из 21 Разворот массива for (int i = 0; i < N; i++) { int tmp = array[i]; array[i] = array[N-i]; array[N-i] = tmp; } 1 2 3 4 i N-1 N Если количество линек в кэше (M/B) >2 то: MT(N) = O(N/B+1) Н.Новгород, 2011 г. Cache-oblivious algorithms 10 из 21 Cache-oblivious матричное перемножение Н.Новгород, 2011 г. Cache-oblivious algorithms 11 из 21 Постановка задачи a11 a1n b11 b1n A B a a b b nn n1 nn n1 c11 c1n C A* B c c nn n1 n где cij aij * b ji i 1 Будут рассмотрены: Стандартная реализация. Cache-aware реализация. Cache-oblivious реализация. Н.Новгород, 2011 г. Cache-oblivious algorithms 12 из 21 Cache-aware реализация for (int i=0;i<n/blockSize;i++) for (int j=0;j<n/blockSize;j++) for (int k=0;k<n/blockSize;k++) MultiBlock( Aik, Bkj, Cij); = * A A11 A12 Н.Новгород, 2011 г. A13 A21 A22 A23 Cache-oblivious algorithms A31 A32 A33 13 из 21 Cache-oblivious Рекурсивное перемножение элементов “Z-блоков” матрицы, используя Z-order. 4 итерации Z-order’a.* Пример 4ой итерации Z-order’a.** * Изображение с http://en.wikipedia.org/wiki/Z-order_curve ** Изображение из Prokop H., Cache-Oblivious Algorithms by Harald Prokop Н.Новгород, 2011 г. Cache-oblivious algorithms 14 из 21 Хранение матрицы A A11 A12 A21 MT ( N ) 8 * MT ( N / 2) A22 MT (c * M ) O( M / B) N N /2 ... ... N /2 ... O( M / B) O( M / B) ... ... ... N3 N /2 ... M 3 2 M * B N3 1 2 M *B N3 MT ( N ) O( ) M *B O( M / B) O(( N / M ) 3 ) Н.Новгород, 2011 г. Cache-oblivious algorithms 15 из 21 Эксперименты Н.Новгород, 2011 г. Cache-oblivious algorithms 16 из 21 Тестовая система Все эксперименты проводились на следующей машине: – – – – – – Processor: Intel Core i5 M540 @ 2,53GHz. L2 Cache (per Core): 256 KB. L3 Cache: 3 MB. RAM: 8Gb, DDR3 1333 MHz. ОС: Mac OS X 10.7.2 (11C74) Компилятор: i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00) Н.Новгород, 2011 г. Cache-oblivious algorithms 17 из 21 Результаты 4096 2048 1024 512 256 128 Сache-aware 64 Cache-oblivious Стандартное умножение 32 16 8 4 2 t (c) 1 512 Н.Новгород, 2011 г. 1024 2048 Cache-oblivious algorithms 4096 18 из 21 Ускорение 7 6 5 4 Ускорение Сache-aware Ускорение Cache-oblivious 3 2 1 0 128 256 Н.Новгород, 2011 г. 512 1024 2048 Cache-oblivious algorithms 4096 19 из 21 Спасибо за внимание! ??? Н.Новгород, 2011 г. Cache-oblivious algorithms 20 из 21 Список литературы Prokop H., Cache-Oblivious Algorithms by Harald Prokop. Massachusetts Institute of Technology, 1999. Demaine Erik D., Cache-Oblivious Algorithms and Data Structures. MIT Laboratory for Computer Science. MIT's Introduction to Algorithms, Lectures 22 and 23: Cache Oblivious Algorithms. [http://www.catonmat.net/blog/mit-introduction-to-algorithmspart-fourteen/]. Н.Новгород, 2011 г. Cache-oblivious algorithms 21 из 21