SlideShare a Scribd company logo
1 of 29
DevLabs

Достижима ли в C++
эффективность языка
«среднего уровня»?

© Luxoft Training 2013

Алексей Петров

education@luxoft.com
1
DevLabs
Достижима ли в C++ эффективность
языка «среднего уровня»?

© Luxoft Training 2013

Алексей Петров

2
© Luxoft Training 2013

Введение

3
Разрешите представиться



Алексей Петров — тренер и консультант, экспертпрактик в области информационного обеспечения
автоматизированных систем, архитектуры и
разработки программного обеспечения на языках
высокого уровня:
 1998 — первая программа на C++
 2009 — первый тренинг по C++
 2012 — начало сотрудничества с Luxoft Training

© Luxoft Training 2013

и НИУ МГТУ им. Н.Э. Баумана

4
О чем пойдет речь?
C++ сегодня. Соображения эффективности



Кэш-память в архитектуре ЭВМ: зачем и что делать?



Пример оптимизации кода по производительности


© Luxoft Training 2013



Основные направления оптимизации исходного кода

5
Неформальное введение. C++ сегодня



Актуальное состояние:
 Наработанная десятилетиями мощная кодовая база —
требует решения «сопровождать или переписывать»

 Поддержка C++ нескольких парадигм программирования
 Активное использование языков C / C++ в практике
программирования высокопроизводительных приложений

 Неослабевающий интерес индустрии и популярность языка
среди разработчиков — 3 – 4-е место в TIOBE Index c 2001 г.

© Luxoft Training 2013



Перспективы:
 Предсказуемое поступательное развитие языка —
стандарты C++11 / C++14 / C++17
 Ожидаемое внедрение полноценных средств поддержки
параллельных вычислений, работы с дисковыми, сетевыми
ресурсами и т.д.
6
Соображения эффективности



C++ — компилируемый язык:
 сохранивший эффективность своего C-подмножества:
 более эффективный, чем языки с промежуточной
трансляцией и интерпретируемые языки.

В активе C++ — множество оптимизирующих
компиляторов для основных программноаппаратных платформ:
 GCC: g++;
 Intel® Composer XE Suites: Intel® C++ Compiler и др.


© Luxoft Training 2013



Язык и инструментальные средства позволяют
писать код эффективно.

7
© Luxoft Training 2013

Кэш-память процессора
в архитектуре… и в C++

8
Кэш-память в архитектуре
современных ЭВМ: зачем?



Проблема:
 многократное отставание системной
шины [и модулей оперативной памяти
(DRAM)] от ядра ЦП по внутренней
частоте; простой ЦП.



Решение:
 включение в архитектуру небольших
модулей сверхоперативной памяти
(SRAM), полностью контролируемой
ЦП (не пользователем и ОС!).

© Luxoft Training 2013



Условия эффективности:
 локальность данных и кода в
пространстве-времени.

 Схема организации кэш-памяти:
 см. рис.
9
Кэш-память в архитектуре
современных ЭВМ: что делать?



Обеспечивать локальность данных и кода в
пространстве и времени:
 совместно хранить совместно используемые данные или код;
 не нарушать эмпирические правила написания эффективного
исходного кода.

© Luxoft Training 2013



Обеспечивать эффективность загрузки кэшпамяти данных и кода:
 полагаться на оптимизирующие возможности компилятора;
 помогать компилятору в процессе написания кода.




Знать основы организации аппаратного обеспечения.
Экспериментировать!
10
Пример: постановка задачи





Задача. Рассчитать сумму
столбцов заданной
целочисленной матрицы.
Оптимизировать
найденное решение с
точки зрения загрузки кэшпамяти данных.

Найти:

Варианты решения:

❶
© Luxoft Training 2013

Дано:

❷
или

11
Пример: порядок анализа вариантов
Размерность задачи:
 набор данных: 28 x 28 (216 элементов, 218 байт);
 количество тестов: 100;
 выбираемое время: минимальное.



Инфраструктура тестирования:
 x86: Intel® Core™ i5 460M, 2533 МГц, L1d: 2 x 32 Кб;
 x86-64: AMD® E-450, 1650 МГц, L1d: 2 x 32 Кб / ядро;
 ОС: Ubuntu Linux 12.04 LTS; компилятор: GCC 4.8.x.



Порядок обеспечения независимости тестов —
2-фазная программная инвалидация памяти L1d:
 последовательная запись массива (106 элементов, ≈222 байт);
 рандомизированная модификация элементов.

© Luxoft Training 2013



12
© Luxoft Training 2013

Пример: сравнительная
эффективность вариантов

13
Пример: результаты оптимизации



