Почему именно под Windows? Просто потому, что я, как и многие
пользователи, люблю Linux еще менее, чем Windows. Но это,
конечно, дело вкуса. Здесь же написано про то, что попробовал сам. А на
машине у меня стоит Windows-2000 и Compaq Fortran 6.6.
Увы, стоит сразу же предуведомить читателя, что годится далеко
не каждый Windows, а только Windows-2000/NT/XP Professional,
Home-edition уже не годится.
Что такое MPI-ферма? Это многопроцессорная вычислительная
система, в которой основным межпрограммным интерфейсом является
известный с 1995 года Message Passing Interface,
сокращенно - MPI [1,2]. Зачем нужна многопроцессорность?
Чтобы быстрее считать!
Начало 21 века характеризуется бурным развитием кластеростроения.
В каждом приличном вычислительном центре на смену традиционным
дорогущим системам с небольшим числом процессоров появляются
сравнительно недорогие, легко наращиваемые фермы (кластеры) из
потенциально большого числа процессоров от Intel или DEC.
Такую ферму можно заказать "под ключ" у энтузиастов из ИПМ или
даже собрать самостоятельно, как это было сделано в ЛИТ ОИЯИ.
Доступность таких ферм вызывает у пользователей желание перенести туда
свои программы. У большинства из них это желание пропадает, когда
они узнают, что им придется серьезно поработать над своими
программами с целью их "распараллеливания".
Однако кое-кто серьезно готов на все, лишь бы их программа могла
считаться побыстрее. И прежде всего эти пользователи думают: а нельзя
ли мне получить такую ферму в свое собственное, полное владение?
Таких пользователей не может не радовать возможность:
- купить в магазине системный блок IBM PC, где установлен
не один, а целых 2 (два!) процессора;
- а еще дешевле - поставить в свой компьютер процессор, построенный
на базе технологии HyperThreading, основополагающие
сведения о которой можно узнать из [3]. "Не два,
но полтора!" - говорил в подобных случаях Козьма Прутков.
И то и другое сейчас вполне реально, и даже не слишком дорого.
Более того, существуют владельцы персональных компьютеров, даже и не
подозревающие о том, что у них уже есть немного более, чем один процессор!
Имея такое чудо в собственном рабочем кабинете и освоив идеологию
MPI, можно не торопясь распараллеливать свои программы
в интимной обстановке и только потом переносить их для "промышленного
счета" на общедоступную ферму с большим числом процессоров.
Более того - MPI можно осваивать и на традиционной,
однопроцессорной машине!
Итак, сегодня у Вас есть реальный шанс получить на своем рабочем
столе полигон для автономной подготовки программ, пригодных для
эксплуатации на общедоступных кластерах. А кому-то и самого этого
полигона окажется достаточно, ведь его процессор может быть
намного быстрее, чем процессоры казенного кластера, купленные
несколько лет назад!
-
Скачайте себе из Интернета дистрибутив MPI.
Он представляет собой единственный исполняемый файл объемом около
5 Мбайт. Просто запустите его и скажите, в какую директорию
Вы хотите его распаковать.
Я поставил себе MPICH.nt.1.2.5, взятый с сайта
www-unix.mcs.anl.gov/mpi/mpich/.
В распакованном виде это хозяйство занимает около 10 Мбайт.
Если теперь Вы запустите Диспетчер задач Windows (обычно для
этого нажимают известные 3 кнопки: Ctrl+Alt+Del - sic!)
Вы увидите в списке задач MPD.exe - это так называемый
MPI-демон. Целью его жизни является обслуживание межпроцессных
коммуникаций, необходимых для работы Ваших MPI-программ.
-
Установка пакета MPI обычно происходит быстро и без хлопот.
Предположим, Вы поставили его в директорию C:\MPI.
Как теперь им пользоваться? Вы, конечно, прочитали "MPI - the
complete reference" [1] или хотя бы известный опус
"Как нам распараллелить нашу программу" [4],
поэтому здесь расскажем только о том, как настроить
Compaq Fortran на работу под MPI.
Итак: откройте Ваш "WorkSpace" или создайте новый.
- в меню
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-процессорной ферме.
Литература:
- MPI: The complete Reference. MIT Press, Cambridge, Massachusetts, 1997.
- http://parallel.ru
-
http://www.intel.com/technology/hyperthread/
-
http://www.jinr.ru/programs/publ/bulletin/bulletin.htm
|