Основы параллельного программирования вычислительных систем с распределенной и разделяемой памятью

Автор работы: Пользователь скрыл имя, 05 Июня 2013 в 22:25, курсовая работа

Краткое описание

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

Содержание

Введение 4
1 Общие представления о параллельном программировании 6
2 Архитектура параллельных компьютеров 8
2.1 Развитие архитектуры компьютера 8
2.2 Организация памяти параллельных компьютеров 10
2.3 Сети межсоединений 15
2.3.1 Свойства сетей межсоединений. Статические сети межсоединений 16
2.3.2 Динамические сети межсоединений 19
3 Введение в программирование с использованием передачи сообщений 22
3.1 Введение в MPI 22
3.1.1 MPI-коммуникация типа «точка-точка» 25
3.1.2 Тупиковые ситуации при коммуникациях типа «точка-точка» 30
3.1.3 Неблокирующие операции и режимы коммуникации 33
3.1.4 Коммуникационный режим 35
3.2 Групповые коммуникационные операции 36
3.3 Группы процессов и коммуникаторы 41
3.3.1 Группы процессов в MPI 41
3.3.2 Топологии процессов 45
3.3.3 Временные и прерывающие процессы 49
4 Введение в потоковое программирование в OpenMP 50
4.1 Проблемы поточной обработки цикла 52
4.2 Условия гонок 52
4.3 Управление общими и приватными данными 53
4.4 Планирование и разбиение циклов 55
4.5 Библиотечные функции ОреnМР 57
4.6 Отладка 58
4.7 Производительность 59
4.8 Основные моменты 61
5 Протокол сеансового уровня SSH 63
6 Удаленный вход на кластер 66
7 Операционная система Linux 68
7.1 Интерфейс ОС Linux 68
7.2 Некоторые команды Linux 68
8 Компилирование последовательных программ (Fortran/C/C++) 71
9 Основные команды 72
10 Работа с кластером 74
Список использованных источников информации 83

Вложенные файлы: 1 файл

Cluster.doc

— 829.00 Кб (Скачать файл)

Last login: Fri Oct 29 10:26:59 2010 from h30.net37.bmstu.ru

[16:17 barsic@mgmt ~]$ls

1aba7           common     hello.c.exe  lab10  laba7        primer3     test

8laba_rabotaet  Dragovich  helloworld   lab4   mbox         PRJ7        testcat

bin             EXAMPLES   Hello_World  lab5   Nik_Bor_Pyr proektname  work

code1           hello      helloworld1  lab6   Popov        project1    work1

[16:20 barsic@mgmt ~/laba7]$cd $HOME

[16:20 barsic@mgmt ~]$mkdir klaster

[16:21 barsic@mgmt ~]$ls

8laba_rabotaet  EXAMPLES     helloworld1  lab6         primer3     testcat

bin             hello        klaster      laba7        PRJ7        work

code1           hello.c.exe  lab10        mbox         proektname  work1

common          helloworld   lab4         Nik_Bor_Pyr  project1

Dragovich       Hello_World  lab5         Popov        test

[16:21 barsic@mgmt ~]$cd klaster

[16:22 barsic@mgmt ~/klaster]$ls

hello.c  hello.job               

[16:22 barsic@mgmt ~/ klaster]$mpicc -o hello.c.exe hello.c -lm

[16:23 barsic@mgmt ~/ klaster]$llsubmit hello.job

llsubmit: The job "mgmt.nodes.878" has been submitted.

[16:23 barsic@mgmt ~/ klaster]$llq

Id                    Owner      Submitted   ST PRI Class        Running On

-------------------- ---------- ----------- -- --- ------------ -----------

mgmt.878.0            barsic    11/1 16:23   R  50  small_mpi    n1102     

1 job step(s) in queue, 0 waiting, 0 pending, 1 running, 0 held, 0 preempted

[16:23 barsic@mgmt ~/klaster]$ls

hello.barsic.878.stdout  hello.barsic.878.stderr  hello.c  hello.c.exe  hello.job               

You have new mail in /var/spool/mail/barsic

[16:23 barsic@mgmt ~/klaster]$nano hello.barsic.878.stdout

[16:24 barsic@mgmt ~/klaster]$nano hello.barsic.878.stderr

 

