SlideShare a Scribd company logo
1 of 18
Download to read offline
Создание генератора промежуточного 
представления SSA из полиэдральной модели в 
коллекции компиляторов GNU 
Гареев Роман 
ИМКН УрФУ
Полиэдральная модель 
David Kuck 1967, Richard Karp 1978 
for(int i = 1, j = 1; 
i < N && j < M; 
i++, j++) 
{ 
S1; 
} 
{i, j | 1 <= i <= N; 
1 <= j <= M}
Полиэдральная модель 
— область итерации 
! 
— функции доступа 
! 
— аффинный план 
Sylvain Girbal, 2006
Классические оптимизации 
Cлияние циклов (англ., loop fusion) 
int i, a[100], b[100]; 
for (i = 0; i < 100; i++) 
a[i] = 1; 
for (i = 0; i < 100; i++) 
b[i] = 2; 
int i, a[100], b[100]; 
for (i = 0; i < 100; i++) 
{ 
a[i] = 1; 
b[i] = 2; 
} 
Разбиение цикла на блоки (англ,. loop tiling) 
for(i=0; i<N; ++i) 
{ 
… 
} 
for(j=0; j<N; j+=B) 
for(i=j; i<min(N, j+B); ++i) 
{ 
… 
}
Graphite 
Front End Middle End Back End 
Object code 
SSA 
INRIA, 2008
Промежуточное представление SSA 
SSA (Static Single Assignment form) 
1. a_1 = 3 
2. b_1 = 9 
3. c_1 = a_1 + b_1 
4. a_2 = b_1 + 1 
5. d_1 = a_2 + c_1 
6. return d_1
Graphite 
Front End Middle End Back End 
Object code 
SSA 
INRIA, 2008
Middle End 
Polyhedral 
representation 
CLooG 
+ 
ISL 
Graphite 
AST 
Middle End
Цели и задачи 
Цель: cоздание генератора промежуточного представления 
SSA из полиэдральной модели независимого от библиотеки 
CLooG. 
Задачи: 
1. Graphite должен стать полностью независимым от CLooG. 
2. Не должна нарушиться раскрутка (англ. bootstrapping) 
коллекции компиляторов GNU. 
3. Сохранить отсутствие регрессионных ошибок. 
4. Добавить новые тесты.
Детали реализации 
! 
• Выбор стратегии разработки. 
• Тестирование. 
• Реализация нового обхода AST. 
• Сохранение возможности использования генератора на 
основе CLooG. 
• Изменение проверки циклов на параллельность. 
• Определение параметров генерации абстрактного 
синтаксического дерева в библиотеке ISL. 
• Определение типов переменных, полученных из 
полиэдральной модели. 
github.com/gareevroman/generator/blob/master/описание_работы.txt
Количество строк кода 
Генератор, основанный на библиотеке ISL 
! 
990 строк текста 
143 строк комментариев 
169 пустых строк 
! 
Генератор, основанный на библиотеке CLooG 
! 
1725 строк текста 
187 строк комментариев 
355 пустых строк
Количество строк кода 
Количество программного кода 
! 
41,42% 
! 
Комментарии 
! 
20,6349% (15,8073%)
Сравнение производительности 
Регрессия производительности по времени выполнения 
(библиотеки ISL над библиотекой CLooG): 1.1% 
! 
! 
Регрессия производительности по времени компиляции 
(библиотеки ISL над библиотекой CLooG): 1.26%
Актуальность 
• Alpha 
• ARM 
• Atmel AVR 
• Blackfin 
• HC12 
• H8/300 
• x86 (IA-32 и x86-64) 
• IA-64 («Itanium») 
• m68k 
• Motorola 88000 
• MIPS 
• Texas Instruments MSP430 
• PA-RISC 
• PDP-11 
• PowerPC 
• R8C/M16C/M32C 
• SPU в Cell 
• System/370, System/390 
• SuperH 
• SPARC 
• VAX 
…
Использование генератора 
! 
! 
Генератор, основанный на библиотеке CLooG 
-fgraphite-code-generator=cloog 
! 
! 
Генератор, основанный на библиотеке ISL 
-fgraphite-code-generator=isl
Использование Graphite 
1. CLooG, ISL, GMP 
! 
! 
2. --with-isl=/somewhere 
--with-cloog=/somewhere 
--with-gmp=/somewhere 
! 
3. -floop-strip-mine 
-floop-block 
-floop-interchange 
-floop-nest-optimize 
-floop-parallelize-all 
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
Планы на будущее 
1. Создание новых режимов генерации 
! 
! 
! 
2. Использование новых возможностей библиотеки ISL 
! 
! 
! 
3. Исключение возможности использования генератора на 
основе CLooG. 
! 
! 
! 
4. Профилирование генератора
Спасибо за внимание!

