Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > [Pro] распределенное приложение на Fortran...


Автор: Cross 4.12.2008, 22:04
Здравствуйте!
Столкнулась со следующей проблемой: есть научный проект, требующий высокопроизводительных вычислений.
Они собственно уже реализованы на С++ с помощью распределения на CORBA.
Но разработчики потерялись, код на С++ не работает, и копаться в нем нет желания.
Нашла нечто похожее на Fortran. Но без распределения.
Подскажите, имеет ли смысл сейчас применять Fortran???
Можно ли его использовать с CORBA?

Также меня интересует, платные ли для него компиляторы? 
(т.к. разрабатываемый проект должен использовать только бесплатное ПО)

А может стоит переписать все на Java???
Вообще Java применим для высокопроизводительных вычислений, 
или об этом смешно даже говорить?
(Дело в том, что Java я знаю лучше нежели другие языки... )
Читала, что на Java легче всего сделать распределение используя RMI...

Но важна скорость... 

Что посоветуете? В Интернете много информации о том, что Fortran - лидер 
в области высокопроизв. вычислений, но с другой стороны - у нас почему-то он не распространён...

Заранее спасибо за любый ответы и советы )






Автор: Иванофф 5.12.2008, 02:49
у вас как в сказке "приди не одетой и не раздетой, с подарком и без подарка"
CORBA и высопроизводительные вычисления - это вроде несколько разное.
проект написан, но разбираться не хотите.
бесплатное ПО и высокопроизводительные вычисления - тоже не совсем совпадает.
вы знаете Java, но ищете сторонних разработчиков, тогда причем ваше знание Java.
Fortran - лидер в области высокопроизв. вычислений если возьмете правильный компилятор и правильных программистов (которых вроде негде взять)

Автор: Cross 5.12.2008, 12:07
Дело в том, что вычислительное приложение, работающее на С++, как говорят, работало очень и очень медленно.
Поэтому и не хотят его восстанавливать. 

Цитата

бесплатное ПО и высокопроизводительные вычисления - тоже не совсем совпадает.


Почему бесплатное ПО "не совпадает" с высокопроизводительными вычислениями?
Нет бесплатных компиляторов? или что? 

Цитата

вы знаете Java, но ищете сторонних разработчиков, тогда причем ваше знание Java.


Я не хочу искать сторонних разработчиков, если бы знала, что Java даст приемлемую скорость,
использовала бы только ее.

CORBA или RMI используется для распределения, но разве это не относится к высокопроизводительным вычислениям.
Это же частный случай параллельных вычислений...

Автор: kemiisto 5.12.2008, 12:54
Цитата(Cross @  5.12.2008,  10:07 Найти цитируемый пост)
Дело в том, что вычислительное приложение, работающее на С++, как говорят, работало очень и очень медленно.

А что с ним случилось? Разработали новый (более быстрый) алгоритм?

Цитата(Cross @  5.12.2008,  10:07 Найти цитируемый пост)
Почему бесплатное ПО "не совпадает" с высокопроизводительными вычислениями?

Потому, что бесплатные FORTRAN-компиляторы на выходе дают более медленные исполняемые файлы, нежели платные. Это пожно погуглит: "FORTRAN Benchmarks". http://www.polyhedron.com/pb05-win32-f90bench_p40html, например.

Цитата(Cross @  5.12.2008,  10:07 Найти цитируемый пост)
Я не хочу искать сторонних разработчиков, если бы знала, что Java даст приемлемую скорость, использовала бы только ее.

Сначала хотел просто высказаться по поводу скорости Java, но потом решил зайти на старый-добрый http://shootout.alioth.debian.org/. http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=ifc&lang2=java, господа. smile 

Автор: Cross 5.12.2008, 13:26
Цитата

А что с ним случилось? Разработали новый (более быстрый) алгоритм?