Терминал 2 (для  копирования файлов):

student@805-24:~$ ls

Examples  hello.job~  projectname Документы Музыка         Рабочий стол

hello.c~  man         Видео        Картинки   Общедоступные  Шаблоны

student@805-24:~$ scp hello.job barsic@195.19.33.110:klaster/

barsic@195.19.33.110's password:

hello.job                                    100% 1815     1.8KB/s   00:00   

student@805-24:~$ scp hello.c barsic@195.19.33.110:klaster/

barsic@195.19.33.110's password:

hello.c                                      100%  603     0.6KB/s   00:00   

student@805-24:~$

При этом файл hello.barsic.878.stderr должен быть пуст (программа выполнена без ошибок), а hello.barsic.878.stderr содержит «приветствия» процессоров, выполняющих программу Hello world (Rank: 0 / Host: n2313).

Файл timer.c выглядит следующим образом:

#include  <stdio.h>

#include   "mpi.h"

void main(int argc,char * argv[])

{

int   n,ierr,rank,len,i,NTIMES=100;

char   name[MPI_MAX_PROCESSOR_NAME];

double  time_start,time_finish,tick;

MPI_Init(&argc,&argv);

ierr=MPI_Comm_rank(MPI_COMM_WORLD, &rank);

ierr=MPI_Get_processor_name(name, &len);

name[len]=0;

tick=MPI_Wtick();

time_start=MPI_Wtime();

for (n = 0; n<NTIMES; n++) time_finish=MPI_Wtime();

ierr=MPI_Comm_rank(MPI_COMM_WORLD, &rank);

printf("Processor %s, process %i: tick = %d, time = %d\n",name,rank,tick,(time_finish-time_start)/(double)NTIMES);

ierr=MPI_Finalize();

}

 

timer.job:

#!/bin/bash

#Название задания (может включать в себя любую комбинацию букв и цифр

#@job_name = timer

#Тип задания: может быть последовательный или параллельный.

#Выберем параллельный тип задания

#@job_type = MPICH

#@class = small_mpi

#@group = loadl

#STDIN для задания – имя файла или /dev/null по умолчанию

#@ input = /dev/null

#STDOUT для задания (выходные данные)

#По умолчанию: /dev/null

#@ output = /gpfs/home/barsic/klaster/timer.$(user).$(jobid).stdout

#STDERR для задания (вывод ошибок)

#@ error = /gpfs/home/barsic/klaster/timer.$(user).$(jobid).stderr

#@ initialdir = /gpfs/home/barsic/klaster/

#notification - Specifies when the user specified in the notify_user keyword is sent mail.

#Syntax: notification = always|error|start|never|complete

#@ notification = complete

#node – Минимальное и максимальное число узлов, необходимое шагу задания.

#Syntax: node = [min][,max]

#@ node = 10

#@ tasks_per_node = 1

#node_usage – Показывает разделяет ли данный шаг задания узлы с другими шагами.

#Syntax: node_usage = shared | not_shared

#@ node_usage = shared

#Необходимо выражение queue, помещающее шаг задания в очередь

#@ queue

echo "-------------------------------------------------------"

echo LOADL_STEP_ID = $LOADL_STEP_ID

echo HOSTNAME: `hostname`

echo "-------------------------------------------------------"

mpdboot -r ssh -n `cat $LOADL_HOSTFILE|sort|uniq|wc -l` -f $LOADL_HOSTFILE

mpirun -r ssh -machinefile $LOADL_HOSTFILE -n $LOADL_TOTAL_TASKS  ./timer.c.exe 1

mpdallexit

 

Список использованных источников информации

    1. Thomas Rauber, Gudula Runger. Parallel Programming For Multicore and Cluster Systems. - Springer, 2010.
    2. Эхтер Ш., Робертс Дж. Многоядерное программирование.- СПб.: Питер, 2010. – 316с.: ил. – (Серия «Библиотека программиста»).
    3. Корнеев В.Д. Параллельное программирование в MPI. - 2-е изд., испр. - Новосибирск: Изд-во ИВМиМГ СО РАН, 2002. - 215 с.

 


Информация о работе Основы параллельного программирования вычислительных систем с распределенной и разделяемой памятью