Время решения задачи за счет оптимизации обхода
данных (без применения SSE-расширений)
снижается в 2 – 3 раза:
 для ЦП Intel x86: от 1,5 до 2,2 раза;
 для ЦП AMD x86-64: от 1,8 до 3,8 раза.



При компиляции с флагами -О0, -O1 результат
характеризуется высокой повторяемостью на ЦП с
выбранной архитектурой (Intel x86 / AMD x86-64):
 относительный рост эффективности колеблется в пределах
20 – 25%%.

© Luxoft Training 2013

 Применение векторных SIMD-инструкций из наборов
команд SSE, SSE2, SSE3 позволяет улучшить
полученный результат еще на 15 – 20%%.
14
Почему оптимизация работы с кэш-памятью
того стоит?



Несложная трансформация вычислительноемких
фрагментов кода позволяет добиться серьезного
роста скорости выполнения.
 разбиение на квадраты (англ. square blocking) и пр.



Причина — высокая «стоимость» кэш-промахов:
 на рис. — оценки для одного из ЦП Intel.

© Luxoft Training 2013

ЦП @ 3 ГГц:
1 такт ≈ 0,33 нс → 10 см

15
Преимущества встроенного замера
времени. Реализация класса-таймера



Преимущества встроенного
замера:
 полный контроль над запуском и

© Luxoft Training 2013





остановом таймеров, счетчиков;
минимальные накладные расходы;
более надежные результаты;
возможность получения
результатов, не достижимых
стандартными инструментами.

Timer::Timer() : _start_time(0L), _end_time(0L),
if(!_scheduled) {
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(0, &mask);

_total_time(0L), _min_time(0L) {

// attach this (NULL) process to CPU #0
_scheduled = (sched_setaffinity((pid_t)NULL, sizeof(mask), &mask) == 0);
}

}
16
© Luxoft Training 2013

Что еще можно оптимизировать?

17
Основные направления оптимизации



Предсказание переходов:
 устранение ветвлений;
 развертывание (линеаризация) циклов;
 встраивание функций (методов) и др.



Критические секции:
 устранение цепочек зависимости для внеочередного
исполнения инструкций;

 использование поразрядных операций, INC (++), DEC (--),
векторизация (SIMD) и т.д.
© Luxoft Training 2013



Обращение к памяти:
 выполнение потоковых операций;
 выравнивание и упаковка данных и пр.
18
Выравнивание данных



Вопрос выравнивания:
 актуален для переменных простых и составных типов;
 актуален для объектов хранения как в стеке функций, так и в
куче процесса.



Проблема: данные выровнены слабее, чем это
необходимо для эффективной загрузки в кэш-память:
 длина линии L1d в современных ЦП — 64 байта.

 Решение:
 принудительное выравнивание: GCC-атрибут aligned в
© Luxoft Training 2013

определении типа или объекта данных и пр.
// выравнивание, регулируемое на уровне объекта
uint64_t qwd __attribute((aligned(64)));
// выравнивание, регулируемое на уровне типа
typedef int __attribute((aligned(128))) al128int_t;
al128int_t aln;
19
Упаковка переменных составных типов



Вопрос упаковки данных:
 характерен для структур (struct) и классов (class);
 обусловлен наличием у элементов структур (атрибутов
классов) индивидуальных характеристик выравнивания.



Проблема: смежные (перечисленные подряд, в том
числе на разных уровнях иерархии наследования)
элементы физически не «примыкают» друг к другу.

 Причины:

Потери: 4 байта из 32
(13%)

 архитектура ЦП (напр., x86
© Luxoft Training 2013

или x86-64);

 оптимизирующие действия
компилятора;

 выбранный программистом

typedef struct {
// для x86
int
id;
// 4 байта
char
name[15]; // 15 байт
double
amount;
// 8 байт
bool
active;
// 1 байт
} account;
// 28 байт (не 32 байта!)

порядок следования элементов.

20
Реорганизация структур данных



Направления:
 декомпозиция типов данных на более мелкие, которые при





Желательно:
 переносить наиболее востребованные элементы структуры

© Luxoft Training 2013





решении задачи используются полностью либо не
используются вообще;
устранение лакун, обусловленных характеристиками
выравнивания типов их элементов.

(класса) к началу;
обходить структуру в порядке определения элементов, если
иное не требуется задачей или прочими обстоятельствами.

Недостатки:
 снижение удобства чтения и сопровождения кода;
 риск размещения совместно используемых элементов на
разных линиях кэш-памяти.
21
Устранение ветвлений





Проблема:
 статистическое смещение условия в ложную сторону;
 нелинейное исполнение кода;
 загрязнение кэш-памяти L1i неиспользуемым кодом;
 трудности с предсказанием переходов.
Желательно:
 изымать реже исполняемый код с основного вычислительного

© Luxoft Training 2013



