EditWYSIWYGAttachPrintable
r6 - 09 Aug 2007 - 11:17:40 - Alexander MoskovskyYou are here: TWiki >  TSim Web > TSimConcept
Концепция T-Sim основывается на основных понятиях Т-системы, а именно:

  1. Гранулы параллелизма - "чистые" функции, или функции, не имеющие побочных эффектов. Каждая такая функция может (но не обязана) быть запущена для параллельного вычисления в отдельном потоке и/или на удалённом компьютере.
  2. Для синхронизации доступа к результатам вычислений используются "неготовые значения". При доступе к "неготовому значению" поток может быть приостановлен до тех пор, пока значение не будет вычислено другим потоком.

В 90-е годы реализация таких механизмов в рамках С++ требовала либо использования недостаточно эффективного, в данном случае, динамического полиморфизма, либо создания языкового расширения - введение в язык дополнительных ключевых слов. В 2000-х годах поддержка основными компиляторами стандарта ISO С++ постепенно улучшалась и около 2003-го года стало возможным реализовать понятия Т-системы достаточно эффективным способом при помощи шаблонов С++. Первым опытом такого рода стал программный интерфейс библиотеки времени выполнения в OpenTS? . В T-Sim сделана попытка отказаться от использования расширяющих С++ ключевых слов. К преимуществам этого подхода относится исчезновение необходимости разрабатывать и поддерживать конвертер и/или компилятор для "расширенного" С++. Пользователи (разработчики параллельных программ) также избавлены от необходимости использовать средства разработки "расширенного" языка - можно использовать привычный компилятор С++ и среды разработки для этого языка. Неизбежным недостатком становится недостаточная "элегантность" получающихся решений. Например, разработчик программы обязан явно создавать сериализационный код для всех структур, используемых в неготовых значениях. Другим примером является необходимость использования макро-определений С++ для декларации возможных "гранул параллелизма" - Т-функций (использование макросов в С++ не рекомендуется). Разработка собственного компилятора для расширенного С++ открывает также возможность проведения оптимизации программы для параллельного исполнения во время компиляции, что труднореализуемо в случае со стандартным компилятором С++. В то же время, общий баланс выгод и недостатков делает подход с использованием чистых шаблонов С++ без языковых расширений достаточно привлекательным.

Библиотека T-Sim должна поддерживать как параллельных вычислениях в кластерах так и в распределённых средах, с одновременной совместной работы процессоров разных архитектур (гетерогенные кластеры и мета-кластеры). Это требование накладывает существенные ограничения на возможные пути реализации библиотеки. В частности, из этого требования вытекает необходимость поддерживать сериализацию (превращение в платформенно-нейтральную форму) всех данных, передаваемых по сети. Невозможным становится использование указателей и ссылок в качестве аргументов функций-гранул параллелизма - при активизации гранулы на удалённом узле переданные как аргументы указатели и ссылки окажутся некорректными.

Другим требованием к библиотеке T-Sim является относительная лёгкость разработки и поддержки - возможность успешного развития одним-двумя разработчиками. Это требование проявляется в использовании относительно простых технических решений при реализации подхода: отказ от таких ключевых возможностей OpenTS? как сборка мусора в распределённой памяти кластера и разработки собственной библиотеки легковесных потоков (тредов) для параллельных вычислений. За счёт использования "простых" решений повышается переносимость библиотеки - использование прикладного интерфейса POSIX-потоков позволяет сравнительно просто переносить решение между различными аппаратными и программными платформами. Существенно примитивнее в T-Sim реализован и механизм объектно-ориентированной общей памяти для хранения неготовых значений. Тем не менее, и в этом случае переносимость T-Sim лишь выигрывает за счёт отказа от сложных методов, использованных в OpenTS? .

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

Активным полем для исследований в T-Sim является возможность использования механизмов "мета-программирования" на основе шаблонных классов С++ для нужд параллельных и высокопроизводительных вычислений. В частности, механизмы специализации шаблонов С++ могут быть использованы для оптимизации программ. Так, например, при помощи специализации шаблонов возможно провести "аггрегацию" - комбинирование многих гранул параллелизма в одну - ещё на этапе компиляции программы. При этом программисту могут быть предоставлены высокоуровневые функции - такие, например, как Map - отображение одного множества элементов в другое. При разработке приложений программист параметризует операцию Map конкретными типами - входного и выходного множеств, типом операции. При этом, если элементарная операция отображения над одним элементом одного элемента требует малое количество вычислений, множество таких операций могут быть аггрегированы в одну гранулу параллелизма. Таким образом можно снизить привносимые средой распараллеливания накладные расходы на несколько порядков.

Интерфейс библиотеки T-Sim имеет три уровня: обобщённые функции, уровень Т-функций и Т-переменных и уровень активных сообщений. Три уровня предоставляют три разных компромисса между гибкостью и простотой использования. Обобщённые функции представляются наиболее простым средством параллельного программирования, но они применимы в ограниченном числе случаев. Уровень Т-переменных и Т-функций более гибок – с его помощью можно реализовать любую схему распараллеливания вычислений, программист должен провести декомпозицию приложения на параллельные гранулы, продумать и реализовать схему обмена данными. Но в то же время, модель вычислений на основе Т-функций и Т-переменных достаточно проста в использовании, например, она бесконфликтна – при параллельном счёте не могут возникнуть «тупики» - «состояния гонки», приводящие к трудноисправимым «зависаниям» программы. Наиболее сложен в использовании интерфейс на основе активных сообщений, но он и наиболее гибок и позволяет реализовать приложение с максимальной эффективностью. Программист может использовать как один из этих уровней, так и все три (вместе или попарно).

-- Alexander Moskovsky - 04 Aug 2007

Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r7 < r6 < r5 < r4 < r3 | More topic actions...
 
Powered by TWiki

This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback