Документ взят из кэша поисковой машины. Адрес оригинального документа : http://wasp.phys.msu.ru/forum/lofiversion/index.php?t1826.html
Дата изменения: Unknown
Дата индексирования: Mon Apr 11 12:15:31 2016
Кодировка: Windows-1251
Студенческий форум Физфака МГУ > Posix Threads для Fortran'а
Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Posix Threads для Fortran'а
Студенческий форум Физфака МГУ > Наука физика > Есть проблема
Fedoroff
Существует ли такое в реальности? Если да, то где можно найти?
ivandasch
На чистом фортране конечно нет, но

можно миксовать код, сделать на фортране функцию и вызывать ее в pthread_create.
например у тебя такое
Код
extern "C"
{
   void __stdcall FR1(int *m, int *n);
}

при этом в файле bla.for лежит нечто подобное
Код
SUBROUTINE FR1(N,M)
M = N*N
RETURN
END

код можно компилировать связкой gcc + g77 или gcc + ifort или icc + ifort
Кстати в интеловском компиляторе есть поддержка OpenMP посмотри на это.
Компилятор абсолютно бесплатен( для линукса, он то тебе и нужен)
Fedoroff
//На чистом фортране конечно нет

Да вот в инете нарвался на упоминание такой штуки.

А сишные куски я не хочу вызывать, т.к. буду компилировать только фортрановским компилятором (не бесплатным =)). Очень нужна большая скорость.
ivandasch
Как эта штука называется??? уж не OpenMP ? Насколько я знаю, она как раз и создавалась, чтоб код можно было портировать и на SMP и на MPP, дабы не юзать как раз POSIX треды( типа низкий уровень) и прочее. И вообще впервые слышу про такое, дай ссылки

Кстати насчет скорости. Создатели LAPACK Netlib настоятельно рекомендуют использовать gcc и g77, дабы скорость была большая. Конечно если ты счастливый обладатель рабочей станции от Silicon Graphics, то конечно надо юзать свое smile.gif. Также все хвалят интеловский компилятор, а какой у тебя?
Fedoroff
А чем POSIX'ы плохи? Низкий уровень - хорошо. Ты всегда знаешь что происходит =).

Цитата(ivandasch @ 31 мая 2005г. - 20:09)
дай ссылки
*

Набираешь в гугле "Posix threads Fortran" и смотришь на третью ссылку сверху (авось у тебя так же будет), которая у меня сегодня не открылась. И читаешь "... Algorithm 821: A Fortran interface to POSIX threads ...". В общем ссылка на какую то статейку, которую предлагают купить. Судя по абстракту, некая американская поделка. Правда в авторах человек, который вроде LAPACK делал (не помню сейчас).

LAPACK не использую. Есть вызов функций из Intel Math Kernel Library.
Компилятор Intel Visual Fortran Compiler 8.1 pro (да, да завидуйте все! 09.gif ).
Его есть за что хвалить.
ivandasch
Не понял.... Какие же POSIX треды в винде? Может я и ошибаюсь....
У меня тоже интеловский компиль, он поддерживает OpenMP, и IMKL есть
(прикольный там Lapack и BLAS для разреженных матриц), но для Линукса онибесплатны для некоммерческого использования(качаются влет) . Я просто читал на parallel.ru, что OpenMP это и есть то что тебе нужно.

У меня она тоже не открылась:))) еще в первый раз
А во всех статьях, что гугль нашел, как раз говорится, что нигде нет, а у нас есть, купите у нас компиль:)))) Я думаю тебе все таки стоит попробовать возможности Интеловского компилятора и поюзать OpenMP

также почитай http://parallel.ru/tech/tech_dev/openmp.html
Fedoroff
Цитата(ivandasch @ 2 июня 2005г. - 11:24)
Не понял.... Какие же POSIX треды в винде?
*

Так по-моему, в том и прикол, что они и под Linux и под Windows работают.

Спасибо за ссылки, пойду почитаю =).
ivandasch
В том то вся и фишка, что native POSIX тредов для винды нету. даже создан спец проект для портирования их, понятно, что ни о какой скорости при этом думать нельзя
http://sources.redhat.com/pthreads-win32 Вот сайт этого проекта, посмотри если интересно. Вообще, насколько я знаю, POSIX layer поддерживается проектами cygwin и mingw. Первый просто жуткий тормоз, второй терпимее. Hence, у тебя выбора просто нету: либо OpenMP, либо юникс:)
Fedoroff
Цитата(ivandasch @ 2 июня 2005г. - 13:30)
Hence, у тебя выбора просто нету: либо OpenMP, либо юникс:)
*

Так я хочу и то и то. =)
Есть многопроцессорная машина c Unix'ом, надо использовать.

Цитата
В том то вся и фишка, что native POSIX тредов для винды нету. даже создан спец проект для портирования их, понятно, что ни о какой скорости при этом думать нельзя

Так идея в том, чтобы прогу не переписывать каждый раз. Отлаживать под Windows, а запускать под Linux. Пусть под виндой тормозит, главное чтоб под Linux'ом летала.
ivandasch
Хы круто:))) Где ты работаешь?? smile.gif))
Ну ты что выбрал OpenMP?или все-таки Posix Thread......

Насчет ниток - все облазил, но открытой библиотеки для фортрана нету sad.gif так что альтернативы pthread.h пока нет.

P.S А машинка то какая? сколько процов? Кто производитель? или самосборка?
Какой Юникс( или Линукс)? интересно же:) И какой компиль будет на тачке?
Fedoroff
На волне я работаю, аспирантом. =)

Итак, проблема в полном изложении.
Есть кластер с 6 нодами. Каждая нода - двухпроцессорная машина. Нужно распараллелить программу. Есть вариант MPI и при запуске указывать 12 нод. В этом случае кластер теряет свою однородность => неравномерная загрузка нод, что есть плохо. Второй вариант запускать на 6 нодах, но кусок программы, который работает на каждой ноде отдельно создает два потока. Этот вариант мне кажется лучшим. Однако не знаю какими средствами его лучше реализовать.

P.S. Каждая нода - Xeon 2.6, головная 2.4
Система - Linux Fedora Core 2. Компиль тот же, только под Linux.

P.P.S to ivandasch: а это не ты к нам в лабу приходил по поводу задачи для курсача по программированию?
ivandasch
мда интересно, я думаю тебе лучше связаться с людьми с parallel.ru У них примерно такой же кластер(идейно), только нод больше. Твоя идея хороша, только есть маленький каверзный вопрос. Наколько я знаю, все проекты кластеризации( OpenMOSIX или Beowulf) как раз таки делают все процы одинаковыми, как ты будешь различать их, точнее как их будет различать scheduler? вот в чем вопрос. Хотя повторяю, лучше обратиться к людям с parallel.ru

P.S. Неа я на кафедре математики smile.gif (3 курс) просто меня интересуют параллельные вычисления:))

P.P.S http://parallel.ru/computers/reviews/beowulf.html там описана твоя проблема
Fedoroff
Цитата
как их будет различать scheduler?

Есть подозрение =), что MPI умеет отличать реальные ноды от процессоров на нодах. Во всяком случае, при установке спросил поддерживать ли SMP распараллеливание или нет (насколько я понял наших админов =)).
Fedoroff
to ivandasch:
А тебя параллельные вычисления интересуют с практической или теоретической точки зрения? =)

Если ты имеешь ввиду вот это
Цитата
Для эффективной организации параллелизма внутри одной SMP-cистемы возможны два варианта:

1. Для каждого процессора в SMP-машине порождается отдельный MPI-процесс. MPI-процессы внутри этой системы обмениваются сообщениями через разделяемую память (необходимо настроить MPICH соответствующим образом).
2. На каждой машине запускается только один MPI-процесс. Внутри каждого MPI-процесса производится распараллеливание в модели "общей памяти", например с помощью директив OpenMP.

То меня интересует прежде всего, что будет быстрее 1 или 2. А также слово "например" в предложении "например с помощью директив OpenMP". Что еще бывает?

P.S. На parallel.ru тоже создал тему =). Интересно, заходи.
ivandasch
c практической, я занимаюсь асимптотическими методами, т.н уравнения с малыми параметрами, сингулярно возмущенными задачами, есть планы перейти на многомерные задачи, типа нелинейных волноводов, моделированни поведений галактик, и проч. Могут потребоваться серьезные вычисления, вот и интересно стало:)
Насчет других интерфейсов: их полно, но не для нас, ибо их создают конторы, торгующие SMP:) так что альтернативы нету:)
Fedoroff
Когда на нелинейные волноводы переходить будешь, скажи =). А то я решаю волновое уравнение. Интересно будет посмотреть на подход математиков =).
ivandasch
тебе вообще стоит к Боголюбову А.Н. обратиться, он крупнейший ученый, занимающийся как раз этим:)))) А я кто? ламо самое настоящее...
Fedoroff
Так я только в плане распараллеливания. Меня техника интересует.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2016 IPS, Inc.