Результаты второго этапа конкурса «Студенческий кубок Intel: оптимизация многопоточных приложений»

Автор: Dmitry Oganezov
Опубликовано: 18 ноября 2007 г. | Последние Изменения: 21 ноября 2007 г.
Конкурсное задание

Мы предложили участникам второго этапа конкурса оптимизировать приложение SunSet – программу, рассчитывающую вид водной поверхности в зависимости от множества условий (положение солнца, ветра и т.п.).

Пример изображения, сгенерированного приложением SunSet
Пример изображения, сгенерированного приложением SunSet


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

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

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


Конфигурация тестовой машины

Работы всех участников тестировались на одной и той же машине с четырехядерным процессором Intel® Core™ 2 Extreme QX6700. Данный процессор дает определенные преимущества тем приложениям, авторы которых тщательно проработали алгоритмы распараллеливания с учетом масштабируемости на несколько процессорных ядер.


Параметры процессора


Number of cores 4 per processor
Name Intel Core 2 Extreme QX6700
Code Name Kentsfield
Specification Intel(R) Core(TM)2 Quad CPU @ 2.66GHz
Technology 65 nm
Core Speed 2666.8 MHz
Multiplier x Bus speed 10.0 x 266.7 MHz
Instruction sets MMX, SSE, SSE2, SSE3, SSSE3, EM64T
L1 Data cache 4 x 32 KBytes, 8-way set associative, 64-byte line size
L1 Instruction cache 4 x 32 KBytes, 8-way set associative, 64-byte line size


Машина была оснащена 4Gb оперативной памяти DDR2, работающей в двухканальном режиме на материнской плате D975XBX2:



Параметры материнской платы


Northbridge Intel i975X rev. A0
Southbridge Intel 82801GB (ICH7/R) rev. A1
Memory Type DDR2
Memory Size 4096 MBytes
Memory Frequency 333.4 MHz (4:5)
Mainboard Vendor Intel Corporation
Mainboard Model D975XBX2


Все тесты проводились на операционной системе Microsoft* Windows Server 2003 R2 Enterprise x64 Edition Service Pack 1 (Build 3790). .


Подготовка работ к тестированию

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

Мы откомпилировали все присланные работы, используя компилятор Intel® C++ Compiler v.10.1.011 и единую версию библиотек. Таким образом, мы старались быть объективными и исключить разброс результатов из-за особенностей конкретных инструментов. Так, например, если участник конкурса указал, что им была использована библиотека Intel® MKL v.9.0, мы уравняли шансы на победу, перекомпилировав приложение с использование последней версии данной библиотеки. Кроме того, мы удостоверились, что полученный результат не проигрывает аналогу с указанной версией.

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

Некоторые участники прислали работы, собранные под архитектуру Intel® IA32. Как правило, мы строили приложения для платформы Intel® 64, чтобы исключить влияние архитектуры на расстановку сил в конкурсе. Для тех немногих участников, решения которых в силу разных причин (в основном отсутствие векторизации) работали быстрее в 32-битном режиме, мы использовали 32-битную версию.

Список использованных нами инструментов:
  • Intel® C++ Compiler 10.1.011
  • Intel® Math Kernel Library 10.0.012
  • Intel® Integrated Performance Primitives 5.3
  • Microsoft* Visual Studio 2005

Pезультаты анализа производительности

Работа каждого участника была запущена с тремя конфигурационными файлами:

>SunSet –cfg Sample01.cfg
...
>SunSet –cfg Sample02.cfg
...
>SunSet –cfg Sample03.cfg
...


Чтобы устранить возможное влияние операционной системы, мы выполнили каждый тест трижды и для дальнейшего сравнения использовали наилучший (самый быстрый) результат. Как правило, погрешность, внесенная операционной системой не превышала 1%.

 

Таким образом, мы выявили одиннадцать лучших работ по минимальному времени исполнения в трех тестах. (Алексей Щербаков и Руслан Увашев разделили восьмое и девятое места, поэтому мы выделили одиннадцать, а не десять участников).

Таблица результатов - производительность
Таблица результатов - время выполнения в трех тестах.

Дополнительный рейтинг экспертов

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

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

Таким образом, мы составили дополнительный рейтинг участников, и с учетом этого рейтинга внесли коррективы в итоговую таблицу:


Итоговая таблица результатов.

Дополнительный рейтинг не повлиял на расстановку сил в тройке лидеров. Тем не менее, позиции четверых участников, вошедших в «десятку+1» изменились: Евгений Калишенко поднялся на одну ступеньку вверх, Илья К. – на две, потеснив Петра Процика и Евгения Гришуля.

Полный список комментариев к дополнительному рейтингу можно посмотреть в моем блоге.

Победители второго тура конкурса


Итак, мы поздравляем победителей конкурса:



Первое место и процессор Intel® Core™2 Quad Q6700 достается Александру Романову.


Второе место и процессор Intel® Core™2 Duo E6750 получает Юрий Мальков.


Третье место и процессор Intel® Core™2 Duo E6750 получает Павел Зубарев.

Жюри конкурса

 

  • Валерий Федорович Курякин - менеджер по инициализации новых продуктов и платформ
  • Андрей Нарайкин - старший инженер по программному обеспечению, один из авторов приложения SunSet
  • Максим Локтюхин - инженер по анализу производительности и оптимизации ПО
  • Игорь Ермолаев - старший инженер по программному обеспечению
Post a comment If you have any questions, please contact our support team.