Параллельные вычисления с использованием библиотеки PVM

Автор работы: Пользователь скрыл имя, 02 Декабря 2014 в 18:55, курсовая работа

Описание работы

Данная исследовательская работа посвящена ознакомлению с программированием параллельных вычислительных процессов с использованием пакета программ PVM (Parallel Virtual Machine).
Параллельной машиной называют набор процессоров, памяти и некоторые методы коммуникации между ними. Это может быть двухядерный процессор в ноутбуке, многопроцессорный сервер или, например, кластер (суперкомпьютер). Компьютеры, входящие в кластер, вместе намного быстрее, чем по отдельности.

Содержание работы

ВВЕДЕНИЕ………………………………………………………………….3
ГЛАВА 1.ОПИСАНИЕ КЛАСТЕРНЫХ СИСТЕМ И ХАРАКТЕРИСТИКА БИБЛИОТЕК ПАРАЛЛЕЛИЗМ………………….4
1.1. ТИПЫ КЛАСТЕРНЫХ СИСТЕМ……………………………...……..4
1.2. ПОПУЛЯРНЫЕ БИБЛИОТЕКИ ПАРАЛЛЕЛИЗМА.
АНАЛОГИ PVM…………………………………………………..……….7
1.3. ОПИСАНИЕ СИСТЕМЫ PVM……………………………………...13
ГЛАВА 2. ОРГАНИЗАЦИЯ ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛЕНИЙ…….16
2.1. ОПИСАНИЕ ОБОРОДУВАНИЯ И ПРОГРАММНОГО
ОБЕСПЕЧЕНИЯ………………………………………………………......16
2.2. УСТАНОВКА И НАСТРОЙКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ КЛАСТЕРА………………………………………………………………....17
2.3. ГИПОТЕЗА ГОЛЬДБАХА…………………………………………....21
2.4. ПРОЦЕСС КОМПИЛЯЦИИ СОБСТВЕННОЙ ПРОГРАММЫ ДЛЯ РАБОТЫ С PVM…………………………………...……………………....22
2.5. ВЫПОЛНЕНИЕ ПРОГРАММЫ…………………………………......23
ЗАКЛЮЧЕНИЕ…………………………………………………………….26
СПИСОК ЛИТЕРАТУРЫ………………………………

Файлы: 1 файл

Kursovaya_Markelov_proverka.doc

— 2.33 Мб (Скачать файл)

N

Время, с.

1

50000

1,49

2

100000

5,23

3

250000

30,43

4

500000

143,39


Как видно из таблицы с увеличением числа N время, которое затрачено на выполнение алгоритма, весьма ощутимо увеличивается, что вызывает некоторые неудобства. Числа 10000, 50000 вычисляются быстро, поэтому их тестирование на кластере не имеет смысла, так как даже 1 узел отлично справляется с поставленной задачей.

После этого программа была запущена на всех узлах кластера:

Таблица 2 - Выполнение программы на всех узлах кластера.

N

Время, с.

1

100000

4,69

2

250000

23,67

3

500000

112,53


 

Как видно из таблицы, производительность в вычислениях с крупными числами выросла примерно на 12%, что немного. Дело в том, что на одном узле кластера происходит большое количество вычислений, так как имеется всего два узла в кластере, и программа распараллелена всего на две подзадачи.

 Для того, чтобы программа  работала быстрее, нужно добавить  в кластер узлов и еще сильнее  распараллелить задачу, то есть разбить ее на большее количество параллельных подзадач, чтобы иметь возможность использовать в процессе подсчета большее количество узлов, на которых происходит малое количество вычислений. Чем меньше вычислений на одном узле, тем быстрее работает программа.

Таким образом,  тест программы Гипотеза Гольдбаха показал, что процессорное время работы кластера над данной задачей уменьшается, отсюда можно сделать вполне обоснованный вывод, что  кластерная система  работает быстрее, чем один компьютер. Производительность кластерной системы растет с увеличением количества узлов в ней.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЗАКЛЮЧЕНИЕ.

 

