Оптимизированные модули расчета проекта Einstein@home

Не так давно один пользователь из Венгрии, участвующий в проекте Einstein@home, занялся оптимизацией его расчетных модулей.
Данная работа удалась ему на славу, спасибо Akosf'у за проделанную титаническую работу (наша страна должна знать героев в лицо: http://einstein.phys.uwm.edu/view_profile.php?userid=121407).

Результатом его деятельности стали оптимизированные расчетные модули под х86-процессоры, управляемые ОС Windows. (К семейству х86 относятся как старинные i286-i486 (а также совместимые и более ранние), так и все новые процессоры от Intel (Celeron/Pentium/Core/Xeon), AMD (Duron/Sempron/Athlon/Opteron) и VIA (C3/C5/C7).)

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

Немного теории

Расчетный модуль проекта – это EXE-файл, закачиваемый с сервера при подключении к проекту и выполняющий расчеты блоков данных (Work Unit, кратко – WU). Сам расчетный модуль не содержит никаких данных.

Описание расчетных модулей и их установка

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

  • U – использует SSE3-инструкции процессора
  • S – использует SSE-инструкции процессора
  • D – использует 3DNow!-инструкции
  • С – просто оптимизированный код под х86-процессоры, использующий только стандартные x86-команды

Скачать оптимизированные расчетные модули можно по ссылкам:


Модуль S41.07HT не представлен по данным ссылкам. Скачать его можно здесь:

Версии оптимизированных расчетных модулей

Собственно, чем выше номер версии (идущий в названии архива после первой буквы), тем быстрее и/или корректнее работает модуль.

Выбор наиболее подходящего модуля для Вашего компьютера (в скобках приведена текущая последняя версия):

  • Для всех процессоров, поддерживающих SSE3, ставить нужно последний модуль – U (U41.04), (AMD: начиная с E3 stepping, Intel: Prescott и более новые)
  • Для всех процессоров, поддерживающих SSE, ставить нужно последний модуль – S (S41.07); (Pentium-III, Pentium4, AthlonXP, Duron(1GHz+),…)
  • Для процессоров без SSE, но с 3DNow! (в основном «старые» AMD – Athlon (не Athlon XP) и Duron) последний модуль – D (D41.14); (K6-2, K6-3, Spitfire, Thunderbird, Cyrix3, Samuel-II, Ezra,…)
  • Для процессоров, не поддерживающих ни SSE, ни 3DNow!, но построенных на архитектуре х86 (модели времен Pentium II), последний модуль – С (C41.02); (386, 486, Pentium, Pentium2, K5, K6,…)

Для модулей S существует разновидность: SXX.XXHT. Абревиатура HT в названии модуля означает, что приложение создано для процеесоров со включенным HyperTrading (HT) (Гипертрейдинг - разбивает 1 физический процессор на 2 логических, реализована в процессорах Intel).
В случае, когда HT отключен (это возможно сделать в BIOS-е) или в настройках проекта выбрано использование только 1 процессора, лучше использовать модуль без абревиатуры HT.
В противном случае, лучше иcползовать модуль с абревиатурой HT.

Проверить, поддерживает ли ваш процессор те или иные наборы инструкций (SSE, SSE3, 3DNow! и т. п.), можно при помощи специальных программ, вроде CPU-Z, RMMA и других.

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

Порядок установки

  1. Скачиваете подходящее ядро
  2. Распаковываете архив (в архиве файл: «albert_4.37_windows_intelx86.exe»)
  3. Останавливаете BOINC (выходите из него/выгружаете)
  4. Переписываете файл «albert_4.37_windows_intelx86.exe» из архива в папку BOINC-проекта: »…BOINC\projects\einstein.phys.uwm.edu\»
  5. Запускаете BOINC и наслаждаетесь скоростью расчета :)

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

До установки рекомендую открыть графическое отображение и посмотреть на вяло бегущие координаты. А затем открыть графическое отображение после установки оптимизированного расчетного ядра. Мне стало грустно за предшествующее неэфективно потраченное время процессора…

