Тренинг по оптимизации ПО
by admin on Май.25, 2011, under Оптимизация
В МГУ прошла первая часть тренинга по оптимизации ПО. Пользователи кластеров МГУ (Чебышев и Ломоносов) приносили свои исходные коды, а инструкторы компании Intel рассказывали об инструментах для оптимизации и на живом примере показывали как они работают.
http://msu-intel.parallel.ru/?q=node/81
Работа была построена скорее как практика, на которой обучаемые с помощью подсказок инструктора находили узкие места своих программ.
Первая часть была посвящена MPI-ной производительности и оптимизации с помощью Intel Trace Collector/Analyzer.
Во второй части внимание было уделено производительности последовательных частей кода. На IPTU собирался профиль и дальнейший анализ производился на нем же.
Как показала практика – в коде всегда есть место для оптимизации, результатом тренинга стало ускорение работы научных программ в широком диапазоне – от 4х до 5%.
В конце июня планируется продолжение тренинга в суперкомпьютерном центре МГУ. Если есть заинтересованность – пишите, возможно и для вас найдется место.
Развитие стандарта MPI
by dmitry on Сен.09, 2009, under Новости
Не так давно (4 сентября 2009г) была принята новая версия стандарта MPI-2.2. В основном содержащий косметические изменения по сравнению с предыдущим вариантом (уточнения различных моментов, введение новых типов данных).
Полный вариант стандарта (и всех предыдущих) в формате pdf можно скачать тут:
http://www.mpi-forum.org/docs/docs.html
Но более интересным представляется MPI-3, предложения, обсуждаемые комитетом, можно увидеть здесь: http://meetings.mpi-forum.org/MPI_3.0_main_page.php
Для меня наиболее интересным расширением оказались так называемые Persistent Operations, позволяющие закэшировать соединения для коллективной операции и исключить оверхед при повторном использовании.
Проверка кластерной сети
by dmitry on Апр.14, 2009, under Новости, Программы
Одна из основных проблем крупных кластеров – это поддержка работоспособного состояния сетевой системы. Кроме терминального состояния “коннект отпал” возможны так же промежуточные варианты – падения скорости или возникновение задержек. Ситуация усугубляется тем что сложная фабрика может реагировать на битый кабель неочевидно – скорость может упасть в каком-то сегменте, при определенной передаче между определенными нодами. Поэтому иногда стоит устраивать прогоны-тесты сетевой подсистемы с нагрузкой Point-To-Point перебирая все возможные варианты. Это долго, и объемно по анализу, но спокойствие пользователей кластера того стоит.
Вышел обновленный FFTW-3.2alpha
by dmitry on Янв.18, 2009, under Алгоритмы
Наконец-то дождались. Судя по сайту fftw.org казалось автор совершенно забросил свое творение, и тут новая версия. В нем анонсирована поддержка MPI FFT преобразования. Теперь можно потихоньку начинать переезжать с 2.1.5. Поскольку это еще альфа, документации пока нет. Но вообщем то по примерам и хидерам можно понять что к чему. Вместо fftw_mpi_create_plan(…) стало fftw_plan(…), вместо fftw_one(…) стало fftw_exec(…). Немного поменялись параметры функций, внимание: требуется инициализация FFTW после MPI_Init() и финализация в конце программы.
В общем работает быстрее 2.1.5 где-то на 20-30%, точные цифры опубликовать к сожалению не могу.
Архитектура современных суперкомпьютеров
by dmitry on Сен.12, 2008, under Распараллеливание
Эта обзорная статья, в которой я постараюсь избегать подробностей и ненужных деталей, предназначена она в основном для новичков.
Есть два подхода при построении современных суперкомпьютеров – системы с общей памятью и так называемые кластеры. Каждый подход не исключает другого, у каждого подхода есть свои достоиинства и недостатки. Плюс систем с общей памятью – универсальность модели параллельного ПО, не требующей какого либо дополнительного кода, или не требующей значительных изменений кода. Плюс кластерных систем – отказоустойчивость и более лучшая масштабируемость. Системы с общей памятью плохо масштабируются при росте числа вычислительных процессоров, кластеры же масштабируются плохо из-за возрастающей сложности сети при добавлении узлов, но это происходит значительно позднее, когда число процессоров измеряется сотнями и даже тысячами. Рассмотрим подробнее оба этих подхода
(continue reading…)
Обзор способов параллельного программирования
by dmitry on Март.10, 2008, under Распараллеливание
В этой статье подробно рассматриваются различные подходы к параллельному программированию.
Наиболее широкоизвестные способы параллельного программирования
- Threads / Processes
- OpenMP
- MPI
Исторически сложилось так, что наиболее часто применяемый способ – это Threads в их различных реинкарнациях. Способ хорош тем что не требует дополнительных библиотек. Чтобы использовать этот вариант, достаточно имеющихся возможностей OC. Обычно используется для скрытия от пользователя различных продолжительных операций, чтобы не терять возможность отрисовки GUI в момент ожидания операции. Основное достоинство – потоки разделяют адресное пространства и принадлежат одному процессу. Поэтому все передачи данных между потоками выполняются максимально быстро. Чаще всего достаточно передать указатель. Синхронизация потоков не затратна и не требует системных вызовов (Syscall) – долгих операций с переключением контекста. Сюда же можно отнести и многопроцессные программы в самом простейшем виде – использующие fork() или что-то подобное из системных функций для порождения нового процесса, но применяющее для синхронизации и обмена данными системное API.
(continue reading…)