пути;
реорганизовать блоки так, чтобы в заголовке операторов
фигурировала проверка на более вероятный исход, а среди
операндов логической операции первыми следовали более
предсказуемые, для && — ложные, для || — истинные.

 Альтернативные решения:
 использование функции __builtin_expect и др.
22
Встраивание функций и методов



Преимущества:
 способность компилятора оптимизировать бóльшие кодовые
фрагменты;

 порождаемый код способен лучше задействовать
конвейерную микроархитектуру ЦП.



Недостатки:
 увеличение объема кода и бóльшая нагрузка на кэш-память
команд всех уровней (L1i, L2i, …);

 возможное общее снижение производительности.
© Luxoft Training 2013



Желательно:
 всегда встраивать функции, вызываемые однократно;
 избегать встраивания функций, многократно вызываемых из
разных точек программы.
23
Выводы

 Язык C++ не уступает в эффективности
«родительскому» языку C

 Грамматика современных диалектов C++ и ее
расширения переносимыми компиляторами (напр.
GCC) позволяют выражать тонкие аспекты работы с
памятью на всех уровнях

© Luxoft Training 2013

 Правильное использование прагматики языка
позволяет добиться серьезной оптимизации кода, на
которую самостоятельно не способны современные
компиляторы (иногда ограниченные в действиях
стандартом на язык программирования)

24
Дополнительные материалы и информация
Автор выражает благодарность за участие в подготовке материалов
г-же Эльвире Джураевой (кафедра «Системы обработки
информации и управления», Московский государственный
технический университет им. Н.Э. Баумана).
При подготовке презентации использовались:
1. AMD E-Series E-450 specifications. URL: http://www.cpuworld.com/CPUs/Bobcat/AMD-E%20Series%20E-450.html

© Luxoft Training 2013

2. Intel® Developer Zone: Intel® Composer XE Suites. URL:
http://software.intel.com/ru-ru/intel-composer-xe
3. Standard C++: Current Status. URL: http://isocpp.org/std/status
4. TIOBE Index for December 2013. URL:
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
25
© Luxoft Training 2013

Рекомендуемая литература
1. Drepper, U. What Every Programmer Should Know About Memory
(Nov. 2007). — Имеется русский перевод: http://ruslinux.net/lib.php?name=/MyLDP/hard/memory/memory.html
2. Fog, A. Optimizing Software in C++: An Optimization Guide for
Windows, Linux and Mac platforms (Oct. 2013). URL:
http://www.agner.org/optimize/optimizing_cpp.pdf
3. Goedecker, S., Hoisie, A. Performance Optimization of Numerically
Intensive Codes (SIAM, 2001).
4. Intel® 64 and IA-32 Architectures Optimization Reference Manual
(July 2013). URL:
http://www.intel.com/content/dam/www/public/us/en/documents/manu
als/64-ia-32-architectures-optimization-manual.pdf
5. Wise, D.S., Frens, J.D. Auto-Blocking Matrix-Multiplication or Tracking
BLAS3 Performance from Source Code. In Proc. 1997 ACM Symp. on
Principles and Practice of Parallel Programming, SIGPLAN Not. 32, 7
(July 1997), 206-216.
26
© Luxoft Training 2013

Дополнительные материалы и информация

27
Благодарю за внимание!

© Luxoft Training 2013

Вопросы?

28
Информационные ресурсы Luxoft Training

Внутренние ресурсы
Расписание, ку
рсы, тренеры IntHR

Luxtown

Условия
обучения, л
Luxtown
огистика, ко
нтакты

Информация об учебном центре
www.luxoft-training.ru/about

Расписание
www.luxoft-training.ru/timetable

Каталог курсов
www.luxoft-training.ru/training/catalog_directions

Контакты
© Luxoft Training 2013

www.luxoft-training.ru/contacts

www.facebook.com/TrainingCenterLuxoft

29

More Related Content

What's hot

Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...corehard_by
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelMikhail Kurnosov
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыAlexey Paznikov
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
О.В.Сухорослов "MapReduce"
О.В.Сухорослов "MapReduce"О.В.Сухорослов "MapReduce"
О.В.Сухорослов "MapReduce"Yandex
 
По ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsПо ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsSergey Schetinin
 
Введение в Deep Learning
Введение в Deep LearningВведение в Deep Learning
Введение в Deep LearningGrigory Sapunov
 
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"Yandex
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверPlatonov Sergey
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыYandex
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.Igor Shkulipa
 
Software craftsmanship 15 online: Reliability and Resiliency
Software craftsmanship 15 online: Reliability and ResiliencySoftware craftsmanship 15 online: Reliability and Resiliency
Software craftsmanship 15 online: Reliability and ResiliencyPavel Veinik
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Stfalcon Meetups
 