Текущие оптимизированные версии производят расчет:

  • U41.ХХ – более чем в 5,6 раз быстрее оригинального модуля
  • S41.ХХ – более чем в 5,2 раза быстрее оригинального модуля
  • D41.ХХ – более чем в 5,1 раза быстрее оригинального модуля
  • C41.ХХ – примерно в 2,7 раза быстрее оригинального модуля

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

Проблема с начислением очков (Credits) и ее решение

Ваш компьютер, например Pentium 4 3,0 ГГц, с оригинальным модулем считал некое задание за 17000 секунд, а с оптимизированным расчетным модулем считает за 4300 секунд. Тогда вместо 43 очков вам начисляется примерно 11. Тут возникает спорный момент, описанный во многих местах: справедливо это или нет. Разбираться в нем не будем. Просто скажу, что есть оптимизированный BOINC, который «подкручивает» получаемые очки.

Устанавливается он просто:

  1. Останавливаете BOINC (выгружаете)
  2. Переписываете в корень папки BOINC все файлы из архива
  3. Запускаете BOINC

Оптимизированный BOINC основан на коде версии 5.3.12, однако «установка» поверх версии 5.2.13 никаких проблем не вызывает. Очки «подкручиваются» автоматически, никаких дополнительных «танцев с бубнами» устраивать не нужно. Для выхода на «нормальное» количество очков требуется сдать около 20 результатов. При этом количество очков за каждый следующий отправленный результат будет чуть больше, до достижения «нормального» количества очков.

Стоит сразу оговориться, что «нормальное» количество очков не всегда соответствует получаемому раньше за тот же WU, однако приближено к нему. Например, на моем P4 3,0 ГГц раньше за задание начислялось 43-47 очков, а сейчас – 37-40: конечно, меньше, но лучше, чем 12. И опять же стоит учесть, что WU при этом рассчитывается в 3-4 раза больше.

В случае, если вы участвуете более чем в одном BOINC-проекте, и для других проектов оптимизированные ядра не используются, необходимо установить калибровку очков только для «Эйнштейна». Как это сделать – описано в файле «readme.en.txt», входящем в архив оптимизированной версии BOINC (там описано и много других интересных настроек). Если кратко, то в файле «truxoft_prefs.xml», который можно редактировать обычным Блокнотом, необходимо строку:

<calibrate_credit>all</calibrate_credit>

заменить на

<calibrate_credit>Einstein@Home</calibrate_credit>

Если нужно «калибровать» два и более проекта (но не все), тогда названия проектов перечисляются через запятую.

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

При использовании любых модулей, не разработанных непосредственно в чреве проекта, естественно возникают следующие вопросы:

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

Постараюсь в той или иной степени ответить на данные вопросы (все ответы применимы только к проекту Эйнштейн):

В системе BOINC один и тот же блок данных рассчитывается на 3-х компьютерах, как раз с целью сравнения полученных 3-х результатов на идентичность (Validation). Если один из результатов не совпадает (даже в последних разрядах) значит он некорректен (Invalid) и за него не начисляются очки.

Теперь про представленные в статье модули от Akosf-а. В первую очередь тестирование проводит он сам (принцип прост: считаем несколько блоков данных стандартным модулем и оптимизированным, а затем сравниваем результаты). Потом, когда он дает ссылку на новый расчетный модуль, скорость распространения нового модуля по пользователям не так велика, что приводит к еще одному тестированию - пользователями. Здесь следует отметить, что вся содержательная часть данной статьи собрана по крупицам с официального форума проекта, на котором для приложений Akosf-а модераторы отвели специальную тему. Так же на форуме поднимаются вопросы о корректности работы того или иного расчетного модуля.

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

Что такое дополнительные инструкции? Попробую привести простой пример (в реальности такого нет): для расчета периметра треугольника обычными командами процессору необходимо выполнить 2 действия: Сторона1 + Сторона2 = Сумма2сторон и Сумма2сторон + Сторона3 = Периметр (т.е. процессор потратит 2 такта). Используя дополнительную инструкцию можно выполнить данную операцию за один такт: Сторона1 + Сторона2 + Сторона3 = Периметр. Выигрыш в скорости очевиден, а алгоритм расчета никак не поменялся. Справедливости ради, следует отметить, что некоторые дополнительные инструкции действительно могут работать с меньшей точностью при выполнении расчетов, но тут все в руках программиста.