изначально была программа на Fortran, и работала достаточно быстро. 
Но т.к. дело касается молекулярной динамики, потребовалось моделировать
все большее количество точек, потому решили переписать алгоритм на С++
и сделать его распределенным в локальной сети. 
Ну после запуска остались сильно недовольны скоростью... 
потому проект забросили, оставив код на С++ без комментариев.
Конечно можно в нем разобраться, но стоит ли? 

Цитата

Сначала хотел просто высказаться по поводу скорости Java...


В гугле столько разноречивой информации про Java... даже не знаю чему верить...
А что вы хотели сказать по поводу скорости Java???  smile 

Цитата

Потому, что бесплатные FORTRAN-компиляторы на выходе дают более медленные исполняемые файлы, нежели платные. 


Можете посоветовать выход из положения? 
И вообще, где найти информацию о том, насколько платные хорошие компиляторы для Фортран?
А можно ли обычную вычислительную программу на Фортране сделать распределенной? 
Или проще написать новую??? 

Автор: kemiisto 5.12.2008, 13:45
Цитата(Cross @  5.12.2008,  11:26 Найти цитируемый пост)
дело касается молекулярной динамики

 smile 

Цитата(Cross @  5.12.2008,  11:26 Найти цитируемый пост)
А можно ли обычную вычислительную программу на Фортране сделать распределенной?

Если я правильно понимаю распределённость:
Цитата(Википедия)
Распределённые вычисле́ния (distributed computing, grid computing, volunteer computing) — способ решения трудоёмких вычислительных задач с использованием двух и более компьютеров, объединённых в сеть.

то конечно можно. Например, GAMESS, GAUSSIAN, DALTON (это из тех QC считалок, которые я точно знаю, что написаны на FORTRAN) вроде бы распараллеливаются (с разным успехом). А иначе какой смысл их ставить на кластеры? Наверное, будет полезным почитать про http://en.wikipedia.org/wiki/Message_Passing_Interface.

Цитата(Cross @  5.12.2008,  11:26 Найти цитируемый пост)
А что вы хотели сказать по поводу скорости Java???

А что обычно говорят? smile Теперь вот и я неуверен...


Автор: Cross 5.12.2008, 18:41
Цитата

Наверное, будет полезным почитать про MPI.


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

Вообще я находила в гугле Java-апплеты, выполняющие вычисления, касающиеся молекулярной динамики. 
Работают быстро )))

А насчет скорости Java я конечно читала в основном только отрицательные отзывы... 
Но сейчас все больше пишут, что Java почти сравнялась по производительности с С++.
Не знаю, верить этому, или это просто рекламная кампания  smile 
Но факт в том, что программы, написанные на Java меня лично еще никогда не подводили...
А с С++ все сложнее... вот вроде есть у меня программа рабочая, но никто не может её запустить )))

Автор: Иванофф 6.12.2008, 02:18
а зачем вам сеть из средних компьютеров. дешевле поставить один нормальный двухпроцессорный четырехядерный компьютер и получить нормальную скорость. непонятно на каком этапе вы хотите съэкономить.

Автор: Cross 6.12.2008, 03:12
понимаете... это научный проект при университете. 
все сразу сделать все равно не получится, т.к. никто у нас не умеет программировать в стиле HPC.
Учиться уже нет времени, т.к. кандидатская на носу - а этот проект и будет защитой )))

Каждый аспирант делает что-то свое, какую-то часть...
Моя задача - сделать распределение. 
Все что касается многопроцессорных машин, это уже будет делаться после...
Если у института будут деньги на такие компьютеры ) 
А пока есть только аудитория с ЛВС ))) на том и надо работать 

Вот так собственно обстоит дело  smile 

Автор: kemiisto 6.12.2008, 03:21
Цитата(Cross @  5.12.2008,  16:41 Найти цитируемый пост)
Насколько я понимаю, MPI - это метод распараллеливания на разные процессоры, находящиеся на одной машине (т.е. на суперкомпьютере)

Нет, точнее, не только:
Цитата
Message Passing Interface (MPI) is a specification for an API that allows many computers to communicate with one another. It is used in computer clusters and supercomputers
.