Программирование на медиапроцессорах Philips Nexperia
Программирование на медиапроцессорах Philips NexperiaПрограммирование на медиапроцессорах Philips Nexperia
Программирование на медиапроцессорах Philips NexperiaMSU GML VideoGroup
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.Igor Shkulipa
 
C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.Igor Shkulipa
 
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETDev2Dev
 
C:\fakepath\lopc_midlet
C:\fakepath\lopc_midletC:\fakepath\lopc_midlet
C:\fakepath\lopc_midletstaticboy44
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммыPlatonov Sergey
 

What's hot (20)

Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
О.В.Сухорослов "MapReduce"
О.В.Сухорослов "MapReduce"О.В.Сухорослов "MapReduce"
О.В.Сухорослов "MapReduce"
 
Java: вчера, сегодня, завтра
Java: вчера, сегодня, завтраJava: вчера, сегодня, завтра
Java: вчера, сегодня, завтра
 
По ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsПо ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocols
 
Введение в Deep Learning
Введение в Deep LearningВведение в Deep Learning
Введение в Deep Learning
 
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-сервер
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммы
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
Software craftsmanship 15 online: Reliability and Resiliency
Software craftsmanship 15 online: Reliability and ResiliencySoftware craftsmanship 15 online: Reliability and Resiliency
Software craftsmanship 15 online: Reliability and Resiliency
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
 
Программирование на медиапроцессорах Philips Nexperia
Программирование на медиапроцессорах Philips NexperiaПрограммирование на медиапроцессорах Philips Nexperia
Программирование на медиапроцессорах Philips Nexperia
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
 
C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.
 
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
 
C:\fakepath\lopc_midlet
C:\fakepath\lopc_midletC:\fakepath\lopc_midlet
C:\fakepath\lopc_midlet
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммы
 

Similar to Soft labs. достижима ли в c++ эффективность языка среднего уровня

DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...Alex V. Petrov
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2Technopark
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаTatyanazaxarova
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковCodeFest
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)Andrey Gordienkov
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAndrey Gordienkov
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernelsDenis Efremov
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
 
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...oleg gubanov
 
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....HOWWEDOIT
 
XP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architectureXP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architectureAnton Katkov
 
Разработка ресурсоемких приложений в среде Visual C++
Разработка ресурсоемких приложений в среде Visual C++Разработка ресурсоемких приложений в среде Visual C++
Разработка ресурсоемких приложений в среде Visual C++Tatyanazaxarova
 
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryИнтервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryTatyanazaxarova
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5Dima Dzuba
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один goBadoo Development
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийMedia Gorod
 

Similar to Soft labs. достижима ли в c++ эффективность языка среднего уровня (20)

DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кода
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design Patterns
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernels
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
 
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
 
XP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architectureXP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architecture
 
Разработка ресурсоемких приложений в среде Visual C++
Разработка ресурсоемких приложений в среде Visual C++Разработка ресурсоемких приложений в среде Visual C++
Разработка ресурсоемких приложений в среде Visual C++
 
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryИнтервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5
 
пр 15.docx
пр 15.docxпр 15.docx
пр 15.docx
 
прак 15.docx
прак 15.docxпрак 15.docx
прак 15.docx
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложений
 

More from LuxoftTraining

Адаптивный дом
Адаптивный домАдаптивный дом
Адаптивный домLuxoftTraining
 
Basic networking course
Basic networking courseBasic networking course
Basic networking courseLuxoftTraining
 
Лучшие практики исполнения проекта в соответствии с методологией IBM Rational
Лучшие практики исполнения проекта в соответствии с методологией IBM RationalЛучшие практики исполнения проекта в соответствии с методологией IBM Rational
Лучшие практики исполнения проекта в соответствии с методологией IBM RationalLuxoftTraining
 
Gobov denys (it arena 2015)
Gobov denys (it arena 2015)Gobov denys (it arena 2015)
Gobov denys (it arena 2015)LuxoftTraining
 
Remigiusz dudek exploratorytests_testwarez2014
Remigiusz dudek exploratorytests_testwarez2014Remigiusz dudek exploratorytests_testwarez2014
Remigiusz dudek exploratorytests_testwarez2014LuxoftTraining
 
От бизнес-систем к информационным системам: переход шаг за шагом
От бизнес-систем к информационным системам: переход шаг за шагомОт бизнес-систем к информационным системам: переход шаг за шагом
От бизнес-систем к информационным системам: переход шаг за шагомLuxoftTraining
 
Kumskov it arena-lviv-2014-10-03
Kumskov it arena-lviv-2014-10-03Kumskov it arena-lviv-2014-10-03
Kumskov it arena-lviv-2014-10-03LuxoftTraining
 
