Почему именно под Windows? Просто потому, что я, как и многие пользователи,
люблю Linux еще менее, чем Windows. Но это, конечно, дело вкуса. Здесь же написано
про то, что попробовал сам. А на машине у меня стоит
Windows-2000 и
Compaq Fortran 6.6
Увы, стоит сразу же предуведомить читателя, что годится далеко не каждый Windows,
а только
Windows-2000/NT/XP Professional, Home-edition уже не годится.
Что такое MPI-ферма? Это многопроцессорная вычислительная система, в которой основным
межпрограммным интерфейсом является известный с 1995 года Message Passing Interface,
сокращенно - MPI. Зачем нужна многопроцессорность - чтобы быстрее считать!
Начало 21 века характеризуется бурным развитием кластеростроения. В каждом приличном
вычислительном центре на смену традиционным дорогущим системам с небольшим числом
процессоров появляются сравнительно недорогие, легко наращиваемые фермы (кластеры) из
потенциально большого числа процессоров от Intel или DEC. Такую ферму можно заказать
"под ключ" у энтузиастов из ИПМ или даже собрать самостоятельно, как это было сделано
в ЛИТ ОИЯИ. Доступность таких ферм вызывает у пользователей желание перенести туда
свои программы. У большинства из них это желание пропадает, когда они узнают, что им
придется серьезно поработать над своими программами с целью их "распараллеливания".
Однако кое-кто серьезно готов на все, лишь бы их программа могла считаться побыстрее.
И прежде всего эти пользователи думают: а нельзя ли мне получить такую ферму в свое
собственное, полное владение?
Таких пользователей не может не радовать возможность:
- купить в магазине системный блок IBM PC, где установлен не один, а целых 2 (два!)
процессора;
- а еще дешевле - поставить в свой компьютер процессор, построенный на базе
технологии HyperThreading, основополагающие сведения о которой можно узнать
из /3/. "Не два, но полтора!" - говорил в подобных случаях Козьма Прутков.
И то и другое сейчас вполне реально, и даже не слишком дорого! Более того, существуют
владельцы персональных компьютеров, даже и не подозревающие о том, что у них уже есть
немного более, чем один процессор.
Имея такое чудо в собственном рабочем кабинете и освоив идеологию MPI, можно
не торопясь распараллеливать свои программы в интимной обстановке и только потом
переносить их для "промышленного счета" на общедоступную ферму с большим числом
процессоров. Более того - MPI можно осваивать и на традиционной, однопроцессорной
машине!
Итак, сегодня у Вас есть реальный шанс получить на своем рабочем столе полигон для
автономной подготовки программ, пригодных для эксплуатации на общедоступных кластерах.
А кому-то и самого этого полигона покажется достаточным, ведь его процессор может быть
намного быстрее, чем процессоры казенного кластера, купленные несколько лет назад!
-
1. Скачайте себе из Интернета дистрибутив MPI. Он представляет из себя
единственный исполняемый файл обьемом около 5 Мбайт. Просто запустите его
и скажите, в какую директорию Вы хотите его распаковать.
Я поставил себе MPICH.nt.1.2.5, взятый с сайта:
www.mcs.anl.gov/mpi/mpich
В распакованном виде это хозяйство занимает около 10 Мбайт.
Если теперь Вы запустите Диспетчер задач Windows (обычно для этого нажимают
известные 3 кнопки: Ctrl+Alt+Del - sic!) Вы увидите в списке задач
MPD.exe - это так называемый MPI-демон. Целью его жизни является
обслуживание межпроцессных коммуникаций, необходимых для работы
Ваших MPI-программ.
-
2. Установка пакета MPI обычно происходит быстро и без хлопот. Предположим, Вы
поставили его в директорию C:\MPI
Как теперь им пользоваться? Вы конечно прочитали "MPI - the complete reference" /1/
или хотя бы известный опус "Как нам распараллелить нашу программу" /2/,
поэтому здесь расскажем только о том, как настроить Compaq Fortran на работу под MPI.
Итак: откройте Ваш "WorkSpace" или создайте новый.
-
a) в меню
Project - Settings - C/C++ - Code generation
установите
"Calling convention" = cdecl*
-
б) в меню
Project - Settings - Fortran - External procedures
с той же целью установите
"Argument passing conventions" = C, by reference
-
в) в меню
Project - Settings - Fortran - Preprocessor - Include and USE Path
добавьте
C:\MPI\Sdk\include
-
г) в меню
Project - Settings - Link - General - Object/Library modules
добавьте
C:\MPI\Sdk\lib\mpich.lib
Для чего сие надобно?
Во-первых, чтобы при вызове подпрограмм параметры передавались по ссылке и в
том порядке, который принят в С-компиляторе (подпрограммы из mpich.lib
написаны на языке С и предназначены как для вызова из фортрана, так и из С !).
Во-вторых, чтобы C и Фортран-компиляторы знали, где искать основные MPI-headers mpi.h и mpif.h
и подпрограммы, входящие в состав пакета MPI.
Вот вроде бы и все. Теперь компиляция будет делаться в совместимом с MPI
режиме, а линкер будет знать, откуда брать программы пакета MPI.
Предположим, Вы успешно собрали MyProg.exe - исполняемый файл своей программы,
и запустили его на счет. Невооруженным глазом трудно заметить, на сколько же процессов
"распараллелилась" Ваша программа, поэтому не поленитесь напечатать полученное в начале
ее работы значение функции MPI_COMM_SIZE. Например, так :
-
call MPI_COMM_RANK(MPI_COMM_WORLD,MPI_rank,ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD,MPI_size,ierr)
if(MPI_rank.eq.0) write(*,*) ' MPI-run using',MPI_size,' processes'
Вот теперь, выполняя привычную команду MyProg.exe, Вы получите верные сведения о том,
что используется ровно 1 (один) процесс! Оказывается, запускать MPI-программу,
распараллеленную на несколько (скажем, на 2 процесса, больше на нашей собственной, настольной
ферме реально и не стоит!), Вам придется через посредника, в роли которого выступает
программа MPIRUN:
c:\mpi\mpd\bin\mpirun.exe -np 2 MyProg.exe
или
c:\mpi\mpd\bin\mpirun.exe -np 2 MyProg.exe > Output.txt
если Вы намерены переадресовать вывод MyProg в файл Output.txt
А теперь, если Вам, паче чаяния, удалось пройти через все эти (впрочем не слишком большие)
трудности, и Вы все еще не оставили мысль о собственной MPI-фермочке под Windows, или же
воодушевились мечтой о небольшом MPI-колхозе, прочитайте более солидный манускрипт
в файле C:\mpi\mpichntman.pdf
Но можно и ограничиться только что полученными навыками, их вполне хватит для того,
чтобы успешно распараллелить Вашу собственную программу, а затем считать ее на Вашей
собственной 2- или 1.5-процессорной ферме.
Литература:
1) MPI: The complete Reference. MIT Press, Cambridge, Massachusetts, 1997.
2) http://www.jinr.ru/programs/publ/bulletin/bulletin.htm
3) http://www.intel.com/technology/hyperthread/
4) http://parallel.ru
|