Цитата(Cross @  5.12.2008,  16:41 Найти цитируемый пост)
А насчет скорости Java я конечно читала в основном только отрицательные отзывы... 

Я вот что думаю по этому поводу: хватит ли у Вас опыта писать "быстрый" код на FORTRAN. Там ведь тоже не всё так просто. Помните, лучший ЯП - тот, который программист знает лучше всего.

Цитата(Cross @  5.12.2008,  16:41 Найти цитируемый пост)
Но сейчас все больше пишут, что Java почти сравнялась по производительности с С++.

Думаю, имеется ввиду, что существенного опережения по скорости работы приложений C++ уже не даёт. В 2 раза, но это не так уж и критично.

Цитата(Cross @  5.12.2008,  16:41 Найти цитируемый пост)
Но факт в том, что программы, написанные на Java меня лично еще никогда не подводили...
А с С++ все сложнее... вот вроде есть у меня программа рабочая, но никто не может её запустить )))

Что значит: не может запустить? Есть программа в исходных кодах?

Автор: Иванофф 6.12.2008, 04:47
так бы сразу и написали. личный совет. разрабатывайте и отлаживайте отдельные части на разных машинах, а считайте на одной самой быстрой. добавьте ей памяти, если есть обмен поставьте диски в райд 0, иначе просто потеряете время на отладку в ЛВС.

Автор: Cross 6.12.2008, 12:13
Цитата

Что значит: не может запустить? Есть программа в исходных кодах?


Есть исходные коды, она компилируется... но ничего не делает...

Но если все равно научная руководительница недовольна скоростью и хочет переделывать...


Автор: popovda 6.12.2008, 12:47
Что касается MPI - та библиотека имеет 2 глобальных приемущества для создания распределенных интерфейсов:
1. Она кроссплатформенна (то есть не придеться сильно изменять код для др. ОС)
2 позволяет контролировать вычислительную нагрузку и создавать виртуальные топологии ЛВС, что может быть очень полезно для некоторых задач.

Но есть недостатки - слабая поддержка и современных стандартов Фортран и C++. 

Поэтому, поскольку Вам так или иначе надо получить высокопроизводительный код, а значит понадобится коммерческий качественный компилятор. Если платформа Intel, то обратите внимание на Intel Cluster OpenMP - возможно Вам не придется и код-то сильно менять (вычислительную часть). Медленная работа может быть из-за использования большого количества виртуальных функций-членов. Что для CORBA-технологии  очень вероятно. Вообще, в вычислительных задачах надо избегать позднее связывание.

Автор: Cross 6.12.2008, 22:57
Цитата

Поэтому, поскольку Вам так или иначе надо получить высокопроизводительный код, а значит понадобится коммерческий качественный компилятор.


Моя задача - использовать только бесплатное ПО, и компиляторы в том числе.
Как решить эту проблему?

Автор: kemiisto 6.12.2008, 23:30
Цитата(Cross @  6.12.2008,  20:57 Найти цитируемый пост)
Как решить эту проблему?

А чем Вас существующие http://en.wikipedia.org/wiki/Molecular_dynamics#Major_software_for_MD_simulations не устраивают?

Автор: Иванофф 7.12.2008, 02:15
Цитата(Cross @ 6.12.2008,  22:57)
Моя задача - использовать только бесплатное ПО, и компиляторы в том числе.
Как решить эту проблему?

как научиться быстро бегать в мешке. наверно есть специальная методика.
хорошо что еще не заставляют считать на бесплатных компьютерах.

какая всетаки цель вашей работы? действительно что-то быстро просчитать или определить "сколько студент может прожить на стипендию"

Автор: Cross 7.12.2008, 13:47
Да меня то собственно они всем устраивают ))) 
Но это - предложенная мне диссертационная работа.  smile 
Ясно что это никому не надо, учитывая обилие подобных программ на рынке,
а университет все равно хочет это делать  smile 

Автор: Cross 7.12.2008, 23:56
Цитата

