Расширение тестирования библиотеки Intel® MKL (Math Kernel Library) за счет свободно распространяемых приложений

Об авторе

Рогова Ольга Александровна, в 2008 году окончила Тольяттинский государственный университет по специальности «Математическое обеспечение и администрирование информационных систем». Сейчас учусь в аспирантуре ТГУ по специальности «Математическое моделирование, численные методы и комплексы программ». Принимала участие в Intel Summer School 2010 в Нижнем Новгороде.

Аннотация

Целью данного проекта является расширение тестирования функциональности библиотеки Intel® Math Kernel Library. Работа над проектом велась в двух направлениях: во-первых, создание тестового сьюта, состоящего из реальных пользовательских приложений, использующих библиотеку MKL; во-вторых, получение отлаженного механизма поиска таких приложений по требуемым критериям.

Введение

В рамках Летней школы я работала над задачей «Расширение тестирования библиотеки Intel® MKL (Math Kernel Library) за счет свободно распространяемых приложений» в команде Product Validation под руководством менеджера Алексея Дементьева и ментора Анатолия Пархоменко.

Product validation - процесс, при котором проверяется, отвечает ли новый продукт существенным требованиям клиента. В задачи отдела Product Validation входит тестирование функциональной части интеловских продуктов. Один из них - библиотека Intel® Math Kernel Library. Она используется для сложных многопоточных вычислений в инженерных, финансовых и научных приложений в целях повышения производительности вычислений. Сферы применения библиотеки: численные методы (методы Монте-Карло), теория вероятности, теория игр, статистика, финансы, 3D Sound, FFT (теплопроводность в твердых, жидких, газообразных веществах), сейсмология, томография, прогнозирование погоды.

Сейчас функционал библиотеки MKL тестируется с помощью Self-tests, которые поставляются в пакете MKL. Но проблема в том, что эти Self-tests не обеспечивают достаточного покрытия кода. Так как покупатели продолжают находить проблемы в работе библиотеки, возникла идея создать тестовый сьют, состоящий из реальных пользовательских приложений, тем самым смоделировать использование библиотеки в программных средах. Приложения, включенные в тестовый сьют, должны удовлетворять следующим критериям:

  1. Приложение должно использовать библиотеку MKL;
  2. Приложение должно быть свободно распространяемым, или иметь лицензию, позволяющую использование этого приложения для корпоративных пользователей;
  3. Приложение не должно нанести вред сети Intel;
  4. Приложение должно выполняться из командной строки, так как требуется, чтобы тестовый сьют был автоматизирован для более удобного запуска.

Средой разработки тестового сьюта стал язык Python.

Описание тестового сьюта

Проделанная работа состояла из нескольких этапов:

  1. изучение специфики архитектуры библиотек Intel® MKL и модели ее использования в реальной жизни;
  2. поиск свободно распространяемых приложений в Internet по согласованному списку критериев и формирование на их основе тестового набора;
  3. разработка автоматического скрипта для анализа хода линковки, компиляции, а также выполнения пользовательского приложения (выходных данных) и логирования результатов для их дальнейшего анализа.

В начале работы для поиска приложений мы ориентировались на портал SourceForge, но это оказалось ошибочным направлением, так как там хранятся свободно распространяемые приложения, которые не могут использовать не свободно распространяемый MKL. Поэтому было принято решение использовать сервис Google «Поиск кода» для поиска приложений.

Поиск производился по хедеру ‘mkl.h’ в языках программирования С и С++. Этот метод оказался достаточно эффективен и в дальнейшем может применяться для поиска приложений, использующих и другие библиотеки Intel, например, IPP, а также для поиска приложений, написанных на других языках программирования, например, Fortran.

Параллельно был разработан автоматический скрипт на языке Python.

Таким образом, результатом работы стал тестовый сьют, состоящий из пользовательских приложений. Все приложения запускаются из командной строки, так как было принято решение не брать GUI – приложения, чтобы не тратить время на изучение модулей Python для работы с GUI.

Рисунок 1. Структура тестового сьюта.

