Автор работы: Пользователь скрыл имя, 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
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
student@805-24:~$ scp hello.c barsic@195.19.33.110:klaster/
barsic@195.19.33.110's password:
hello.c
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_
ierr=MPI_Get_processor_name(
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_
printf("Processor %s, process %i: tick
= %d, time = %d\n",name,rank,tick,(time_
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/
#STDERR для задания (вывод ошибок)
#@ error = /gpfs/home/barsic/klaster/
#@ 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|
#@ 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