В ходе работы были изучены основные принципы построения распределенных вычислительных систем, была установлена и система PVM, завершена настройка RSH, а также изучены принципы параллельного программирования с использованием основных функций PVM.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СПИСОК ЛИТЕРАТУРЫ.

  1. PVM User’s Guide. Руководство пользователя PVM, Adam Beguelin 1994: сайт. URL: http://www.netlib.org (дата обращения 16.02.2014).
  2. Linux кластер – практическое руководство, Юрий Сбитнев 2011: сайт. URL : http://cluster.linux-ekb.info/ (дата обращения 15.03.2014).
  3. Высокопроизводительные вычисления, Виктор Датсюк, 2012: сайт. URL: http://rsusu1.rnd.runnet.ru/ (23.04.2014).
  4. Хабраха́бр – коллективный блог, пользователь Intel8086 2013: сайт. URL: http://habrahabr.ru/ (дата обращения 15.03.2014).
  5. Сборка кластера Beowulf на основе PVM и Linux, Блог Алексея Медведева, Алексей Медведев: сайт. URL: http://aleks37.blogspot.ru/ (дата обращения 19.02.2014).
  6. Знакомство с компилятором gcc, Дмитрий Пантелеичев: сайт. URL: http://www.linuxcenter.ru/ (дата обращения 21.02.2014).

 

 

 

 

 

 

 

 

 

 

ПРИЛОЖЕНИЕ А

Листинг программы  Гипотеза Гольдбаха.

Текст родительской программы master.c

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include </usr/share/pvm3/include/pvm3.h> ]

#include "/home/master/gold/tags.h"

#include "/home/master/gold/commons.h"

int main()

{

clock_t time;

int mytid; 

int gold_tid;

int golds[NUM_SLAVES]; //массив для  хранения данных ID задач с gold

int items[SIZE];        // данные для обработки 

int result, i, kp;

int results[NUM_SLAVES];

time = clock();

mytid = pvm_mytid();

for(i = 0; i < SIZE; i++) //делаем массив

items[i] = i;

 

result = pvm_spawn("gold", (char**)0, PvmTaskDefault, "", 1, &gold_tid);

for(i = 0; i < NUM_SLAVES; i++)

{

       pvm_initsend(PvmDataDefault);

       pvm_pkint(items + i*DATA_SIZE, DATA_SIZE, 1);

       pvm_send(golds[i], MSG_DATA);

}

 

/* получаем результат  от программ slave      */

 for(i = 0; i < NUM_SLAVES; i++)

{

   int bufid, bytes, type, source;

     int slave_no;

 

 

         //получаем информацию о сообщении

pvm_bufinfo(bufid, &bytes, &type, &source);

 

       // получаем  номер slave, которая послала данное  сообщение 

      gold_no = get_gold_no(golds, source);

 

        // распаковываем результат в правильную позицию

        pvm_upkint(results + gold_no, 1, 1);

    }

 

    // находим окончательный результат 

    kp = 0;

     for(i = 0; i < NUM_SLAVES; i++)

        kp += results[i];

time = clock() - time;

printf("Time = %f sec.", (double)time/CLOCKS_PER_SEC);

    //выходим из PVM

    pvm_exit();

 

    exit(EXIT_SUCCESS);

} // конец main()

 

 

 

 

 

 

 

 

 

Листинг дочерней программы gold.c:

#include <stdio.h>

#include "commons.h"

int main (void)

{

 

int p[SIZE/2];

int kp;

int i, j, k;

int mytid, parent_tid;

 

 

mytid = pvm_mytid();

parent_tid = pvm_parent();

pvm_recv(parent_tid, MSG_DATA);

pvm_upkint(items, DATA_SIZE, 1);

kp = 0; 

p[0]=1;

kp++;

 

for(i=3; i<SIZE; i+=2) {

  for(j=1; j<kp; j++) if (i%p[j]==0) break;

  if (j==kp) {p[kp] = i; kp++;}

}

 

for(i=2; i<=SIZE; i+=2) {

  for(j=0; j<kp; j++) {

     for(k=j; k<kp; k++) {

        if (p[j]+p[k]==i) {

        items=kp;

          break;

        }

     }

     if (k<kp) break;

  }

  if (j==kp) printf("Исключения = %d\n", i);

}

       pvm_pkint(items, DATA_SIZE, 1);

       pvm_send(golds[i], MSG_DATA);

 

getchar();

return 0;

}

 

 

 

 

 


Информация о работе Параллельные вычисления с использованием библиотеки PVM