С.Ю. Саранча, Д.И. Кинзин, С.А. Левандовский, А.Б. Моллер
ФГБОУ ВПО «Магнитогорский государственный технический университет им. Г.И.Носова»
ПУТИ ОПТИМИЗАЦИИ И ПЕРСПЕКТИВЫ РАЗВИТИЯ
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ МОДЕЛИРОВАНИЯ ТЕХНОЛОГИЧЕСКИХ ПРОЦЕССОВ
Моделирование технологических процессов в промышленности на ЭВМ, в том числе и в металлургии, с каждым годом получает всё большее распространение - это обусловлено в первую очередь законами Мура и Хауса, а именно, резким ростом вычислительной мощности ЭВМ, что сделало процесс технического моделирования более доступным и быстрым. В свою очередь в научных кругах до сих пор используются классические приемы и языки программирования, популярные в 90-х годах прошлого века, которые в силу своего устаревания не могут реализовать всю вычислительную производительность ЭВМ. На сегодняшний день выбор языка и методов программирования является критически важной задачей, решение которой может стать существенным резервом в борьбе за сокращение времени вычислений в научном окружении.
Ключевые слова: проблемы моделирования, скорость вычислений, MIPS, кросс-платформенность, унификация ПО, х86, SIMD, MMX, SSE, AVX, OpenCL, JAVA, ассемблер, многопоточность, многоядерность.
Ранее Кинзиным Д.И. [1, 2] была поставлена задача оптимизации формы вытяжных калибров по критерию максимума вытяжной способности и разработан алгоритм ее численного решения, который был реализован в компьютерной программе «OptimPass 2013» (рис. 1). Блок-схема программы показана на рис. 2.
Программа была написана в языковой среде разработки Delphi под управлением операционной системы Windows 7.
■ OptimPass 2013 Windows Файл Помощь
Заготовка ввод данных Клеть 1 [поиск оптима) Клеть 2 ввод данных Визуализация
Профиль 1 ▼ 1- DR диаметр гю врезу мм Нет кантовки ▼ Калибр 1 ▼ диаметр мм В2
В1 ширина мн В2 ширина мм Параметры Векторов 50 h высота мм El мм В2 мм R2 мм R1 мм Н мм
Ш радиус мн н бысогз мм Нет кантовки ▼ Готово Коэф. трен. 0,3 Z 1 StepX 0,5 22 1 StepY 0,5 Всв автом, Всв2 Введите SZ / - Ri
Заготовка Е 0,005 Точек 6 Ь ширина профил мм л
Ь = введите В1 = введите Готово Видн-е данные Готово х
В2 = введите И = введите Н = введите Кантовка заготовки Шаг 0 Раигинй 0 [ Просмотр результатов ] Клеть 2 вд введите ^ введите В1 введите В2 введите
■дате | Клеть1 ] [ Клеть2 1 Н введите Ь введите
Введите данные 1 и Запуск Расчёта СТОП Введите данные В1
Рис. 1. Основное окно программы «OptimPass 2013»
Минимально необходимые требования для работы программы:
- ЭВМ типа IBM PC (или совместимая) с операционной системой Microsoft Windows (XP,7,8) разрядностью 64 бит;
- многоядерный ЦП (CPU) c тактовой частотой свыше 3 ГГц;
- объём оперативной памяти, выделяемой для работы программы, не более 64 МБ;
- объём свободного места ПЗУ (HDD или SSD) не менее 16 МБ.
Однако, учитывая, что возможных вариантов калибровки даже при минимальной точности насчитывается сотни миллионов, при использовании компьютера с указанными требованиями и задании шести точек разбиения четверти калибра (что само по себе достаточно мало) расчет одного оптимального калибра занимает около недели машинного времени. При увеличении числа точек авторам ни разу не удалось дождаться окончания работы программы по различным техническим причинам. Данная ситуация сильно осложняет работу с программой и требует поиска путей значительного (на несколько порядков) сокращения машинного времени.
Далее приводится подробный анализ возможных способов повышения производительности вычислений, основанных на достижениях в компьютерной технике и программировании.
Рис. 2. Обобщенный алгоритм программы «ОрйтРазэ 2013»
Сформулированный почти 50 лет назад закон Мура, а впоследствии и закон Хауса гласят о том, что каждые два года количество транзисторов в центральном процессоре (ЦП) будет удваиваться, а его теоретическая производительность будет удваиваться каждые 18 месяцев. Другими словами, рост производительности процессора носит скачкообразный характер. Так, например, в начале 90-х годов теоретическая производительность процессора была на уровне 54 MIPS (Million Instructions Per Second), а в наше время она достигает 127000, то есть за 20-25 лет она увеличилась более чем в 2000 раз [3]. Фактически современный компьютер может выполнить тот же объем вычислений за 4,5 часа, что и ПК в начале 90-х за год (Intel 486DX и Intel Core i7-4770K). Именно колоссальный рост вычислительной мощности ПК позволил их использовать для научного моделирования.
Скачкообразный рост производительности обеспечивался не простым ростом тактовой частоты ЦП, а внедрением новых концепций, технологий и микроархитектур, которые требовали применения новых методов и языков программирования. В свою же очередь, в научных кругах до сих пор применяют методы и языки программирования начала 90-х годов, которые не только морально устарели, но и не позволяют эффективно использовать вычислительную мощность ЭВМ. Программа «OptimPass 2013» является как раз ярким примером такого подхода к разработке.
Данная тенденция касается программного обеспечения, разработанного не только в научных школах, но и софтверными компаниями. Вопрос же эффективного использования ресурсов ЭВМ на данный момент является критически важным не только для научных задач.
Для большего понимания вопроса эффективного использования ресурсов ЭВМ необходимо рассмотреть прогресс микроархитектуры x86, начиная с появления векторных инструкций, которые кардинально изменили принцип вычислений и низкоуровневого программирования.
До появления SIMD-инструкций (single instruction, multiple data) процессор выполнял один поток данных и один поток команд, тогда как SIMD пред-
полагает один поток команд и множественный поток данных, то есть позволяет одной инструкцией обрабатывать пакет данных, увеличивая тем самым скорость вычислений.
Первым SIMD-расширением к микроархитектуре х86 стал набор инструкций MMX (MultiMedia extension), вышедший в 1997 году. Набор инструкций MMX оперирует восемью 64-битными регистрами ММ и 57 инструкциями и поддерживает следующие типы данных: упакованные байты (восемь байт), упакованные слова (четыре слова), упакованные двойные слова (два двойных слова) и 64-битные слова (рис. 3) [4]. Оптимизация программного кода под данный набор инструкций позволяла поднять уровень производительности процессора Pentium MMX в среднем на 60% в определенном круге задач. Основными недостатками MMX являются: работа только с целочисленной арифметикой и невозможность одновременной работы сопроцессора x87 и MMX. Несмотря на ограничения, с набором MMX был сделан первый шаг к увеличению производительности процессора путем пакетной обработки данных, а не наращиванием тактовой частоты процессора.
Слово ВЗ Слово В2 Слово В1 Слово ВО
Слово D3 Слово D2 Слово D1 Слово DO
Операция
Слово W3 Слово W2 Слово W1 Слово WO
Операнд1(4 слова) Операнд 2 (4 слова)
Результат (4 слова)
Рис. 3. Пример работы MMX со словами
В 1999 году компания Intel представила новый набор SIMD-инструкций SSE (Streaming SIMD Extensions), оперирующий восемью 128-битными регистрами ХММ, в котором была проделана работа над ошибками, устраняющая основные недостатки MMX: работа только с целыми числами и невозможность
работы с сопроцессором x87 (рис. 4) [4]. Набор инструкций SSE добавлял 70 новых инструкций и был впервые реализован в процессорах Pentium III. Данный набор получил дальнейшее развитие в виде нового набора инструкций SSE2, который содержал 144 инструкции. Его первая аппаратная реализация была осуществлена в процессорах Pentium 4 с ядром Willamette в 2000 году.
Слово Слово Слово Слово Слово Слово Слово Слово
В7 В6 В5 В4 ВЗ В2 В1 ВО
Операция
Слово Слово Слово Слово Слово Слово Слово Слово
D7 D6 D5 D4 D3 D2 D1 D0
Слово Слово Слово Слово Слово Слово Слово Слово
W7 W6 W5 W4 W3 W2 W1 wo
Операнд 1 (8 слов)
Операнд 2 (8 слов)
Результат (8 слов)
Рис. 4. Пример работы SSE со словами
В 2004 году компания Intel выпускает процессор Pentium 4 с ядром Prescott, в рамках которого был анонсирован новый набор инструкций SSE3, добавляющий 13 новых инструкций [4], а в 2006 году - процессоры Core 2 с ядром Conroe, а вместе с ними и 32 новые инструкций SSSE3. В 2008 году появился новый набор инструкций SSE4.1 (47 новых инструкций), реализованный в процессорах Core 2 с ядром Penryn. Также в 2008 году с процессорами Intel Core с микроархитектурой Nehalem в свет выходит новый набор инструкций SSE4.2 (7 новых инструкций) [5].
Логическим продолжением SSE стал набор инструкций AVX (Advanced Vector Extensions), вышедший в 2011 году совместно с процессорами Intel Core с микроархитектурой Sandy Bridge [5]. Этот набор предоставляет 16 256-битных регистров YMM (рис. 5). В 2013 году набор инструкций AVX получил дальнейшее развитие в виде расширения AVX 2.0 в процессорах Intel Core с микроархитектурой Haswell.
Слово В15 Слово В14 Слово В13
Слово D15 Слово D14 Слово D13
Операнд 1 (16 слов) Операнд 2 (16 слов)
Операция
Слово Слово Слово
W15 W14 W13
Слово В2 Слово В1 Слово ВО
Слово D2 Слово D1 Слово DO
Слово Слово Слово
W2 W1 WO
Результат (16 слов)
Рис. 5. Пример работы AVX со словами
Векторные инструкции прошли долгий путь развития с 1997 года до наших дней, добавив несколько сотен новых инструкций в процессор, постепенно расширяя разрядность регистров c 64 до 256 бит. В ближайшие годы компания Intel собирается увеличить разрядность регистров до 512 бит в десктопных ПК. Стоит заметить, что 512-битные AVX инструкции уже используют в сопроцессорах Xeon Phi, предназначенных для суперкомпьютеров [6-8].
Оптимизация кода под SIMD-инструкции позволяет существенно повысить производительность расчетов и является одним из резервов в борьбе за сокращение затрачиваемого на расчет времени.
Помимо внедрения дополнительных инструкций сама архитектура х86 претерпела значительные изменения. Так, например, в 2003 году были представлены 64-битные х86-процессоры, которые удвоили количество регистров общего назначения (РОН) и регистров XMM набора SSE с 8 до 16, а также разрядность РОН с 32 бит до 64 (табл. 1) [5], что позволило увеличить скорость вычислений за счет меньших обращений к ОЗУ, а использование 64-битной платформы и операционной системы (ОС) позволило убрать ограничение на максимальный объем ОЗУ в 4 Гб. Таким образом, переход на 64-битную платформу является перспективным шагом в оптимизации ПО.
Очередным этапом развития х86-процессоров стал 2005 год, в котором ведущими производителями ЦП был взят курс на увеличение производительно-
сти процессоров путем наращивания количества вычислительных ядер, а не тактовой частотой функционирования (табл. 2).
Таблица 1
Сравнение архитектуры IA32 и Intel 64
Параметр IA-32 AMD 64/Intel 64
Количество РОН, шт 8 16
Разрядность РОН, бит 32 64
Количество регистров SSE, шт 8 16
Количество регистров MMX/FP, шт 8 8
Адресное пространство, Гб 4 16384
Таблица 2
Развитие серверных процессоров Intel (двухпроцессорные конфигурации)
Параметр Год
2004 2005 2006 2007 2008 2009 2011 2012 2013
Количество 1/2 2/4 4/4 4/4 4/4 4/8 6/12 8/16 12/24
ядер / пото-
ков, шт
Тактовая час- 3.6/- 2.8/- 2.67/- 3.2 3.4 3.33/ 3.46/ 3.1/ 2.7/
тота / Turbo 3.6 3.73 3.8 3.5
Boost, ГГц
Тех. процесс, 90 90 65 45 45 45 32 32 22
нм
Это касается как потребительского сегмента, так и корпоративного. Уже тогда стало ясно, что назревает проблема низкой утилизации вычислительных ресурсов, обусловленная тем, что классический подход к программированию крайне неэффективен, так как не позволяет задействовать все вычислительные ядра процессора. На сегодняшний день десктопные процессоры Intel верхнего ценового сегмента имеют 8 ядер и 16 потоков, а серверные имеют более 12 ядер и 24 потоков, то есть однопоточное приложение может использовать менее 12% вычислительной мощности процессора домашнего ПК. Таким образом, для обеспечения высокой загрузки ЦП и коэффициента использования оборудования оптимизация ПО под многопоточные процессоры является единственным способом загрузки многоядерных систем.
Четвертным перспективным способом увеличения скорости вычислений являются GPGPU-вычисления (General-purpose graphics processing units) или вычисления на графических ускорителях с помощью API OpenCL (Open Computing Language) [9]. Возможность данных расчетов появилась относительно недавно - буквально 5 лет назад. Бесспорным плюсом GPGPU-вычислений является их высокая теоретическая производительность, но следует понимать, что архитектура графического ускорителя существенно отличается от ЦП, поэтому необходимо использовать специализированные языки программирования, что усложняет задачу оптимизации программного кода. Также следует заметить, что несмотря на порядок большую скорость, чем у ЦП, GPGPU-ускорители весьма узко специализированы и подходят далеко не для каждой задачи [9].
Отдельно стоит упомянуть сопроцессоры Intel Xeon Phi, предназначенные для суперкомпьютеров и конкурирующие с GPGPU-ускорителями NVIDIA и AMD. Отличительной особенностью Intel Xeon Phi является более привычная для программиста х86-микроархитектура [6-8]. Стоит заметить, что в ноябрьском рейтинге суперкомпьютеров T0P500 2013 первое место заняла система на базе процессоров Xeon E5 и сопроцессоров Xeon Phi, то есть сопроцессоры на базе архитектуры х86 конкурентоспособны и их можно рассматривать как альтернативу GPGPU-ускорителям (табл. 3).
Таблица 3
Сравнение теоретической производительности CPU и GPU
Параметр CPU GPU ^processor
Модель Intel Xeon E5- NVIDIA GeForce Intel Xeon Phi
2697v2 Titan 7120
Разъем LGA 2011 PCI Express x16 PCI Express x16
Год выпуска 2013 2013 2013
Количество ядер 12 2688 61
GFLOPS (DP) ~250 ~1500 ~1200
В последние годы вопрос кросс-платформенности приложений становится все более важным, поэтому еще одним перспективным направлением следу-
ет считать язык программирования JAVA, обеспечивающий высокую и удобную кросс-платформенность. JAVA-приложения легко могут быть адаптированы как для Linux, так и для Windows, а также и под Android [10]. Весомым плюсом языка является поддержка и многопоточности, и OpenCL. Недостатком же языка является виртуальная JAVA-машина, которая делает язык оторванным от аппаратного обеспечения и накладывает дополнительные издержки, снижающие скорость вычислений.
Таким образом, можно выделить 5 перспективных направлений оптимизации программного кода:
- использование SIMD инструкций;
- использование дополнительных регистров и переход на 64-битную платформу и ОС;
- распараллеливание вычислений;
- использование графических ускорителей в расчетах;
- использование языка программирования JAVA для обеспечения высокой кросс-платформенности приложений.
В настоящее время коллектив авторов работает над реализацией этих направлений оптимизации программного кода «OptimPass 2013».
Библиографический список
1. Кинзин Д.И. Оптимизация формы вытяжных калибров // Электронный научный журнал «Калибровочное бюро».2013. Выпуск 1. www.passdesign.ru. С. 20-28.
2. Кинзин Д.И. Постановка и решение задачи оптимизации формы вытяжных калибров // Сталь. 2014. №2. С. 34-38.
3. Микропроцессоры Intel: 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, Pentium Pro Processor, Pentium II, Pentium III, Pentium 4. Архитектура, программирование и интерфейсы. Шестое издание / Барри Брэй.: Пер. с анг. СПб: БХВ-Петербург, 2005. 1328 с.
4. Кип Р. Ирвин. Язык ассемблера для процессоров Intel. 4-е издание / Пер. с анг. под ред. канд. физ.-мат. наук С.Г.Тригуб. Издательский дом "Виль-ямс", 2005, 912 с.
5. Intel 64 and IA-32 Architectures Software Developer Manuals.
6. Intel Xeon Phi Coprocessor Instruction Set Architecture Reference Manual.
7. Intel Xeon Phi Coprocessor System Software Developers Guide.
8. Intel Xeon Phi Coprocessor Architecture and Tools. The Guide for Application Developers / Rezaur Rahman.
9. The OpenCL Specification / Khronos OpenCL Working Group.
10. Васильев А.Н. Java. Объектно-ориентированное программирование: учебное пособие / СПб: Питер, 2011. 400 с.