Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 8 лет назад пользователемВалентина Бурмантова
1 Язык Charm ++
2 Идеология Charm++ Charm++ - объектно-ориентированный язык программирования (расширение Си++), ориентированный на вычисления, управляемые потоком данных (data-driven computations).
3 Историческая справка Начало работ – конец 80-х годов в лаборатории параллельного программирования университета Illionois Urbana-Campaighn Первая открытая реализация – 1993 В годах добавлены возможности динамической балансировки и перемещаемые объекты
4 Сущности Charm++ «Последовательные» объекты «Распределяемые» объекты (chare) Сообщения Группы объектов Массивы объектов
5 Составляющие Charm++ приложения Файлы с описанием интерфейса ко всем объектам, кроме последовательных. Файлы с реализацией интерфейсов на Си ++. Компилятор Charm++ транслирует модули описания интерфейсов в код на Си++.
6 Модель выполнения Charm ++ приложения узел процессор
7 Создание объектов Charm ++ RTS mainchare chare
8 Распределяемые объекты Charm ++ Помимо обычных методов присутствует один или более входных (entry) методов, используемых для удаленного вызова.
9 «Главные» объекты (mainchare) Один или несколько типов объектов должны наследовать mainchare. Они создаются системой поддержки времени выполнения в начале выполнения программы на процессоре с номером 0.
10 Описание в интерфейсном модуле Один или несколько типов объектов должны наследовать mainchare. В интерфейсном модуле описание выглядит так: mainchare HelloMain { entry HelloMain(); entry void printDone(); };
11 Реализация Конструктор главного объекта имеет параметр по- умолчанию типа CkArgMsg*, через который передаются параметры командной строки: HelloMain(CkArgMsg* m){ delete m; mCount = atoi(m->argv[1]); }
12 Взаимодействие объектов Взаимодействие с объектом происходит через удаленный вызов методов. При этом параметры запаковываются и пересылаются на процессор, содержащий удаленный объект. Вызов асинхронный и без ожидания результата. прокси объект
13 hello.ci mainmodule Hello { readonly CProxy_HelloMain mainproxy; mainchare HelloMain { entry HelloMain(); entry void printDone(); }; chare Slave { entry Slave(); entry void hello(int); } };
argv[1]); ckout << "Running " << CkNumPes() << " processors on " << CkNumNodes() << " node" title="hello.C #include #include "Hello.decl.h CProxy_HelloMain mainproxy; class HelloMain : public Chare{ public: HelloMain(CkArgMsg* m) { delete m; mCount = atoi(m->argv[1]); ckout << "Running " << CkNumPes() << " processors on " << CkNumNodes() << " node" class="link_thumb"> 14 hello.C #include #include "Hello.decl.h CProxy_HelloMain mainproxy; class HelloMain : public Chare{ public: HelloMain(CkArgMsg* m) { delete m; mCount = atoi(m->argv[1]); ckout << "Running " << CkNumPes() << " processors on " << CkNumNodes() << " nodes " << endl; mainproxy = thishandle; for(int i = 0; i < mCount; i ++) { CProxy_Slave proxy = CProxy_Slave::ckNew(); proxy.hello(i); } } argv[1]); ckout << "Running " << CkNumPes() << " processors on " << CkNumNodes() << " node"> argv[1]); ckout << "Running " << CkNumPes() << " processors on " << CkNumNodes() << " nodes " << endl; mainproxy = thishandle; for(int i = 0; i < mCount; i ++) { CProxy_Slave proxy = CProxy_Slave::ckNew(); proxy.hello(i); } }"> argv[1]); ckout << "Running " << CkNumPes() << " processors on " << CkNumNodes() << " node" title="hello.C #include #include "Hello.decl.h CProxy_HelloMain mainproxy; class HelloMain : public Chare{ public: HelloMain(CkArgMsg* m) { delete m; mCount = atoi(m->argv[1]); ckout << "Running " << CkNumPes() << " processors on " << CkNumNodes() << " node">
15
void printDone() { mCount --; if(mCount == 0) CkExit(); } private: int mCount; }; class Slave : public Chare { public: Slave() {} void hello(int i) { ckout << "Hello from " << i << " on " << CkMyPe() << " processor " <
16 Компиляция в Charm++ CHARM=/home/posypkin/UTILS/charm-5.8/bin/charmc hello: hello.o $(CHARM) -o hello hello.o -language charm++ hello.o: hello.C $(CHARM) -c hello.C hello.C: Hello.decl.h Hello.def.h touch hello.C Hello.decl.h Hello.def.h: hello.ci $(CHARM) hello.ci
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.