Теперь данные из практики: в настоящее время наиболее часто один блок данных рассчитывается 1 оптимизированным клиентом и 2 не оптимизированными (по наблюдениям за результатами), поэтому контроль получает достаточно хорошим. Из наблюдений разных пользователей сделан вывод, что все модули C и D - работают прекрасно, так как не было выявлено ни одного случая с получением некорректного результата. C модулями S возникли проблемы, начиная с версии S40.03, - при расчетах которым примерно 7 из 100 заданий не засчитывались (лично у меня по 4 заданиям начислено Х очков, а получено 0, так как мои результаты признаны некорректным). В модуле S40.04 данная ошибка уменьшена, но по словам, разработчика, не устранена окончательно. В связи с чем, не так давно, появилась версия модуля S40.12.

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

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

 "Optimised by akosf S40.04 --> 'projects/einstein.phys.uwm.edu/albert_4.37_windows_intelx86.exe'".

Так же не скрывается и использование оптимизированного BOINC, там же в описании результата есть строка:

 "<core_client_version>5.3.12.tx36</core_client_version>".

Почему не сделали сами… Вопрос сложный и риторический… Почему на проект SETI, который намного более старый, не сделали?… И существует куча оптимизированных модулей, написанных кем-то. Тут, на самом деле, причин может быть сколько угодно: начиная от банального отсутствия необходимой квалификации (с трудом верится конечно), через не желание менять то, что нормально работает и заканчивая разными политическими причинами. Политической причиной может быть, например, такая: на старые процессоры оптимизация не повлияет, и тогда они будут работать во много раз медленнее, чем более новые, в которых реализованы дополнительные наборы инструкций, следовательно такие компьютеры можно потерять из проекта (что не соответствует принципу распределенных вычислений).

Почему не сделать оптимизированные кем-либо модули просто официальными… Тут все объясняется намного проще. Во-первых оптимизированные кустарным способом приложения реализованы по принципу: «нужно сделать, чтоб корректно и быстро работало». Именно поэтому у Akosf-а 3 вида расчетных модулей, и при запуске модуля S на процессоре без инструкций SSE просто появится ошибка: «ошибка обращения по адресу…». Для официальных версий такое просто не допустимо. Плюс необходимо провести тестирование, по принципам принятым для проекта (а они, я думаю, намного длительней и сложнее, чем у Akosf-а). Плюс сделать описание данного расчетного модуля, комментарии в его модулях. И я думаю, что есть еще много всего другого, что нужно сделать. Ну и на последок, остаются все те же причины, что и при объяснении «почему не сделали сами».

Заключение

О выходе новых версий оптимизированных расчетных ядер для Einstein@home будет сообщаться на нашем форуме.

Также отмечу, что разработчики проекта Einstein@home на основе модулей Akosf'а реализуют новое расчетное ядро с использованием SSE-инструкций, которое в настоящее время проходит тестирование. Однако, по оценкам очевидцев, их ядро работает медленнее S40.12 в 1,6-2 раза.

Замечание
Использование того или иного оптимизированного модуля расчета всегда производится на свой страх и риск. Ни разработчик оптимизированных модулей, ни автор статьи, ни, тем более, официальные представители проекта не гарантируют 100% работоспособности оптимизированных расчетных модулей. Оптимизация проведена на собственной инициативе разработчика, и здесь используется принцип использования модулей - «как есть». Т.е. нравится - пользуйтесь, не нравится - используйте стандартный модуль.
Так что выбор за Вами: или однозначно правильно работающий модуль, или возможно некорректно работающий, но считающий в 3-5 раз быстрее


pro/einstein/optimization.txt · Последние изменения: 2006-05-11 15:38 lexx-r
Personal Tools