Користувач:RV170/Чернетка

Charm++
Парадигма Message-driven parallel programming, migratable objects, Object-oriented
Творці Laxmikant Kale
Розробник Parallel Programming Laboratory
Мова реалізації C++, Python
Платформа Cray XC, XK, XE, XT, IBM Blue Gene L/P/Q, Infiniband, TCP, UDP, MPI
Вебсайт charmplusplus.org

Charm++ − це об'єктно-орієнтована мова програмування, яка є надмножиною C++. Розроблена Лабораторією Паралельних Обчислень Університету Іллінойсу. Charm++ була розроблена з метою підсилення продуктивності розробників шляхом надання високорівневих абстракцій для паралельних програм. В той же час вона забезпечує хорошу продутивність, яка покладена в основу платформ апаратного забезпечення. Програми, які написані на Charm++, діляться на керовані повідомленнями об'єкти − чари (chares), які взаємодіють між собою. Коли розробник викликає метод об'єкта, середовище виконання Charm++ відправляє до нього повідомлення. Такий об'єкт може розміщуватися в локальному або віддаленому процесорі парелельних обчислень. Повідомлення запускає на виконання код в межах чара, що забезпечує асинхронність операцій.

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

Чари в програмі співставляються з фізичними процесорами за допомогою адаптивного середовища виконання. Співставлення чарів з процесорами є прозорим для розробника, що дозволяє середовищу виконання динамічно змінювати їх призначення для процесора під час виконання програми, це надає паралельним програмам такі переваги: можливість робити виміри на основі балансування навантаження, відмовостійкість, автоматичне створення точок відновлення, здатність звужувати та розширювати набір процесів для паралальльної програми.

Інструменти моделювання молекулярної динаміки NAMD та OpenAtom реалізованні за допомогою Charm++.

Adaptive MPI (AMPI)[1] є реалізацією стандарту інтерфейсу передачі повідомлень середовища виконання Charm++, який надає сумісність з багатьма традиційними MPI моделями програмування. AMPI інкапсулює всі MPI процеси в межах доступного для міграції потоку з користувацьким рівнем доступу, який обмежується Charm++ об'єктом. Для інтеграції кожного потоку з чаром, AMPI може автоматично визначати перевагу, використовуючи середовище виконання Charm++ з незначними змінами (або взагалі без змін) основи MPI програми.

Історія ред.

Мова Charm++ була розроблена в Лабораторії Паралельних Обчислень Університету Іллінойсу, Вені Шу (Wennie Shu) та Кевіном Немурою (Kevin Nomura) в співробітництві з Лаксімікент Кейлом (Laxmikant Kale). Другий прототип мови з назвою Chare Kernel(2.0) був написаний Манішом Гуптою (Manish Gupta). Charm(3.0) мала суттєві зміни в проектуванні. Новий транслятор написав Nimish Shah. Реалізація Charm++ була зроблена Sanjeev Krishnan. Charm(4.0) включав в себе Charm++. Реліз був випущений в 1993. Charm(4.5) розробили Attila Gürsoy, Sanjeev Krishnan, Milind Bhandarkar, Joshua Yelon, Narain Jagathesan, and Laxmikant Kale. Цію ж командою була розроблена Charm(4.8), що включала Converse − паралельне середовище виконання, яке дозволяє взаємодіяти між модулями, які написані, використовуючи різні парадигми, в межах одного додатку. Після цього середовище виконання Charm++ було переорієнтовано на Converse. Синтаксичні розширення забрали, а натомість розробили простий інтерфейс транслятора Charm++, котрий став мовою. Версія 5.8 Ревізія 1 включала в себе:

  1. повністю переписане середовище виконання та інтерфейс транслятора
  2. нові можливості (наприклад: масиви чарів)
  3. різні бібліотеки

Після цього, мова координацій “Structured Dagger” була імплементована для Charm++ і була включена до поточної версії. До Converse було додано декілька нових особливостей: динамічне балансування навантаження (додано Terry Wilmarth і Joshua Yelon), клієнт-серверний інтерфейс для Converse, підтримка зневадження (Parthasarathy Ramachandran, Jeff Wright, and Milind Bhandarkar). Converse було портовано на платформи ASCI Red (Joshua Yelon), Cray T3E (Robert Brunner) та SGI Origin2000 (Milind Bhandarkar). Також були написані тести для Charm++ (Jackie WangFтаang Hu). Прогнозування, візуалізація продуктивності та інструменти аналітики були перепроектовані та переписані на Java (Michael Denardo). Orion Lawlor, Gengbin Zheng та Milind Bhandarkar були відповідальними за зміни до системи останнього релізу.[2]

Приклади ред.

Лістинги коду на Charm++:[3]

Header file (hello.h)
#ifndef __HELLO_H__
#define __HELLO_H__

class Hello : public CBase_Hello {

 public:

  /// Constructors ///
  Hello();
  Hello(CkMigrateMessage *msg);

  /// Entry Methods ///
  void sayHi(int from);
};

#endif //__HELLO_H__
Interface file (hello.ci)
module hello {

  array [1D] Hello {
    entry Hello();
    entry void sayHi(int);
  };

};
Source file (hello.C)
#include "hello.decl.h"

#include "hello.h"
#include "main.decl.h"

extern /* readonly */ CProxy_Main mainProxy;
extern /* readonly */ int numElements;

Hello::Hello() {
  // Nothing to do when the Hello chare object is created.
  // This is where member variables would be initialized
  // just like in a C++ class constructor.
}

// Constructor needed for chare object migration (ignore for now)
// NOTE: This constructor does not need to appear in the ".ci" file
Hello::Hello(CkMigrateMessage *msg) { }

void Hello ::sayHi(int from) {

  // Have this chare object say hello to the user.
  CkPrintf("\"Hello\" from Hello chare # %d on "
           "processor %d (told by %d).\n",
           thisIndex, CkMyPe(), from);

  // Tell the next chare object in this array of chare objects
  // to also say hello. If this is the last chare object in
  // the array of chare objects, then tell the main chare
  // object to exit the program.
  if (thisIndex < (numElements - 1))
    thisProxy[thisIndex + 1].sayHi(thisIndex);
  else
    mainProxy.done();
}

#include "hello.def.h"

Див. також ред.

Джерела та література ред.

  1. [1]
  2. Charm++ Programming Language Manual (PDF). http://cs.illinois.edu/: University of Illinois at Urbana-Champaign, Department of Computer Science. Процитовано 12 серпня 2011.
  3. Array "Hello World": A Slightly More Advanced "Hello World" Program: Array "Hello World" Code. http://charm.cs.uiuc.edu/: PPL - UIUC PARALLEL PROGRAMMING LABORATORY. Процитовано 12 серпня 2011.

Зовнішні посилання ред.