More Related Content

What's hot

«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНСit-people
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Yauheni Akhotnikau
 
инструменты параллельного программирования
инструменты параллельного программированияинструменты параллельного программирования
инструменты параллельного программированияAlexander Petrov
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
 
2012.11.06 машинное обучение с помощью vw
2012.11.06 машинное обучение с помощью vw2012.11.06 машинное обучение с помощью vw
2012.11.06 машинное обучение с помощью vwИлья Трофимов
 
Python&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.byPython&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.byPython Meetup
 
Быстрое прототипирование алгоритмов управления
Быстрое прототипирование алгоритмов управленияБыстрое прототипирование алгоритмов управления
Быстрое прототипирование алгоритмов управленияMATLAB
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
 
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)aragozin
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
 
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графах
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графахПавел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графах
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графахYandex
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
 
Опыт разработки статического анализатора кода
Опыт разработки статического анализатора кодаОпыт разработки статического анализатора кода
Опыт разработки статического анализатора кодаAndrey Karpov
 
Введение в потоки питона
Введение в потоки питонаВведение в потоки питона
Введение в потоки питонаAndrey Niahajchyk
 
лекция №16
лекция №16лекция №16
лекция №16student_kai
 

What's hot (17)

«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
 
инструменты параллельного программирования
инструменты параллельного программированияинструменты параллельного программирования
инструменты параллельного программирования
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
2012.11.06 машинное обучение с помощью vw
2012.11.06 машинное обучение с помощью vw2012.11.06 машинное обучение с помощью vw
2012.11.06 машинное обучение с помощью vw
 
Python&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.byPython&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.by
 
Быстрое прототипирование алгоритмов управления
Быстрое прототипирование алгоритмов управленияБыстрое прототипирование алгоритмов управления
Быстрое прототипирование алгоритмов управления
 
Algo 01 part01
Algo 01 part01Algo 01 part01
Algo 01 part01
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
 
ФИЛП
ФИЛПФИЛП
ФИЛП
 
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
 
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графах
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графахПавел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графах
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графах
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализация
 
Опыт разработки статического анализатора кода
Опыт разработки статического анализатора кодаОпыт разработки статического анализатора кода
Опыт разработки статического анализатора кода
 
Введение в потоки питона
Введение в потоки питонаВведение в потоки питона
Введение в потоки питона
 
лекция №16
лекция №16лекция №16
лекция №16
 

Similar to Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдральной модели в коллекции компиляторов gnu

Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularizationIvan Krylov
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)Smolensk Computer Science Club
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilationNikita Lipsky
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Yandex
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
 
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studioчто пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studiocorehard_by
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
 
20100314 virtualization igotti_lecture06
20100314 virtualization igotti_lecture0620100314 virtualization igotti_lecture06
20100314 virtualization igotti_lecture06Computer Science Club
 
Экстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java DriverЭкстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java DriverVitebsk DSC
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2etyumentcev
 
Поговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийПоговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийAndrey Akinshin
 
Multithreading in java past and actual
Multithreading in java past and actualMultithreading in java past and actual
Multithreading in java past and actualYevgen Levik
 
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"Fwdays
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2Technopark
 
Язык параллельного программирования Intel Cilk Plus
Язык параллельного программирования Intel Cilk PlusЯзык параллельного программирования Intel Cilk Plus
Язык параллельного программирования Intel Cilk PlusMikhail Kurnosov
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
 

Similar to Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдральной модели в коллекции компиляторов gnu (20)

Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularization
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)
 
2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
 
Conflux: GPGPU .NET
Conflux: GPGPU .NETConflux: GPGPU .NET
Conflux: GPGPU .NET
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
 
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studioчто пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
20100314 virtualization igotti_lecture06
20100314 virtualization igotti_lecture0620100314 virtualization igotti_lecture06
20100314 virtualization igotti_lecture06
 
введение в Gpu
введение в Gpuвведение в Gpu
введение в Gpu
 
Экстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java DriverЭкстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java Driver
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2
 
Поговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийПоговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложений
 
Multithreading in java past and actual
Multithreading in java past and actualMultithreading in java past and actual
Multithreading in java past and actual
 
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
 
MySQL 8.0
MySQL 8.0MySQL 8.0
MySQL 8.0
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
 
Язык параллельного программирования Intel Cilk Plus
Язык параллельного программирования Intel Cilk PlusЯзык параллельного программирования Intel Cilk Plus
Язык параллельного программирования Intel Cilk Plus
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 

More from Darya Zubova

Денис Мустакимов. Презентация стипендиального проекта "Ai game"
Денис Мустакимов. Презентация стипендиального проекта "Ai game"Денис Мустакимов. Презентация стипендиального проекта "Ai game"
Денис Мустакимов. Презентация стипендиального проекта "Ai game"Darya Zubova
 
Владимир Кутовой. Проектирование интерфейсов
Владимир Кутовой. Проектирование интерфейсов Владимир Кутовой. Проектирование интерфейсов
Владимир Кутовой. Проектирование интерфейсов Darya Zubova
 
Екатерина Чаплинская. История одного тестировщика
Екатерина Чаплинская. История одного тестировщикаЕкатерина Чаплинская. История одного тестировщика
Екатерина Чаплинская. История одного тестировщикаDarya Zubova
 
Полина Зонова. Жизнь в IT с точки зрения разработчика
Полина Зонова. Жизнь в IT с точки зрения разработчикаПолина Зонова. Жизнь в IT с точки зрения разработчика
Полина Зонова. Жизнь в IT с точки зрения разработчикаDarya Zubova
 
Юлия Закс. Аналитик - кто это?
Юлия Закс. Аналитик - кто это? Юлия Закс. Аналитик - кто это?
Юлия Закс. Аналитик - кто это? Darya Zubova
 
Александр Голубев. Менеджер разработки
Александр Голубев. Менеджер разработкиАлександр Голубев. Менеджер разработки
Александр Голубев. Менеджер разработкиDarya Zubova
 
Безопасное программирование на C#
Безопасное программирование на C#Безопасное программирование на C#
Безопасное программирование на C#Darya Zubova
 
Петров, Трусов. ПО для робота
Петров, Трусов. ПО для роботаПетров, Трусов. ПО для робота
Петров, Трусов. ПО для роботаDarya Zubova
 
Королев Леонид. Распознавание прикосновений
Королев Леонид. Распознавание прикосновенийКоролев Леонид. Распознавание прикосновений
Королев Леонид. Распознавание прикосновенийDarya Zubova
 
Лихошерстов Валерий
Лихошерстов Валерий Лихошерстов Валерий
Лихошерстов Валерий Darya Zubova
 
Борзунов Александр, Cpmoptimize
Борзунов Александр, CpmoptimizeБорзунов Александр, Cpmoptimize
Борзунов Александр, CpmoptimizeDarya Zubova
 
Грант за организацию внеучебной деятельности 2014
Грант за организацию внеучебной деятельности 2014Грант за организацию внеучебной деятельности 2014
Грант за организацию внеучебной деятельности 2014Darya Zubova
 
