![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Реализация шаблонов и модельБРМО (типы данных)
Пара м етризованные функции м ожно использовать с MPI-интерфейсо м д ля обработки ситуаций, в которых все процессы выполняют одинаковый код, но работают с различны м и типа м и данных. Так, определив значение TaskRank процесса, м ы м о-жем распознать, с каки м и данны м и и данны м и какого типа должен работать процесс. В листинге 9.2 показано, как реализовать различные задачи д ля различных рангов. //Листинг 9.2. Использование шаблонных функций для // определения «фронта работ» МР1-задач int main(int argc, char *argv[]) { //... int Tag = 2; int WorldSize; int TaskRank; MPI_Status Status; MPI_Init(& argc, & argv), - MPI_Comm_rank (MPI_COMM_WORLD, & TaskRank); MPI_Comm_size (MPI_COMM_WORLD, & WorldSize); //... switch(TaskRank) { case 1: multiplies< double> (3.2, 4.6); break; case 2: multiplies< complex> (X, Y) break; //case n: //... } } Поскольку не существует двух задач с одинаковым ранго м, все ветви в инструкции case листинга 9.2 будут выполнены различны м и MPI-задача м и. Кро м е того, такой тип параметризации м ожно распространить на контейнерные аргу м енты шаблонных функций. Это позволит передавать одной и той же шаблонной функции различные контейнеры объектов, содержащие различные типы объектов. Напри м ер, в листинге 9.3 показана обоб щ енная шаблоннал функция search (). // Листинг 9.3. Использование контейнерных шаблонов в // качестве аргументов шаблонных функций template< T> bool search(T Key, graph< T>) { //.. - locate(Key) //... } //... MPI_Comm_rank(MPI_COMM_WORLD, & TaskRank); //... switch(TaskRank) { case 1: { graph< string> bullion; search< string> search(«gold», bullion); } break; case 2: { graph< complex> Coordinates; search< complex> ((X, Y), Coordinates); } Break; //... В листин г е 9.3 процесс, у которого TaskRank = 1, выполняет поиск в графе (graph) сименем bullion, содержа щ е м string< ^beKTbi, а процесс, у которого TaskRank = 2, выполняет поиск в графе Coordinates, содержа щ е м ко м плексные числа. Мы не должны из м енять функцию search (), чтобы приспособиться к други м дан н ы м или типам данных, да и MPI-програм м а в это м случае и м еет более простую структуру, поскольку м ы м оже м м ногократно использовать шаблонную функцию поиска (search) для прос м отра контейнера graph, содержа щ его данные любого типа. Использование шаблонов значительно упро щ ает 5РМГ> програ мм ирование. Че м более об щ ей м ы делае м MPI-задачу, те м более гибкой она становится. Кро м е того, если некоторый шаблон прошел этап отладки и тестирования, надежность всех построенных на его основе МР1-задач м ожно считать довольно высокой, поскольку все они выполняют одинаковый код.
|