какая всетаки цель вашей работы? 


Цель - защитить диссертацию  smile 

Методы - использовать по возможности бесплатное ПО, и сделать так, чтобы
будущему поколению аспирантов была основа для работы

Кстати, не подскажите, где взять Visual Fortran ???
В Гугле не могу найти ссылку... Там только ссылка на различные компиляторы.


Автор: kemiisto 8.12.2008, 00:06
Цитата(Cross @  7.12.2008,  21:56 Найти цитируемый пост)
Кстати, не подскажите, где взять Visual Fortran ???

Купить http://www.google.com/products?hl=en&rlz=1B3GGGL_enNO304&q=Visual+studio+2008&um=1&ie=UTF-8&sa=X&oi=product_result_group&resnum=1&ct=title и http://www.intel.com/cd/software/products/asmo-na/eng/278834.htm. Хотя, вроде как, можно и только второе купить, там в Professional версии включена VS 2005.

Цитата(Cross @  7.12.2008,  21:56 Найти цитируемый пост)
Цель - защитить диссертацию

А когда защита и что за диссертация?

Автор: Cross 8.12.2008, 00:20
Защита в следующем году. 
А диссертация представляет собой оптимизацию программного комплекса
для системы физико-химического моделирования свойств шлаковых расплавов.

Система имеет удаленный интерфейс. Была основана на СУБД Oracle.
Затем переведена на бесплатную PostgreSQL.

Моя задача - заставить работать для начала хотя бы написанное в 2003 году приложение 
на Fortran. Потому что, как я уже говорила, написанное после вычислительное приложение на С++,
не устроило научного руководителя по скорости. К тому же там все основано на XML-потоках...
т.е. промежуточные результаты расчетов постоянно сбрасываются сначала в XML, 
потом в базу... 

Так что мне нужно еще оптимизировать и обмен данными. 

Распределение не входит в мою задачу, этим будет заниматься другой человек.
Но от меня зависит выбор языка для реализации вычислительного алгоритма.
Наверное остановлю выбор на Fortran...

Добавлено через 14 минут и 55 секунд
Кстати, а в MS Visual Studio 6.0 может быть фортран?

Автор: Cross 8.12.2008, 14:40
Нашла в интернете информацию о том, что на западе многие институты перешли с Фортрана на Питон. Портированы многие Фортран библиотеки. Особенно часто применяют для расчетов в химической отрасли. В НАСА для научно-моделирующих программ применяется Питон, как один из основных языков. 

Кто-нибудь может прокомментировать эти данные???

Автор: kemiisto 8.12.2008, 15:22
Цитата(Cross @  8.12.2008,  12:40 Найти цитируемый пост)
Кто-нибудь может прокомментировать эти данные??? 

В местных магазинах видел http://www.amazon.com/Python-Scripting-Computational-Science-Engineering/dp/3540739157/ref=sr_1_1?ie=UTF8&s=books&qid=1228738455&sr=1-1. Оказалось, что http://folk.uio.no/hpl/ тоже местный. Как видите, почти все курсы по Computational Science читаются с использованием Python в качестве ЯП. Но местные "фортранщики" скептически относятся к Python. В основном из-за скорости, по которой он существенно уступает той же Java.

Автор: Cross 8.12.2008, 23:27
Да, я нашла результаты тестирования... Там Phyton в 10 раз медленнее, чем Fortran...

В общем решила работать с Фортраном, вот только если не сложно, не могли бы вы мне разъяснить вот что:

чем отличается CORBA/DCOM/RMI от MPI ???

Потому что везде, где пишут о распределенных или параллельных вычислениях, 
говорят о MPI, но не о CORBA  например. 

У нас в проекте распределение было сделано с помощью CORBA.
Так вот я и не пойду, без CORBA или чего-то подобного можно распределить 
задачу на несколько машин???

И вообще, можно ли использовать CORBA с Fortran? Что-то в интернете не найду никак

И если не CORBA, тогда что?


