Н.В. Вдовикина, А.В. Казунин, И.В. Машечкин, А.Н. Техехин - Системное программное обеспечение - взаимодействие процессов, страница 29
Описание файла
PDF-файл из архива "Н.В. Вдовикина, А.В. Казунин, И.В. Машечкин, А.Н. Техехин - Системное программное обеспечение - взаимодействие процессов", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 29 страницы из PDF
Элементы массива recvcounts задают количествоэлементов, которое должно быть отправлено каждой ветви, чтопозволяет каждой ветви получать порции данных разной длины.Наконец, функция MPI_scan() представляет собой некотороесужение функции MPI_AllReduce():#include <mpi.h>int MPI_Scan(void*count, MPI_Datatypecomm);sendbuf, void* recvbuf, intdatatype, MPI_Op op, MPI_CommВ буфере recvbuf ветви с номером i после возврата из этойфункции будет находиться результат поэлементного примененияоперации op к буферам sendbuf ветвей с номерами от 0 до iвключительно. Очевидно, что в буфере recvbuf ветви с номером N1 будет получен тот же результат, что и для аналогичного вызоваMPI_Allreduce().Пример 33.
MPI:коммуникаций.применениеколлективныхВ данном примере производится приближенное вычислениечисла π путем численного интегрирования на отрезке методомпрямоугольников. Количество точек в разбиении определяетпользователь. Ветвь с номером 0 осуществляет ввод данных отпользователя, а затем, по окончании вычислений, - сбор данных отвсех ветвей и вывод результата.178#include <mpi.h>#include <stdio.h>int main(int argc, char **argv){int size, rank, N, i;double h, sum, x, global_pi;MPI_Init(&argc,библиотеку */&argv);/*ИнициализируемMPI_Comm_size(MPI_COMM_WORLD, &size);/*Узнаемколичествоприложении... */задачвзапущенномMPI_Comm_rank (MPI_COMM_WORLD, &rank);/* ...и свой собственный номер: от 0 до (size1) */if (rank == 0) {/* ветвь с номером 0 определяет количествоитераций...
*/printf("Please, enter the total iterationcount:\n");scanf("%d", &N);}/*... и рассылает это число всем ветвям */MPI_Bcast(&N, 1, MPI_INT, 0, MPI_COMM_WORLD);h = 1.0 / N;sum = 0.0;/* вычисление частичной суммы */for (i = rank + 1; i <= N; i += size) {x = h * (i - 0.5);sum += f(x);}sum = h * sum;179/* суммирование результата на ветви с номером 0*/MPI_Reduce(&sum,&global_pi,MPI_SUM, 0, MPI_COMM_WORLD);1,MPI_DOUBLE,is%.10f\n",if (rank == 0) {printf("Theglobal_pi);result}MPI_Finalize();return 0;}1808 Алфавитныйуказательупоминаемыхбиблиотечных функций и системных вызовов._exit() .......................................51MPI_Gather() .........................175accept()...................................133MPI_Get_count() ...................163alarm()......................................43MPI_Ibsend() .........................167bind()......................................131MPI_Init() ..............................154connect() ................................132MPI_Irecv()............................166creat() .......................................70MPI_Irsend()..........................167exec(), семейство ....................47MPI_Isend() ...........................166exit(), функция ........................52MPI_Issend()..........................167fcntl()..................................47, 81MPI_Probe()...........................164fork() ........................................42MPI_Recv()............................162ftok(), функция......................101MPI_Reduce() ........................178getpid() .....................................45MPI_Reduce_scatter() ...........179getppid() ...................................45MPI_Rsend()..........................161kill()..........................................67MPI_Scan() ............................179listen() ....................................133MPI_Scatter().........................174longjmp()..................................92MPI_Send() ............................160mkfifo() ....................................89MPI_Ssend() ..........................161mknod()....................................89MPI_Test() .............................168MPI_Abort() ..........................155MPI_Testall() .........................169MPI_Allgather().....................176MPI_Testany() .......................168MPI_Allreduce() ....................179MPI_Testsome().....................169MPI_Alltoall()........................177MPI_Wait() ............................168MPI_Barrier() ........................155MPI_Waitall() ........................169MPI_Bcast()...........................174MPI_Waitany() ......................168MPI_Bsend()..........................161MPI_Waitsome()....................168MPI_Comm_rank()................154msgctl() ..................................107MPI_Comm_size().................154msgget()..................................105MPI_Finalise() .......................155msgrcv() .................................106181msgsnd().................................105shmget()..................................114nice() ........................................60shutdown() .............................136pipe() ........................................80sigaction().................................78ptrace() .....................................94sigaddset() ................................76recv() ......................................135sigdelset() .................................76recvfrom() ..............................136sigemptyset() ............................76semctl()...................................121sigfillset() .................................76semget()..................................118sigismember()...........................76semop() ..................................119signal()......................................68send()......................................134sigpending() .............................76sendto() ..................................136sigprocmask()...........................75setjmp() ....................................92socket()...................................129shmat() ...................................115unlink().....................................71shmctl() ..................................116wait() ........................................52shmdt() ...................................1151829 Список литературы1.
Д.Цикритзис, Ф.Бернстайн. Операционные системы. Москва,Мир, 1977.2. Э.С.Таненбаум. Современные операционные системы,издание. Санкт-Петербург, Издательский дом Питер, 2002.2-е3. П.Кейлингер. Элементы операционных систем. Москва, Мир,1985.4. Ч.Хоар. ВзаимодействующиеМосква , Мир, 1989.последовательныепроцессы.5. Pate S.D. UNIX Internals.
A Practical Approach. Addison-WesleyLongman, 1997.6. К.Кристиан. Введение в операционную систему UNIX. Москва,Финансы и статистика. 1985.7. Б.К.Керниган, Р.Пайк.UNIX– универсальнаяпрограммирования. Москва, Финансы и статистика, 1992.среда8. М.Дансмур, Г.Дейвис. Операционная система UNIXпрограммирование на языке Си. Москва, Радио и связь, 1989.и9. Т.Чан.
Системное программирование на С++ для UNIX. Киев,Издательская группа BHV, 1997.10. М.Устюгов. Введение в TCP/IP. Москва, .МГУ, 1997.11. Б.Керниган, Д.Ритчи. Язык программирования Си. Издание 3-е,исправленное. Санкт-Петербург, Невский Диалект, 2001.12. И.В.Машечкин, М.И.Петровский, П.Д.Скулачев, А.Н.Терехин.Системное Программное Обеспечение: файловые системы ОСUnix и Windows NT. Москва, Диалог-МГУ,1997.13. А.Робачевский Операционная система UNIX. Санкт-Петербург,BHV-Санкт-Петербург, 199814. К.Хэвиленд, Д.Грей, Б.Салама.
Системное программирование вUNIX. Москва, ДМК, 2000.15. Н.Д.Васюкова, И.В.Машечкин, В.В.Тюляева, Е.М.Шляховая.Краткий конспект семинарских занятий по языку Си. Москва,МГУ, 1999.16. В.Столлингс. Операционные системы. 4-ое издание. Москва,Издательский дом Вильямс, 2002.183.