Стипендиальный конкурс 2014
Стипендиальный конкурс 2014Стипендиальный конкурс 2014
Стипендиальный конкурс 2014Darya Zubova
 
Грант за преподавание 2014
Грант за преподавание 2014Грант за преподавание 2014
Грант за преподавание 2014Darya Zubova
 
Стипендиальный конкурс
Стипендиальный конкурсСтипендиальный конкурс
Стипендиальный конкурсDarya Zubova
 
стипендиальный конкурс
стипендиальный конкурсстипендиальный конкурс
стипендиальный конкурсDarya Zubova
 
гранты преподавателям
гранты преподавателямгранты преподавателям
гранты преподавателямDarya Zubova
 

More from Darya Zubova (17)

Денис Мустакимов. Презентация стипендиального проекта "Ai game"
Денис Мустакимов. Презентация стипендиального проекта "Ai game"Денис Мустакимов. Презентация стипендиального проекта "Ai game"
Денис Мустакимов. Презентация стипендиального проекта "Ai game"
 
Владимир Кутовой. Проектирование интерфейсов
Владимир Кутовой. Проектирование интерфейсов Владимир Кутовой. Проектирование интерфейсов
Владимир Кутовой. Проектирование интерфейсов
 
Екатерина Чаплинская. История одного тестировщика
Екатерина Чаплинская. История одного тестировщикаЕкатерина Чаплинская. История одного тестировщика
Екатерина Чаплинская. История одного тестировщика
 
Полина Зонова. Жизнь в IT с точки зрения разработчика
Полина Зонова. Жизнь в IT с точки зрения разработчикаПолина Зонова. Жизнь в IT с точки зрения разработчика
Полина Зонова. Жизнь в IT с точки зрения разработчика
 
Юлия Закс. Аналитик - кто это?
Юлия Закс. Аналитик - кто это? Юлия Закс. Аналитик - кто это?
Юлия Закс. Аналитик - кто это?
 
Александр Голубев. Менеджер разработки
Александр Голубев. Менеджер разработкиАлександр Голубев. Менеджер разработки
Александр Голубев. Менеджер разработки
 
Безопасное программирование на C#
Безопасное программирование на C#Безопасное программирование на C#
Безопасное программирование на C#
 
Петров, Трусов. ПО для робота
Петров, Трусов. ПО для роботаПетров, Трусов. ПО для робота
Петров, Трусов. ПО для робота
 
Королев Леонид. Распознавание прикосновений
Королев Леонид. Распознавание прикосновенийКоролев Леонид. Распознавание прикосновений
Королев Леонид. Распознавание прикосновений
 
Лихошерстов Валерий
Лихошерстов Валерий Лихошерстов Валерий
Лихошерстов Валерий
 
Борзунов Александр, Cpmoptimize
Борзунов Александр, CpmoptimizeБорзунов Александр, Cpmoptimize
Борзунов Александр, Cpmoptimize
 
Грант за организацию внеучебной деятельности 2014
Грант за организацию внеучебной деятельности 2014Грант за организацию внеучебной деятельности 2014
Грант за организацию внеучебной деятельности 2014
 
Стипендиальный конкурс 2014
Стипендиальный конкурс 2014Стипендиальный конкурс 2014
Стипендиальный конкурс 2014
 
Грант за преподавание 2014
Грант за преподавание 2014Грант за преподавание 2014
Грант за преподавание 2014
 
Стипендиальный конкурс
Стипендиальный конкурсСтипендиальный конкурс
Стипендиальный конкурс
 
стипендиальный конкурс
стипендиальный конкурсстипендиальный конкурс
стипендиальный конкурс
 