Автор: Sannis 9.12.2008, 07:53
Имхо можно с тем же успехом применять C++. Использовать ли при этом MPI или нет -- зависит задачи, плюсом для вас может послужить то, чо там уже реализованы высокоуровневые примитивы обмена данными.

Автор: Cross 9.12.2008, 11:09
Сделала тест простой программы на Java, Phyton и Fortran. 

Привожу код на Phyton:

Код

import cmath
import time
s1=0
s2=0
s3=0
i=0
j=0
t3=0
t1 = time.time();
print t1;
for i in xrange(10000):
    for j in xrange(10000):
        s1=0.01+j
        s2=0.02+i
        s3=cmath.sin(i+j)
t2 = time.time();
t3 = t2-t1
print t3
print s3


Использовала Phyton 2.4 со стандартным компилятором. 

Fortran c интеловским компилятором, правда со старым - 7 версия

Java у меня стоит из JDK 6.0

В общем результаты такие:

Fortran - примерно 5 мс

Java - 13 мс

Phyton - 206 мс !!!  smile 

Этот тест нашла на каком-то сайте... там были другие результаты. 
И была неверно написана функция на Phyton.

Не могу оттестировать на С++, т.к. пришлось удалить Visual Studio 6.0, 
чтобы поставить Compaq Visual Fortran. 


Автор: Cross 9.12.2008, 12:24
Помогите кто-нибудь с программой для тестирования фортрана. 
Я ее запускала без определения точного времени, а когда подставила функцию времени,
при дебаге выдается ошибка   error LNK2001: unresolved external symbol _TIME

Вот код:

Цитата

program ccc
IMPLICIT none
REAL :: s1,s2,s3
REAL :: I,J
 integer  n, time  
         n = time()  
         write(*,*) 'Seconds since 0 1/1/70 GMT = ', n  



DO J=1,10000
DO I=1,10000
      s1=0.01+I
      s2=0.02+J
      s3=SIN(I+J)
   END DO
END DO

PRINT *,s3
end program ccc



Добавлено @ 12:26
Догадываюсь, что наверное не подключила какие-то файлы, но какие?
Нигде не могу найти...

Автор: popovda 13.12.2008, 14:27
Так Вы - физхимик?smile Приятно. Я тоже. А где защищаться собираетесь? 

Что до бесплатных компиляторов - пишите под Linux - для него и Intel Fortran, и Intel C++ свободные есть. 

Ну а что до Питона, то в нем удобно делать GUI к проге на фортране - быстро и гибко.

Цитата

Код

integer  n, time  
         n = time()  
         write(*,*) 'Seconds since 0 1/1/70 GMT = ', n  



Тут у Вас 2 ошибки 

1. вы объявляете переменную time, а потом обращаетесь к ней как к функции - уже ошибка, т.к. внешнюю функцию, если time - функция - надо определять так
Код

integer, external :: time

2. насколько я помню - time - не является функцией стандарта языка. Значит Вы где-то не прописали пути к библиотеке, которая её использует. Или не указали lib-файл. Причём, мне кажется, что это либо функция из Вашего пакета программ, либо вообще сторонняя функция.  

Автор: Cross 14.12.2008, 13:56
Цитата

Так Вы - физхимик?smile Приятно. Я тоже. А где защищаться собираетесь? 


Я не физхимик! Я информатик всего-лишь ) Моя задача только создать программный комплекс.

Цитата

Что до бесплатных компиляторов - пишите под Linux - для него и Intel Fortran, и Intel C++ свободные есть. 


Да, спасибо за совет! Я уже нашла решение для Windows - использование CDT под Eclipse!
(насколько я понимаю там реализованы адаптеры к линуксовому компилятору, дебагеру... и т.д.)

Вот только проблема... установила я Photran для Eclipse... потом 
стала пытаться поставить CDT Eclipse, но ни одна программа на С++ не делает exe файла...
Не знаю, что и делать. 