Рекомендации по проведению экспертной оценки Lt
Рекомендации по проведению экспертной оценки LtРекомендации по проведению экспертной оценки Lt
Рекомендации по проведению экспертной оценки LtLuxoftTraining
 
Awinning culture33rddegree
Awinning culture33rddegreeAwinning culture33rddegree
Awinning culture33rddegreeLuxoftTraining
 
Awinning culture33rddegree
Awinning culture33rddegreeAwinning culture33rddegree
Awinning culture33rddegreeLuxoftTraining
 
Waterfall revisited: практические метрики тестирования
Waterfall revisited: практические метрики тестированияWaterfall revisited: практические метрики тестирования
Waterfall revisited: практические метрики тестированияLuxoftTraining
 
Веб-служба на базе Workflow foundation
Веб-служба на базе Workflow foundationВеб-служба на базе Workflow foundation
Веб-служба на базе Workflow foundationLuxoftTraining
 
Презентация доклада Лавриненко
Презентация доклада ЛавриненкоПрезентация доклада Лавриненко
Презентация доклада ЛавриненкоLuxoftTraining
 
Secr презентация дружинина
Secr презентация дружининаSecr презентация дружинина
Secr презентация дружининаLuxoftTraining
 
Secr презентация гардиенков
Secr презентация гардиенковSecr презентация гардиенков
Secr презентация гардиенковLuxoftTraining
 
Опыт Объектно Ориентированного подхода в Бизнес-Анализе
Опыт Объектно Ориентированного подхода в Бизнес-АнализеОпыт Объектно Ориентированного подхода в Бизнес-Анализе
Опыт Объектно Ориентированного подхода в Бизнес-АнализеLuxoftTraining
 
Концепция построения процесса тестирования в Agile проектах: 3+1
Концепция построения процесса тестирования в Agile проектах: 3+1Концепция построения процесса тестирования в Agile проектах: 3+1
Концепция построения процесса тестирования в Agile проектах: 3+1LuxoftTraining
 

More from LuxoftTraining (20)

Адаптивный дом
Адаптивный домАдаптивный дом
Адаптивный дом
 
Basic networking course
Basic networking courseBasic networking course
Basic networking course
 
Take a sip of sip
Take a sip of sipTake a sip of sip
Take a sip of sip
 
Лучшие практики исполнения проекта в соответствии с методологией IBM Rational
Лучшие практики исполнения проекта в соответствии с методологией IBM RationalЛучшие практики исполнения проекта в соответствии с методологией IBM Rational
Лучшие практики исполнения проекта в соответствии с методологией IBM Rational
 
Gobov denys (it arena 2015)
Gobov denys (it arena 2015)Gobov denys (it arena 2015)
Gobov denys (it arena 2015)
 
Remigiusz dudek exploratorytests_testwarez2014
Remigiusz dudek exploratorytests_testwarez2014Remigiusz dudek exploratorytests_testwarez2014
Remigiusz dudek exploratorytests_testwarez2014
 
От бизнес-систем к информационным системам: переход шаг за шагом
От бизнес-систем к информационным системам: переход шаг за шагомОт бизнес-систем к информационным системам: переход шаг за шагом
От бизнес-систем к информационным системам: переход шаг за шагом
 
Kumskov it arena-lviv-2014-10-03
Kumskov it arena-lviv-2014-10-03Kumskov it arena-lviv-2014-10-03
Kumskov it arena-lviv-2014-10-03
 
Рекомендации по проведению экспертной оценки Lt
Рекомендации по проведению экспертной оценки LtРекомендации по проведению экспертной оценки Lt
Рекомендации по проведению экспертной оценки Lt
 
Awinning culture33rddegree
Awinning culture33rddegreeAwinning culture33rddegree
Awinning culture33rddegree
 
Awinning culture33rddegree
Awinning culture33rddegreeAwinning culture33rddegree
Awinning culture33rddegree
 
Waterfall revisited: практические метрики тестирования
Waterfall revisited: практические метрики тестированияWaterfall revisited: практические метрики тестирования
Waterfall revisited: практические метрики тестирования
 
Веб-служба на базе Workflow foundation
Веб-служба на базе Workflow foundationВеб-служба на базе Workflow foundation
Веб-служба на базе Workflow foundation
 
Vs vs. charles
Vs vs. charlesVs vs. charles
Vs vs. charles
 
Презентация доклада Лавриненко
Презентация доклада ЛавриненкоПрезентация доклада Лавриненко
Презентация доклада Лавриненко
 
Secr презентация дружинина
Secr презентация дружининаSecr презентация дружинина
Secr презентация дружинина
 
Secr презентация гардиенков
Secr презентация гардиенковSecr презентация гардиенков
Secr презентация гардиенков
 