гранты преподавателям
гранты преподавателямгранты преподавателям
гранты преподавателям
 

Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдральной модели в коллекции компиляторов gnu

  • 1. Создание генератора промежуточного представления SSA из полиэдральной модели в коллекции компиляторов GNU Гареев Роман ИМКН УрФУ
  • 2. Полиэдральная модель David Kuck 1967, Richard Karp 1978 for(int i = 1, j = 1; i < N && j < M; i++, j++) { S1; } {i, j | 1 <= i <= N; 1 <= j <= M}
  • 3. Полиэдральная модель — область итерации ! — функции доступа ! — аффинный план Sylvain Girbal, 2006
  • 4. Классические оптимизации Cлияние циклов (англ., loop fusion) int i, a[100], b[100]; for (i = 0; i < 100; i++) a[i] = 1; for (i = 0; i < 100; i++) b[i] = 2; int i, a[100], b[100]; for (i = 0; i < 100; i++) { a[i] = 1; b[i] = 2; } Разбиение цикла на блоки (англ,. loop tiling) for(i=0; i<N; ++i) { … } for(j=0; j<N; j+=B) for(i=j; i<min(N, j+B); ++i) { … }
  • 5. Graphite Front End Middle End Back End Object code SSA INRIA, 2008
  • 6. Промежуточное представление SSA SSA (Static Single Assignment form) 1. a_1 = 3 2. b_1 = 9 3. c_1 = a_1 + b_1 4. a_2 = b_1 + 1 5. d_1 = a_2 + c_1 6. return d_1
  • 7. Graphite Front End Middle End Back End Object code SSA INRIA, 2008
  • 8. Middle End Polyhedral representation CLooG + ISL Graphite AST Middle End
  • 9. Цели и задачи Цель: cоздание генератора промежуточного представления SSA из полиэдральной модели независимого от библиотеки CLooG. Задачи: 1. Graphite должен стать полностью независимым от CLooG. 2. Не должна нарушиться раскрутка (англ. bootstrapping) коллекции компиляторов GNU. 3. Сохранить отсутствие регрессионных ошибок. 4. Добавить новые тесты.
  • 10. Детали реализации ! • Выбор стратегии разработки. • Тестирование. • Реализация нового обхода AST. • Сохранение возможности использования генератора на основе CLooG. • Изменение проверки циклов на параллельность. • Определение параметров генерации абстрактного синтаксического дерева в библиотеке ISL. • Определение типов переменных, полученных из полиэдральной модели. github.com/gareevroman/generator/blob/master/описание_работы.txt
  • 11. Количество строк кода Генератор, основанный на библиотеке ISL ! 990 строк текста 143 строк комментариев 169 пустых строк ! Генератор, основанный на библиотеке CLooG ! 1725 строк текста 187 строк комментариев 355 пустых строк
  • 12. Количество строк кода Количество программного кода ! 41,42% ! Комментарии ! 20,6349% (15,8073%)
  • 13. Сравнение производительности Регрессия производительности по времени выполнения (библиотеки ISL над библиотекой CLooG): 1.1% ! ! Регрессия производительности по времени компиляции (библиотеки ISL над библиотекой CLooG): 1.26%
  • 14. Актуальность • Alpha • ARM • Atmel AVR • Blackfin • HC12 • H8/300 • x86 (IA-32 и x86-64) • IA-64 («Itanium») • m68k • Motorola 88000 • MIPS • Texas Instruments MSP430 • PA-RISC • PDP-11 • PowerPC • R8C/M16C/M32C • SPU в Cell • System/370, System/390 • SuperH • SPARC • VAX …
  • 15. Использование генератора ! ! Генератор, основанный на библиотеке CLooG -fgraphite-code-generator=cloog ! ! Генератор, основанный на библиотеке ISL -fgraphite-code-generator=isl
  • 16. Использование Graphite 1. CLooG, ISL, GMP ! ! 2. --with-isl=/somewhere --with-cloog=/somewhere --with-gmp=/somewhere ! 3. -floop-strip-mine -floop-block -floop-interchange -floop-nest-optimize -floop-parallelize-all https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
  • 17. Планы на будущее 1. Создание новых режимов генерации ! ! ! 2. Использование новых возможностей библиотеки ISL ! ! ! 3. Исключение возможности использования генератора на основе CLooG. ! ! ! 4. Профилирование генератора