Сам тестовый сьют состоит из (рисунок 1):

  • папок, содержащих пользовательские приложения, в каждой папке содержится файл test.py для автоматической компиляции и линковки приложения;
  • файла suite.py, который запускает все файлы test.py;
  • файла readme, который содержит инструкции для добавления других приложений в тестовый сьют;
  • файла link_lines содержит строки для различных вариантов линковки приложений.

В файле suite.py реализован обход всех папок с приложениями по очереди с целью поиска файла test.py, и происходит запуск файла test.py для каждого приложения. Работа каждого файла test.py завершается с определенным кодом возврата. Этот код возврата попадает в suite.py, в зависимости от этого кода возврата выносится решение о прохождении теста: например, код возврата 1 – означает, что произошла ошибка при компиляции приложения, код возврата 0 – означает, что приложение сработало без ошибок.

Рисунок 2. Результат запуска скрипта suite.py.

На рисунке 2 приведен результат работы файла suite.py для различных способов линковки: статическая однопоточная, статическая многопоточная, динамическая однопоточная, динамическая многопоточная. Из вывода программы видно, что все приложения были протестированы, но в случае однопоточной линковки 6 из них прошли тест успешно, а для одного из них (‘omp skipped’) тест не проводится, так как оно разработано только для многопоточной линковки. В случае однопоточной линковки файл test.py для приложения omp возвращает код -1, и оно не тестируется. В случае многопоточной линковки приложение omp успешно проходит тесты.

В тестовый сьют включена обработка системных исключений. Для этого в файле suite.py предусмотрен второй поток, который отслеживает появление новых окон. В случае их появления второй поток закрывает их автоматически, чтобы не прерывать работу файла suite.py, и выводит сообщения об ошибках. Эта обработка использует средства GUI – автоматизации. Она берет самое «верхнее» окно, проверяет его на соответствие некоторым критериям. Эти критерии таковы: в этом окне должна быть кнопка 'Close the program‘ или нотис 'Do you want to debug using the selected debugger?‘. Критерии нужны для того, чтобы в случае тестирования GUI – приложений случайно не закрыть эти самые тестируемые приложения. Если критерии выполняются, второй поток закрывает это окно автоматическим нажатием кнопки 'Close the program‘, либо кнопки 'No‘ (в случае нотиса 'Do you want to debug using the selected debugger?‘).

Но, к сожалению, не все желаемые результаты были достигнуты. Например, планировалось пополнить тестовый сьют приложениями, использующими множество функций MKL, которые удовлетворяют требуемым параметрам. Но этого сделать не удалось. Это связано с тем, что такие приложения являются GUI – приложениями, а я не успела попрактиковаться в автоматизации тестирования GUI – приложений в рамках Летней школы. Но зато была создана основа, которая будет расширяться в дальнейшем. В перспективе тестовый сьют будет пополняться новыми проблемными приложениями.

Для добавления приложения в тестовый сьют нужно сделать следующее:

  • в папке TestSuite создать папку с приложением
  • в папке с приложением создать файл test.py для тестирования компиляции и линковки этого приложения.
  • работа скрипта test.py должна завершиться с определенным кодом возврата:
    • 0: ' passed',
    • 1: ' compilation failed',
    • 2: ' execution failed',
    • 3: ' exception‘
    • -1: ' skipped'

Результаты работы

Таким образом, результатом работы стал отлаженный механизм поиска приложений по требуемым параметрам, а также тестовый сьют, который в дальнейшем будет пополняться новыми приложениями как в результате текущей исследовательской работы, так и в результате работы над Escape – дефектами.

Заключение

Кроме огромного удовольствия от участия в работе Летней школы Intel я приобрела очень важный опыт работы в команде высококвалифицированных специалистов.

В ходе работы над своей задачей я получила знания об архитектуре библиотеки Intel® Math Kernel Library и модели ее использования. Я приобрела опыт в линковке библиотеки с пользовательским кодом и компиляции как с помощью интеловского C/C++ компилятора, так и с помощью компиляторов других производителей (Microsoft). Уверена, что приобретенные здесь знания и опыт пригодятся в моей научной и практической деятельности.

Но ничего бы не получилось без опытных наставников. Очень благодарна своему менеджеру Алексею Дементьеву и ментору Анатолию Пархоменко за постоянную поддержку и помощь в работе над задачей.

For more complete information about compiler optimizations, see our Optimization Notice.