Опыт Объектно Ориентированного подхода в Бизнес-Анализе
Опыт Объектно Ориентированного подхода в Бизнес-АнализеОпыт Объектно Ориентированного подхода в Бизнес-Анализе
Опыт Объектно Ориентированного подхода в Бизнес-Анализе
 
Концепция построения процесса тестирования в Agile проектах: 3+1
Концепция построения процесса тестирования в Agile проектах: 3+1Концепция построения процесса тестирования в Agile проектах: 3+1
Концепция построения процесса тестирования в Agile проектах: 3+1
 
C# Deep Dive
C# Deep DiveC# Deep Dive
C# Deep Dive
 

Soft labs. достижима ли в c++ эффективность языка среднего уровня

  • 1. DevLabs Достижима ли в C++ эффективность языка «среднего уровня»? © Luxoft Training 2013 Алексей Петров education@luxoft.com 1
  • 2. DevLabs Достижима ли в C++ эффективность языка «среднего уровня»? © Luxoft Training 2013 Алексей Петров 2
  • 3. © Luxoft Training 2013 Введение 3
  • 4. Разрешите представиться  Алексей Петров — тренер и консультант, экспертпрактик в области информационного обеспечения автоматизированных систем, архитектуры и разработки программного обеспечения на языках высокого уровня:  1998 — первая программа на C++  2009 — первый тренинг по C++  2012 — начало сотрудничества с Luxoft Training © Luxoft Training 2013 и НИУ МГТУ им. Н.Э. Баумана 4
  • 5. О чем пойдет речь? C++ сегодня. Соображения эффективности  Кэш-память в архитектуре ЭВМ: зачем и что делать?  Пример оптимизации кода по производительности  © Luxoft Training 2013  Основные направления оптимизации исходного кода 5
  • 6. Неформальное введение. C++ сегодня  Актуальное состояние:  Наработанная десятилетиями мощная кодовая база — требует решения «сопровождать или переписывать»  Поддержка C++ нескольких парадигм программирования  Активное использование языков C / C++ в практике программирования высокопроизводительных приложений  Неослабевающий интерес индустрии и популярность языка среди разработчиков — 3 – 4-е место в TIOBE Index c 2001 г. © Luxoft Training 2013  Перспективы:  Предсказуемое поступательное развитие языка — стандарты C++11 / C++14 / C++17  Ожидаемое внедрение полноценных средств поддержки параллельных вычислений, работы с дисковыми, сетевыми ресурсами и т.д. 6
  • 7. Соображения эффективности  C++ — компилируемый язык:  сохранивший эффективность своего C-подмножества:  более эффективный, чем языки с промежуточной трансляцией и интерпретируемые языки. В активе C++ — множество оптимизирующих компиляторов для основных программноаппаратных платформ:  GCC: g++;  Intel® Composer XE Suites: Intel® C++ Compiler и др.  © Luxoft Training 2013  Язык и инструментальные средства позволяют писать код эффективно. 7
  • 8. © Luxoft Training 2013 Кэш-память процессора в архитектуре… и в C++ 8
  • 9. Кэш-память в архитектуре современных ЭВМ: зачем?  Проблема:  многократное отставание системной шины [и модулей оперативной памяти (DRAM)] от ядра ЦП по внутренней частоте; простой ЦП.  Решение:  включение в архитектуру небольших модулей сверхоперативной памяти (SRAM), полностью контролируемой ЦП (не пользователем и ОС!). © Luxoft Training 2013  Условия эффективности:  локальность данных и кода в пространстве-времени.  Схема организации кэш-памяти:  см. рис. 9
  • 10. Кэш-память в архитектуре современных ЭВМ: что делать?  Обеспечивать локальность данных и кода в пространстве и времени:  совместно хранить совместно используемые данные или код;  не нарушать эмпирические правила написания эффективного исходного кода. © Luxoft Training 2013  Обеспечивать эффективность загрузки кэшпамяти данных и кода:  полагаться на оптимизирующие возможности компилятора;  помогать компилятору в процессе написания кода.   Знать основы организации аппаратного обеспечения. Экспериментировать! 10
  • 11. Пример: постановка задачи   Задача. Рассчитать сумму столбцов заданной целочисленной матрицы. Оптимизировать найденное решение с точки зрения загрузки кэшпамяти данных. Найти: Варианты решения: ❶ © Luxoft Training 2013 Дано: ❷ или 11
  • 12. Пример: порядок анализа вариантов Размерность задачи:  набор данных: 28 x 28 (216 элементов, 218 байт);  количество тестов: 100;  выбираемое время: минимальное.  Инфраструктура тестирования:  x86: Intel® Core™ i5 460M, 2533 МГц, L1d: 2 x 32 Кб;  x86-64: AMD® E-450, 1650 МГц, L1d: 2 x 32 Кб / ядро;  ОС: Ubuntu Linux 12.04 LTS; компилятор: GCC 4.8.x.  Порядок обеспечения независимости тестов — 2-фазная программная инвалидация памяти L1d:  последовательная запись массива (106 элементов, ≈222 байт);  рандомизированная модификация элементов. © Luxoft Training 2013  12
  • 13. © Luxoft Training 2013 Пример: сравнительная эффективность вариантов 13
  • 14. Пример: результаты оптимизации  Время решения задачи за счет оптимизации обхода данных (без применения SSE-расширений) снижается в 2 – 3 раза:  для ЦП Intel x86: от 1,5 до 2,2 раза;  для ЦП AMD x86-64: от 1,8 до 3,8 раза.  При компиляции с флагами -О0, -O1 результат характеризуется высокой повторяемостью на ЦП с выбранной архитектурой (Intel x86 / AMD x86-64):  относительный рост эффективности колеблется в пределах 20 – 25%%. © Luxoft Training 2013  Применение векторных SIMD-инструкций из наборов команд SSE, SSE2, SSE3 позволяет улучшить полученный результат еще на 15 – 20%%. 14
  • 15. Почему оптимизация работы с кэш-памятью того стоит?  Несложная трансформация вычислительноемких фрагментов кода позволяет добиться серьезного роста скорости выполнения.  разбиение на квадраты (англ. square blocking) и пр.  Причина — высокая «стоимость» кэш-промахов:  на рис. — оценки для одного из ЦП Intel. © Luxoft Training 2013 ЦП @ 3 ГГц: 1 такт ≈ 0,33 нс → 10 см 15
  • 16. Преимущества встроенного замера времени. Реализация класса-таймера  Преимущества встроенного замера:  полный контроль над запуском и © Luxoft Training 2013    остановом таймеров, счетчиков; минимальные накладные расходы; более надежные результаты; возможность получения результатов, не достижимых стандартными инструментами. Timer::Timer() : _start_time(0L), _end_time(0L), if(!_scheduled) { cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(0, &mask); _total_time(0L), _min_time(0L) { // attach this (NULL) process to CPU #0 _scheduled = (sched_setaffinity((pid_t)NULL, sizeof(mask), &mask) == 0); } } 16
  • 17. © Luxoft Training 2013 Что еще можно оптимизировать? 17
  • 18. Основные направления оптимизации  Предсказание переходов:  устранение ветвлений;  развертывание (линеаризация) циклов;  встраивание функций (методов) и др.  Критические секции:  устранение цепочек зависимости для внеочередного исполнения инструкций;  использование поразрядных операций, INC (++), DEC (--), векторизация (SIMD) и т.д. © Luxoft Training 2013  Обращение к памяти:  выполнение потоковых операций;  выравнивание и упаковка данных и пр. 18
  • 19. Выравнивание данных  Вопрос выравнивания:  актуален для переменных простых и составных типов;  актуален для объектов хранения как в стеке функций, так и в куче процесса.  Проблема: данные выровнены слабее, чем это необходимо для эффективной загрузки в кэш-память:  длина линии L1d в современных ЦП — 64 байта.  Решение:  принудительное выравнивание: GCC-атрибут aligned в © Luxoft Training 2013 определении типа или объекта данных и пр. // выравнивание, регулируемое на уровне объекта uint64_t qwd __attribute((aligned(64))); // выравнивание, регулируемое на уровне типа typedef int __attribute((aligned(128))) al128int_t; al128int_t aln; 19
  • 20. Упаковка переменных составных типов  Вопрос упаковки данных:  характерен для структур (struct) и классов (class);  обусловлен наличием у элементов структур (атрибутов классов) индивидуальных характеристик выравнивания.  Проблема: смежные (перечисленные подряд, в том числе на разных уровнях иерархии наследования) элементы физически не «примыкают» друг к другу.  Причины: Потери: 4 байта из 32 (13%)  архитектура ЦП (напр., x86 © Luxoft Training 2013 или x86-64);  оптимизирующие действия компилятора;  выбранный программистом typedef struct { // для x86 int id; // 4 байта char name[15]; // 15 байт double amount; // 8 байт bool active; // 1 байт } account; // 28 байт (не 32 байта!) порядок следования элементов. 20
  • 21. Реорганизация структур данных  Направления:  декомпозиция типов данных на более мелкие, которые при   Желательно:  переносить наиболее востребованные элементы структуры © Luxoft Training 2013   решении задачи используются полностью либо не используются вообще; устранение лакун, обусловленных характеристиками выравнивания типов их элементов. (класса) к началу; обходить структуру в порядке определения элементов, если иное не требуется задачей или прочими обстоятельствами. Недостатки:  снижение удобства чтения и сопровождения кода;  риск размещения совместно используемых элементов на разных линиях кэш-памяти. 21
  • 22. Устранение ветвлений   Проблема:  статистическое смещение условия в ложную сторону;  нелинейное исполнение кода;  загрязнение кэш-памяти L1i неиспользуемым кодом;  трудности с предсказанием переходов. Желательно:  изымать реже исполняемый код с основного вычислительного © Luxoft Training 2013  пути; реорганизовать блоки так, чтобы в заголовке операторов фигурировала проверка на более вероятный исход, а среди операндов логической операции первыми следовали более предсказуемые, для && — ложные, для || — истинные.  Альтернативные решения:  использование функции __builtin_expect и др. 22
  • 23. Встраивание функций и методов  Преимущества:  способность компилятора оптимизировать бóльшие кодовые фрагменты;  порождаемый код способен лучше задействовать конвейерную микроархитектуру ЦП.  Недостатки:  увеличение объема кода и бóльшая нагрузка на кэш-память команд всех уровней (L1i, L2i, …);  возможное общее снижение производительности. © Luxoft Training 2013  Желательно:  всегда встраивать функции, вызываемые однократно;  избегать встраивания функций, многократно вызываемых из разных точек программы. 23
  • 24. Выводы  Язык C++ не уступает в эффективности «родительскому» языку C  Грамматика современных диалектов C++ и ее расширения переносимыми компиляторами (напр. GCC) позволяют выражать тонкие аспекты работы с памятью на всех уровнях © Luxoft Training 2013  Правильное использование прагматики языка позволяет добиться серьезной оптимизации кода, на которую самостоятельно не способны современные компиляторы (иногда ограниченные в действиях стандартом на язык программирования) 24
  • 25. Дополнительные материалы и информация Автор выражает благодарность за участие в подготовке материалов г-же Эльвире Джураевой (кафедра «Системы обработки информации и управления», Московский государственный технический университет им. Н.Э. Баумана). При подготовке презентации использовались: 1. AMD E-Series E-450 specifications. URL: http://www.cpuworld.com/CPUs/Bobcat/AMD-E%20Series%20E-450.html © Luxoft Training 2013 2. Intel® Developer Zone: Intel® Composer XE Suites. URL: http://software.intel.com/ru-ru/intel-composer-xe 3. Standard C++: Current Status. URL: http://isocpp.org/std/status 4. TIOBE Index for December 2013. URL: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 25
  • 26. © Luxoft Training 2013 Рекомендуемая литература 1. Drepper, U. What Every Programmer Should Know About Memory (Nov. 2007). — Имеется русский перевод: http://ruslinux.net/lib.php?name=/MyLDP/hard/memory/memory.html 2. Fog, A. Optimizing Software in C++: An Optimization Guide for Windows, Linux and Mac platforms (Oct. 2013). URL: http://www.agner.org/optimize/optimizing_cpp.pdf 3. Goedecker, S., Hoisie, A. Performance Optimization of Numerically Intensive Codes (SIAM, 2001). 4. Intel® 64 and IA-32 Architectures Optimization Reference Manual (July 2013). URL: http://www.intel.com/content/dam/www/public/us/en/documents/manu als/64-ia-32-architectures-optimization-manual.pdf 5. Wise, D.S., Frens, J.D. Auto-Blocking Matrix-Multiplication or Tracking BLAS3 Performance from Source Code. In Proc. 1997 ACM Symp. on Principles and Practice of Parallel Programming, SIGPLAN Not. 32, 7 (July 1997), 206-216. 26
  • 27. © Luxoft Training 2013 Дополнительные материалы и информация 27
  • 28. Благодарю за внимание! © Luxoft Training 2013 Вопросы? 28
  • 29. Информационные ресурсы Luxoft Training Внутренние ресурсы Расписание, ку рсы, тренеры IntHR Luxtown Условия обучения, л Luxtown огистика, ко нтакты Информация об учебном центре www.luxoft-training.ru/about Расписание www.luxoft-training.ru/timetable Каталог курсов www.luxoft-training.ru/training/catalog_directions Контакты © Luxoft Training 2013 www.luxoft-training.ru/contacts www.facebook.com/TrainingCenterLuxoft 29

Editor's Notes

  1. Первый слайд всего курса.
  2. *Слайд опционаленДля модуля, который представляет отдельную презентацию (т.е. читается в отдельный день)
  3. *Слайд опционаленДля презентации, содержащей несколько модулей (т.е. разделитель частей презентации)
  4. *Слайд опционаленДля презентации, содержащей несколько модулей (т.е. разделитель частей презентации)
  5. *Слайд опционаленДля презентации, содержащей несколько модулей (т.е. разделитель частей презентации)