Задачи для Летней школы Intel 2010 в Новосибирске

26.03.2010 10:00


К участию приглашаются студенты старших курсов (начиная с 3-го), магистранты, аспиранты дневной формы обучения вузов Сибирского федерального округа России, имеющие гражданство РФ.

Cкачать PDF файл - задачи для Летней школы Intel 2010 в Новосибирске

Задача 1. Анализ безопасности программ с помощью Intel® Source Checker.
Задача 2. Исследование влияния «managed runtime environment (MRTE)» на примере Java и C# на производительность Intel® Math Kernel Library.
Задача 3. Сравнительный анализ средств для гетерогенных вычислений.
Задача 4. Исследование оптимизации “if conversion” для IA64 в C2 Hotspot.
Задача 5. Исследование возможности реализации IntelliSense для Intel® Visual Fortran.
Задача 6. Разработка и апробация процесса построения и визуализации продуктовых метрик на новых технологических средствах.
Задача 7. Параллельная реализация вычислительных алгоритмов с использованием библиотек MPI и Intel® Concurrent Collections.
Задача 8. Адаптация векторизатора GCC для системы команд новых процессоров Intel.
Задача 9. Разработка примеров для программного продукта Intel® Math Kernel Library.
Задача 10. Анализ зависимостей между тестами, покрытием кода и плотностью ошибок.

Задача 1. Анализ безопасности программ с помощью Intel® Source Checker.

Безопасность (Security) программных продуктов становится все более актуальной в мире цифровых технологий. Профессия специалиста по безопасности программного обеспечения становится все более востребованной и уважаемой на рынке.

Неотъемлемой частью проверки программного продукта на безопасность является его тестирование с помощью инструментов статического анализа. В рамках представленной задачи студентам предлагается ознакомиться с функциональностью инструмента Intel® Source Checker и с помощью него проанализировать несколько OpenSource программных продуктов.

Цель анализа: поиск ошибок безопасности, а также разработка эффективных способов использования инструмента Intel® Source Checker.

Планируемый результат:

Исследование нескольких Open Source проектов с помощью Intel® Source Checker. Результаты исследования, а также наработанные методики исследования будут описаны и опубликованы в виде статей.

Требуемый уровень подготовки:

  1. умение программировать на языке С/С++;
  2. приветствуется опыт работы с open-source проектами;
  3. желательно – хороший уровень владения письменным английским языком.

Задача 2. Исследование влияния «managed runtime environment (MRTE)» на примере Java и C# на производительность Intel® Math Kernel Library.

Требуется разработать небольшую тестовую базу и исследовать с её помощью производительность некоторых избранных (характерных) функций из Intel® Math Kernel Library в среде MRTE на примере Java и C#. Тестовая база не должна содержать секретной интеллектуальной собственности Intel; возможно она будет опубликована для внешних пользователей (вне Intel).

В качестве характерных функций из Intel® MKL используются избранные функции из BLAS и из Fast Fourier Transform (FFT). Для BLAS ожидаемое влияние MRTE будет существенно различаться для функций 1го, 2го и 3го уровня; поэтому будут взяты по одной функции из каждого уровня и исследованы её варианты для вещественных и комплексных данных различной точности. Для FFT будут взяты 1-мерный, 2-мерный и 3-мерный случаи прямого и обратного преобразования с комплексными данными различной точности.

Производительность этих функций будет сравниваться для двух случаев: если функцию вызывать из C/C++, или же из среды MRTE. Известно, что влияние MRTE может быть существенным и даже определяющим в некоторых случаях. Требуется оценить это влияние и написать аналитический отчёт. Производительность будет тестироваться под Linux и Windows на многопроцессорных машинах современной архитектуры.

Планируемый результат:

Простая тестовая база на производительность избранных функций из BLAS и FFT для вызова MKL из C/C++ и из MRTE (Java и C#). Аналитический отчёт о влиянии MRTE на производительность избранных характерных функций из Intel® MKL.

Участвуя в проекте, студенты укрепят своё понимание проблематики high performance computing (HPC) и современного места процессоров и программного обеспечения Intel на этой рыночной нише (business acumen). Будет получен опыт работы в транснациональной корпорации Intel, полезный практически и для будущего карьерного роста.

Требуемый уровень подготовки:

Главным образом требуется «математическая» подготовка и базовые знания в области программирования:

  1. знание, что такое BLAS и FFT;
  2. понимание проблематики high performance computing (HPC);
  3. базовые знания языков программирования C/C++, Java и C#;
  4. понимание в общих чертах Java Native Interface (JNI) и программирование unsafe кода на C#;
  5. знакомство с технологией makefile и её реализацией для Linux и Windows (в Microsoft Visual Studio);
  6. базовые навыки работы с командной строкой Windows и Linux.

Очень важна мотивация на исследование производительности BLAS и FFT.

Задача 3. Сравнительный анализ средств для гетерогенных вычислений.

Параллельное программирование – неотъемлемая часть высокопроизводительных вычислений, и знания и навыки в этой области крайне востребованы. Выполнение данной работы дает возможность развить навыки программирования параллельных систем и расширить свои знания о вычислениях в гетерогенных средах, таких как связка CPU + акселератор.

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

Планируемые результаты:

  1. выделение общих и уникальных возможностей каждого из подходов;
  2. оценка удобства использования подходов с точки зрения программиста;
  3. выявление «слабых мест» и выработка возможных способов их устранения.

Требуемый уровень подготовки:

  1. базовые знания о вычислительных алгоритмах и параллельном программировании;
  2. знание языков программирования C/C++;
  3. желательно – навыки программирования на FORTRAN.

Задача 4. Исследование оптимизации “if conversion” для IA64 в C2 Hotspot.

На процессорах Intel® Itanium® (архитектура IA64) все инструкции, за исключением небольшого числа, выполняются условно, т.е. их выполнение может быть отменено специальной кодировкой инструкции. Это свойство архитектуры Intel® Itanium® даёт возможность выполнить оптимизацию «if-conversion»: инструкции ветвления в подходящих случаях заменяются предикацией группы инструкций. Выигрыш производительности достигается за счёт того, что латентность инструкции перехода больше, чем отмена выполнения инструкции, в особенности для непредсказанных переходов.

Задача заключается в изучении IA64 и современных исследований в данной области, знакомстве с компилятором C2. Главная часть проекта – это реализация прототипа «if-conversion» и анализ производительности на ключевых приложениях.

Планируемые результаты:

  1. прототип оптимизации if-conversion;
  2. документальный анализ проделанной работы и отчёт о производительности на ключевых приложениях: SPECjvm2008, SPECjbb2005.

Стажёры получат опыт разработки для одной из самых успешных EPIC архитектур – IA64 и возможность улучшить производительность реального продукта Sun(Oracle) JRE.

Требуемый уровень подготовки:

  1. знание языков программирования C/C++;
  2. знакомство с теорией компиляции;
  3. знание принципов работы Java Runtime Environment;
  4. желательно – знакомство со средой Microsoft Visual Studio.

Задача 5. Исследование возможности реализации IntelliSense для Intel® Visual Fortran.

IntelliSense – технология автодополнения Microsoft используемая в Microsoft Visual Studio. Она дописывает название функции при вводе начальных букв. Кроме прямого назначения, IntelliSense используется для доступа к документации и для устранения неоднозначности в именах переменных, функций и методов. Поддержка этой технологии очень востребована среди пользователей и могла бы поднять программный продукт Intel® Visual Fortran на новый уровень.

Предлагается:

  1. исследовать правила языка FORTRAN, касающиеся ассоциации имен объектов данных и функций с местом их определения;
  2. формализовать алгоритм поиска места в программе, где определяется тот или иной объект;
  3. оценить сложность, разбить задачу на части по сложности и актуальности и наметить план реализации IntelliSence для Intel® Visual Fortran.

Планируемые результаты:

  1. формализация правил ассоциации имен языка FORTRAN, необходимых для реализации IntelliSense;
  2. оценка сложности реализации IntelliSence для языка FORTRAN;
  3. презентация проделанной работы.

Участвуя в проекте, стажер приобретет новые знания, а также неоценимый опыт работы в международной компании.

Требуемый уровень подготовки:

  1. базовые теоретические знания концепций языков программирования;
  2. желательно опыт программирования на языке FORTRAN.

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

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

Один из важнейших способов отслеживания и контроля уровня качества программного продукта – построение метрик для соответствующих характеристик качества продукта и их визуализация. Одна из основных метрик качества продукта связана с получением и отслеживанием динамики ошибок (дефектов) в нем. Основным источником данных для этой метрики является база данных описаний дефектов и, в частности, их состояний.

В настоящее время в построении и визуализации метрик используется многоступенчатый процесс извлечения данных из базы, их преобразование с помощью VB скриптов, передача в Microsoft Excel и, наконец, визуализация с помощью графических средств Excel и публикация на web-странице.

Необходимо перевести вышеописанный процесс на современные средства, предоставляемые, например, в Microsoft Reporting Services или на средства в системе Crystal Reports. Это значительно упростит процесс и сделает его более гибким и менее рутинным. Требуется испытать оба средства применительно к данной задаче и сделать обоснованный выбор одного из них.

Далее необходимо выполнить перевод имеющегося метрического процесса на новую технологию и проверить ее путем переноса уже имеющихся метрик, используемых для оценки качества компиляторов, разрабатываемых в Intel.

Планируемые результаты:

  1. перенос основной массы метрических запросов на новые технологии;
  2. статья о сравнении и оценке эффективности разных технологий, используемых для решения определенного класса задач обработки данных.

Работа над данной задачей позволит получить более глубокие знания и развить навыки работы с широко распространенной промышленной СУБД Microsoft SQL Server, с системой мониторинга дефектов ClearQuest и собственно со средствами построения и визуализации отчетов по качеству компиляторов. Не менее важным будет и знакомство с подходами к оценке качества современных оптимизирующих компиляторов.

Требуемый уровень подготовки:

  1. общие знания технологий баз данных, умение писать на SQL и понимать уже написанные запросы;
  2. желательно – знание скриптовых языков, а также системы контроля версий (CVS, SVN).

Задача 7. Параллельная реализация вычислительных алгоритмов с использованием библиотек MPI и Intel® Concurrent Collections.

Предлагается реализовать ряд алгоритмов из наукоёмких областей с использованием библиотек распределённого программирования MPI и Intel® Concurrent Collections for C++.

Планируемые результаты:

  1. параллельная реализация 2-3 алгоритмов с использованием MPI и Intel® Concurrent Collections for C++;
  2. сравнение производительности и масштабируемости разработанных алгоритмов;
  3. Указание «узких мест» реализаций и используемых библиотек.

Все полученные результаты будут использоваться для дальнейшей разработки Intel® Concurrent Collections for C++ и подготовки следующего выпуска.

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

Требуемый уровень подготовки:

  1. знакомство с базовые возможности библиотеки MPI;
  2. знакомство с программным продуктом Intel® Concurrent Collections for C++ (примеры и документация доступны на сайте whatif.intel.com);
  3. знание основ языков программирования C/C++.

Задача 8. Адаптация векторизатора GCC для системы команд новых процессоров Intel.

Задача состоит в исследовании векторизатора GCC с целью реализации в нём поддержки новых инструкций процессоров Intel®. Существующий компилятор GCC имеет встроенный автовекторизатор, который разработан с целью поддержки процессоров различных архитектур. Чтобы компилятор генерировал векторный код для конкретного процессора, необходимо, чтобы векторизатор и генератор кода располагали соответствующей информацией о конкретном процессоре.

В данной работе ставится задача определить, какая информация нужна для этого, как следует модифицировать код GCC, чтобы компилятор создавал векторный код с использованием новых наборов команд процессоров Intel ®.

Планируемый результат: экспериментальная сборка GCC, в которой векторизованный код использует инструкции новых процессоров Intel®.

Работа в проекте даёт возможность расширить знания о компиляторных технологиях, приобрести опыт работы в Open Source проекте и познакомиться с методами оптимизации кода.

Требуемый уровень подготовки:

  1. умение программировать на языке С/С++;
  2. базовые знания системы команд процессоров Intel®;
  3. умение работать с ассемблером.

Задача 9. Разработка примеров для программного продукта Intel® Math Kernel Library.

На данный момент целая группа функций в библиотеке Intel® MKL не имеет соответствующих примеров поставляемых в составе библиотеки. Вопросы о необходимости их наличия неоднократно поднимались как внешними пользователями (на форуме), так и другими разработчиками продукта. В рамках проекта предполагается создание таких примеров на языках C/C#/FORTRAN.

Планируемый результат: грамотные и содержательные примеры, иллюстрирующие использование транспозиции и сопутствующих функций.

Участвуя в проекте, Вы сможете познакомиться с процессом оценки качества промышленного программного обеспечения, получить начальные навыки тестирования программного продукта, приобрести опыт работы в сотрудничестве с дружелюбной и динамичной командой проекта Intel® Math Kernel Library.

Требуемый уровень подготовки:

  1. умение программировать на языках С/C#/FORTRAN.

Задача 10. Анализ зависимостей между тестами, покрытием кода и плотностью ошибок.

Тестовая база программного продукта Intel® Compiler содержит десятки тысяч тестов, которые 24 часа в сутки 7 дней в неделю исполняются для проверки качества текущей версии компилятора. Поддержание такой тестовой системы требует огромного количества оборудования и работы большой команды специалистов по качеству компилятора. Оптимизация тестового набора может существенно сократить необходимые ресурсы и улучшить качество тестирования компилятора.

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

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

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

Планируемые результаты:

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

В результате работы в проекте Вы приобретете следующие навыки: по технологии компиляции, обеспечения качества программных продуктов, анализа статистических данных.

Требуемый уровень подготовки:

  1. знание языков программирования С/С++;
  2. умение и желание анализировать больше объемы данных, инструменты/библиотеки анализа/визуализации данных;
  3. желательно – знание скриптовых языков, FORTRAN, систем контроля версий (CVS), БД (SQL).