Автор: Иванофф 21.12.2008, 01:41
Цитата(Cross @ 8.12.2008,  00:20)
Защита в следующем году. 
А диссертация представляет собой оптимизацию программного комплекса
для системы физико-химического моделирования свойств шлаковых расплавов.

Что -то я перестаю понимать в научной жизни.
Вы собираетесь защититься в следующем году по теме в которой пока ничего не понимаете.
Неужели с наукой у нас так тяжко. И специальность ИНФОРМАТИК.
Непонятно какой комплекс вы хотите создать. На это нужен год нормальной практики, чтобы дальше хоть что-то осмысленное делать.

Автор: Cross 21.12.2008, 12:36
А мне собственно не нужно ничего особенно понимать в физической химии. 
Алгоритмы уже разработаны до меня. Да и сам программный комплекс.
Моя задача - реструктуризация и оптимизация производительности.

Автор: Cross 21.12.2008, 17:30
Я так и не нашла ответа на вопрос, как создать распределенное приложение на FORTRAN используя CORBA...
Нашла информацию, что есть IDL-to-FORTRAN mapping, но как его реализовывать не нахожу...

Я в этом человек новый))) помогите чем сможете  smile 

программа на FORTRAN 77... нужно ли ее переписывать в FORTRAN 2003 с объектами, чтобы
использовать с CORBA или можно все сделать без объектов?
Если да то как?

Где найти информацию по этой теме?


Автор: Фантом 27.12.2008, 17:52
Насколько мне известно, отображения CORBA для Fortran'а попросту не существует. Впрочем, это не так страшно, поскольку скорость работы этого изделия с языками, которые оно поддерживает, оставляет желать лучшего.

Посему общий совет. Если Вы всерьез хотите сделать все нормально (а не слепить что-нибудь сносное, отчитаться и забыть), то перебирайтесь под Linux, доводите до ума (если понадобится) программу на Фортране и пользуйтесь MPI. Это будет эффективнее, да и сложившимся в этой области программирования стандартам соответствует.


Автор: popovda 31.12.2008, 21:41
Гм... Корбой я бы всё же не рекомендовал пользоваться. Тормознуто будет сильно.... Очень сильно. Компилятора 2003 фортрана с полноценным (в рамках 2003 стандарта) ооп просто ещё нет (точнее есть - но только IBL Fortran XL для ppc64). Достаточно 95-го компилятора. Для Вашей задачи, если Вы уж решили таки кобру юзать, вместо таких костылей, как IDL2Fortran mapping  использовать iso_c_binding и вызовы Corba-API  из C на фортране.

Автор: Cross 1.1.2009, 16:38
Использование MPI возможно только под Linux???

Я читала что под Windows тоже можно использовать... в среде eclipse

Подскажите, какой лучше использовать дистрибутив. Я работала только с Fedora 6.0..

Автор: Фантом 1.1.2009, 19:16
Цитата(Cross @ 1.1.2009,  16:38)
Использование MPI возможно только под Linux???

Я читала что под Windows тоже можно использовать... в среде eclipse

Подскажите, какой лучше использовать дистрибутив. Я работала только с Fedora 6.0..

Нет, конечно, но под Linux будет намного проще. Это обычное следствие явления "корпоративный стандарт" - подавляющее большинство людей в этой области работают на Linux, поэтому и инструментов там больше, и ответы на вопросы новичку будет найти проще.

Дистрибутив - в принципе сойдет любой, но оптимальный вариант - Scientific Linux. В нем уже встроено большинство того, что нужно при распределенных вычислениях, да и работать с ним Вам будет достаточно просто - он основан на том же RedHat/Fedora.

Автор: Cross 1.1.2009, 21:18
А Scientific Linux можно поставить на VMWare Workstation???

Автор: Фантом 2.1.2009, 00:36
Цитата(Cross @ 1.1.2009,  21:18)
А Scientific Linux можно поставить на VMWare Workstation???

Хм... наверное, да. Никогда не пробовал это делать, но ничего специфического, что этому бы препятствовало, вроде нет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)