Lecture_DVM_1 (1158298), страница 5
Текст из файла (страница 5)
Новый язык Fortran OpenMP/DVM (расширение Fortran OpenMP директивами DVM), реализация которого ведется в настоящее время, будет способствовать широкому внедрению DVM-подхода, поскольку параллельная программа на этом языке будет не только обладать всеми достоинствами DVM-программ, но и являться стандартной параллельной программой для мультипроцессоров и DSM-кластеров.
Однако наличие самой передовой технологии разработки параллельных программ само по себе не может решить проблему ускорения освоения параллельных вычислительных систем.
Большинство параллельных программ создаются с использованием того огромного программного задела, который был получен на последовательных ЭВМ. Необходимость разработки методики распараллеливания существующих последовательных программ ощущается очень остро. В ИПМ им.М.В.Келдыша РАН ведутся работы по обобщению опыта распараллеливания программ и созданию соответствующей методики. Такая методика должна быть поддержана специальными инструментами, автоматизирующими анализ последовательных программ и извлечение их свойств, существенных для распараллеливания этих программ. Работы В.В.Воеводина и Вл.В.Воеводина, ведущиеся в этом направлении, позволяют верить в появление таких инструментов в ближайшем будущем.
Острой является и проблема подготовки кадров, способных эффективно использовать параллельные системы. Для курсов лекций по параллельной обработке, читаемых в ВУЗах, характерен чисто теоретический уклон. В них мало внимания уделяется изучению практических технологий параллельного программирования. Как правило, такие курсы не поддержаны практическими занятиями. Первый положительный опыт по проведению практикума по параллельному программированию с выходом на реальные параллельные системы (кластер рабочих станций и многопроцессорная ЭВМ МВС-1000м), полученный в 2002 году на факультете ВМиК МГУ при поддержке фирмы Интел и Межведомственного суперкомпьютерного центра, дает основания надеяться на постепенное улучшение положения дел в этом вопросе.
Литература
-
Foster I., Kesselman C. The Grid: Blueprint for a New Computing Infrastructure. Morgan Kaufmann Publishers, Inc., San Francisco, CA, USA, 1999.
-
Андрианов А.Н., Ефимкин К.Н., Задыхайло И.Б. Язык Норма. Препринт ИПМ им. М.В.Келдыша АН СССР, № 165, 1985.
-
Zadykhailo I.B., Krukov V.A. and Pozdnjakov L.A. 'RAMPA - CASE for portable parallel programs development'', Proc. of the International Conference on Parallel Computing Technologies, Obninck, Russia, 1993.
-
Konovalov N.A., Krukov V.A., Mihailov S.N. and Pogrebtsov A.A. Fortran DVM - a Language for Portable Parallel Program Development. Proceedings of Software For Multiprocessors & Supercomputers: Theory, Practice, Experience. Institute for System Programming, RAS, Moscow, 1994.
-
Lastovetsky A. mpC - a Multi-Paradigm Programming Language for Massively Parallel Computers, ACM SIGPLAN Notices, 31(2):13-20, February 1996.
-
Abramov S., Adamovitch A. and Kovalenko M. T-system: programming environment providing automatic dynamic parallelizing on IP-network of Unix-computers. Report on 4-th International Russian-Indian seminar and exibition, Sept. 15-25, 1997, Moscow. http://www.botik.ru/~abram/ts-pubs.html
-
Message-Passing Interface Forum, Document for a Standard Message-Passing Interface, 1993. Version 1.0. http://www.unix.mcs.anl.gov/mpi/
-
Message-Passing Interface Forum, MPI-2: Extensions to the Message-Passing Interface, 1997. http://www.unix.mcs.anl.gov/mpi/
-
High Performance Fortran Forum. High Performance Fortran Language Specification. Version 1.0, May 1993.
-
High Performance Fortran Forum. High Performance Fortran Language Specification. Version 2.0, January 1997.
-
OpenMP Consortium: OpenMP Fortran Application Program Interface, Version 1.0, October 1997. http://www.openmp.org/
-
DVM-система. http://www.keldysh.ru/dvm/
-
Bailey D., Harris T., Saphir W., Van der Wijngaart, Woo A., Yarrow M.The NAS Parallel Benchmarks 2.0. NAS Technical Report NAS-95-020, NASA Ames Research Center, Moffett Field, CA, 1995. http://science.nas.nasa.gov/Software/NPB.
-
PCF Fortran. Version 3.1. Aug.1, 1990.
-
Hiranandani S., Kennedy K., Tseng C. Compiling Fortran D for MIMD Distributed-Memory Machines. Comm. ACM, Vol. 35,No. 8 (Aug. 1992), 66-80.
-
Коновалов Н.А., Крюков В.А., Любимский Э.З. Управляемая виртуальная память.Программирование, №1, 1977.
-
TotalView. http://www.etnus.com/Products/TotalView/index.html
-
Portland Group Debugger. http://www.pgroup.com
-
Nupshot . http://www.mcs.anl.gov/mpi/mpich/
-
Pablo. http://www-pablo.cs.uiuc.edu
-
Vampir. http://www.pallas.de/pages/vampir.htm
-
Backus J. The history of FORTRAN I, II and III. ACM SIGPLAN Notices, 13(8):165-180,1978.
-
Frumkin M., Jin H., and Yan J. Implementation of NAS Parallel Benchmarks in High Performance Fortran. NAS Technical Report NAS-98-009, NASA Ames Research Center, Moffett Field, CA, 1998.
-
Capello F., Etiemble D. MPI versus MPI+OpenMP on the IBM SP for the NAS Benchmarks. In Proceedings of Supercomputing ’2000, 2000.
-
Елизаров Г.С., Забродин А.В., Левин В.К., Каратанов В.В., Корнеев В.В., Савин Г.И., Шабанов Б.М. Структура многопроцессорной вычислительной системы МВС-1000М. Труды Всероссийской научной конференции "Высокопроизводительные вычисления и их приложения", г.Черноголовка, 30 октября - 2 ноября 2000 г., Изд-во Московского университета, 2000.
-
Dongarra J., Walker D., and others. ScaLAPACK Users’ Guide. Philadelphia: Society for Industrial and Applied Mathematics, 1997.
Приложение 1.
Примеры последовательной и параллельных реализаций алгоритма Якоби
Последовательная программа на языке Fortran 77
PROGRAM JAC_F77
PARAMETER (L=8, ITMAX=20)
REAL A(L,L), B(L,L)
PRINT *, '********** TEST_JACOBI **********'
DO IT = 1, ITMAX
DO J = 2, L-1
DO I = 2, L-1
A(I,J) = B(I,J)
ENDDO
ENDDO
DO J = 2, L-1
DO I = 2, L-1
B(I,J) = (A(I-1,J) + A(I,J-1) + A(I+1,J) + A(I,J+1)) /4
ENDDO
ENDDO
ENDDO
END
Параллельная программа на языке Fortran 77 + MPI
PROGRAM JAC_MPI
include 'mpif.h'
integer me, nprocs
PARAMETER (L=8, ITMAX=20, LC=2, LR=2)
REAL A(0:L/LR+1,0:L/LC+1), B(L/LR,L/LC)
C arrays A and B with block distribution
integer dim(2), coords(2)
logical isper(2)
integer status(MPI_STATUS_SIZE,4), req(8), newcomm
integer srow,lrow,nrow,scol,lcol,ncol
integer pup,pdown,pleft,pright
dim(1) = LR
dim(2) = LC
isper(1) = .false.
isper(2) = .false.
reor = .true.
call MPI_Init( ierr )
call MPI_Comm_rank( mpi_comm_world, me, ierr )
call MPI_Comm_size( mpi_comm_world, nprocs, ierr)
call MPI_Cart_create(mpi_comm_world,2,dim,isper,
* .true., newcomm, ierr)
call MPI_Cart_shift(newcomm,0,1,pup,pdown, ierr)
call MPI_Cart_shift(newcomm,1,1,pleft,pright, ierr)
call MPI_Comm_rank (newcomm, me, ierr)
call MPI_Cart_coords(newcomm,me,2,coords, ierr)
C rows of matrix I have to process
srow = (coords(1) * L) / dim(1)
lrow = (((coords(1) + 1) * L) / dim(1))-1
nrow = lrow - srow + 1
C colomns of matrix I have to process
scol = (coords(2) * L) / dim(2)
lcol = (((coords(2) + 1) * L) / dim(2))-1
ncol = lcol - scol + 1
call MPI_Type_vector(ncol,1,nrow+2,MPI_DOUBLE_PRECISION,
* vectype, ierr)
call MPI_Type_commit(vectype, ierr)
IF (me .eq. 0) PRINT *, '***** TEST_JACOBI *******'
DO IT = 1, ITMAX
DO J = 1, ncol
DO I = 1, nrow
A(I,J) = B(I,J)
ENDDO
ENDDO
C Copying shadow elements of array A from
C neighboring processors before loop execution
call MPI_Irecv(A(1,0),nrow,MPI_DOUBLE_PRECISION,
* pleft, 1235, MPI_COMM_WORLD, req(1), ierr)
call MPI_Isend(A(1,ncol),nrow,MPI_DOUBLE_PRECISION,
* pright, 1235, MPI_COMM_WORLD,req(2), ierr)
call MPI_Irecv(A(1,ncol+1),nrow,MPI_DOUBLE_PRECISION,
* pright, 1236, MPI_COMM_WORLD, req(3), ierr)
call MPI_Isend(A(1,1),nrow,MPI_DOUBLE_PRECISION,
* pleft, 1236, MPI_COMM_WORLD,req(4), ierr)
call MPI_Irecv(A(0,1),1,vectype,
* pup, 1237, MPI_COMM_WORLD, req(5), ierr)
call MPI_Isend(A(nrow,1),1,vectype,
* pdown, 1237, MPI_COMM_WORLD,req(6), ierr)
call MPI_Irecv(A(nrow+1,1),1,vectype,
* pdown, 1238, MPI_COMM_WORLD, req(7), ierr)
call MPI_Isend(A(1,1),1,vectype,
* pup, 1238, MPI_COMM_WORLD,req(8), ierr)
call MPI_Waitall(8,req,status, ierr)
DO J = 2, ncol-1
DO I = 2, nrow-1
B(I,J) = (A(I-1,J) + A(I,J-1) +
* A(I+1,J) + A(I,J+1)) / 4
ENDDO
ENDDO
ENDDO
call MPI_Finalize(ierr)
END
Параллельная программа на языке HPF
PROGRAM JAC_HPF
PARAMETER (L=8, ITMAX=20)
REAL A(L,L), B(L,L)
!HPF$ PROCESSORS P(3,3)
!HPF$ DISTRIBUTE ( BLOCK, BLOCK) :: A
!HPF$ ALIGN B(I,J) WITH A(I,J)
C arrays A and B with block distribution
PRINT *, '********** TEST_JACOBI **********'
DO IT = 1, ITMAX
!HPF$ INDEPENDENT
DO J = 2, L-1
!HPF$ INDEPENDENT
DO I = 2, L-1
A(I, J) = B(I, J)
ENDDO
ENDDO
!HPF$ INDEPENDENT
DO J = 2, L-1
!HPF$ INDEPENDENT
DO I = 2, L-1
B(I, J) = (A(I-1, J) + A(I, J-1) +
* A(I+1, J) + A(I, J+1)) / 4
ENDDO
ENDDO
ENDDO
END
Параллельная программа на языке Fortran DVM
PROGRAM JAC_DVM
PARAMETER (L=8, ITMAX=20)
REAL A(L,L), B(L,L)
CDVM$ DISTRIBUTE ( BLOCK, BLOCK) :: A
CDVM$ ALIGN B(I,J) WITH A(I,J)
C arrays A and B with block distribution
PRINT *, '********** TEST_JACOBI **********'
DO IT = 1, ITMAX
CDVM$ PARALLEL (J, I) ON A(I, J)
DO J = 2, L-1
DO I = 2, L-1
A(I,J) = B(I,J)
ENDDO
ENDDO
CDVM$ PARALLEL (J, I) ON B(I, J), SHADOW_RENEW (A)
C Copying shadow elements of array A from
C neighboring processors before loop execution
DO J = 2, L-1
DO I = 2, L-1
B(I,J) = (A(I-1,J) + A(I,J-1) +
* A(I+1,J) + A(I,J+1)) / 4
ENDDO
ENDDO
ENDDO
END