[image]

Фортран

Есть тут с кем побазарить про это?
 
1 4 5 6 7 8 9 10
+
-
edit
 

Garry_s

опытный


G.s.>> Фортран игнорирует пробелы, поэтому из-за замены запятой на точку, вместо выполнения 10 раз какого-то набора операций, действительной переменной DO10I было присвоено значение 1.10.
G.s.>> Причем эта ошибка не потянула за собой других, транслятор её, естественно, пропустил, а расчет оказался ошибочным.
cholev> Понял. С Фортраном знаком со студенчества 80х. Типовая задача для зачета. Наверно там был и цикл DO.
cholev> В примере наверно будет END DO, а вот начало цикла из за синтактической ошибки нет. На стадия отладки програм непонятно, как все это проходит незаметно.
Специальный оператор окончания цикла END DO появился уже в более поздней версии, кажется Ф77.
А в более древних, цикл обязательно должен заканчиваться пустым оператором с меткой, в данном случае
10 CONTINUE
Т. к. заголовок цикла превратился просто в оператор присваивания, транслятор должен был дать предупреждение, а не ошибку, что есть Не используемая метка 10.
Да и то, наверное, тоже в поздних версиях.
END DO частично решал эту проблему, но создавал новую: можно было перепутать, к какому заголовку цикла относится данный конец.
   96.0.4664.10496.0.4664.104
RU yacc #11.01.2022 09:18  @Татарин#11.01.2022 03:43
+
-
edit
 

yacc

старожил
★★★
yacc>> Либо когда хочется рассчитать но очень по простому - у него синтаксис очень простой
Татарин> А у кого тогда сложный? :)
Да тот же Питон - списки, кортежи
Скажем при работе с регулярными выражениями функция пакета может возвращать... список кортежей.

НО! В умелых руках при наличии большого количества пакетов программа получается компактной.
   92.0.4515.10792.0.4515.107
RU yacc #11.01.2022 09:21  @Татарин#11.01.2022 03:38
+
-
edit
 

yacc

старожил
★★★
Татарин> Хотя С++, будем честны, для расчётов, да ещё в больших объёмах (привет менеджмент памяти ручками), это та ещё хрень.
Вот как раз в С++ с мат. библиотеками все просто - этим занимаются конструкторы деструкторы.
Менеджмент памяти нужен в своих приложениях если надо сделать документ сложной структуры с витееватым набором контейнеров из классов.
Впрочем подобное на Фортране не пишут вообще :p
   92.0.4515.10792.0.4515.107
RU спокойный тип #11.01.2022 09:22  @yacc#11.01.2022 09:18
+
-
edit
 

спокойный тип
Спокойный_Тип

старожил
★★
☠☠
yacc>>> Либо когда хочется рассчитать но очень по простому - у него синтаксис очень простой
Татарин>> А у кого тогда сложный? :)
yacc> Да тот же Питон - списки, кортежи
yacc> Скажем при работе с регулярными выражениями функция пакета может возвращать... список кортежей.
yacc> НО! В умелых руках при наличии большого количества пакетов программа получается компактной.

ещё питон можно параллелить.
это тоже усложняет код относительно фортрана но если в нужных местах и правильно это делать то ускорение на реальных задачах на порядки, опять же юникорн и джанго - можно миркосервисы с REST делать.

фортран гораздо более простой по синтаксису так это чисто язык математического расчёта.
   95.095.0

yacc

старожил
★★★
G.s.> END DO частично решал эту проблему, но создавал новую: можно было перепутать, к какому заголовку цикла относится данный конец.
Вообще никакой проблемы
Эта "проблема" есть во всех других структурных языках - Паскаль, Ада, С и т.п.
Как раз метки - зло.
В курсах программирования на том же Паскале от них отучали
   92.0.4515.10792.0.4515.107
RU yacc #11.01.2022 09:27  @спокойный тип#11.01.2022 09:22
+
-
edit
 

yacc

старожил
★★★
с.т.> ещё питон можно параллелить.
Фортран был на суперкомпьютерах когда еще не было Питона - на том же Cray :p
OpenMPI там вполне работает
   92.0.4515.10792.0.4515.107
RU спокойный тип #11.01.2022 09:33  @yacc#11.01.2022 09:27
+
-
edit
 

спокойный тип
Спокойный_Тип

старожил
★★
☠☠
с.т.>> ещё питон можно параллелить.
yacc> Фортран был на суперкомпьютерах когда еще не было Питона - на том же Cray :p
yacc> OpenMPI там вполне работает

а на более прикладном уровне?
я не помню на уровне языка Фортран 90 способности параллелиться.
а в питоне делаешь пул и погнали, на банальном центосе под столом стоящем, грузить все ядра и hyperthreads.
   95.095.0
RU yacc #11.01.2022 09:39  @спокойный тип#11.01.2022 09:33
+
-
edit
 

yacc

старожил
★★★
с.т.> а на более прикладном уровне?
с.т.> я не помню на уровне языка Фортран 90 способности параллелиться.
Питон параллелится на уровне библиотек
Сам язык параллельности не дает

Навскидку параллельность на уровне языка - Ада - там есть task
   92.0.4515.10792.0.4515.107
RU спокойный тип #11.01.2022 09:54  @yacc#11.01.2022 09:39
+
-
edit
 

спокойный тип
Спокойный_Тип

старожил
★★
☠☠
с.т.>> а на более прикладном уровне?
с.т.>> я не помню на уровне языка Фортран 90 способности параллелиться.
yacc> Питон параллелится на уровне библиотек
yacc> Сам язык параллельности не дает

покажи мне в фортране аналог pool = multiprocessing.Pool()


реально, я не буду спорить на то относится ли библиотека языка к самому языку или нет )))

"The Python Standard Library » Concurrent Execution » multiprocessing — Process-based parallelism"

multiprocessing — Process-based parallelism — Python 3.10.1 documentation

Source code: Lib/multiprocessing/ multiprocessing is a package that supports spawning processes using an API similar to the threading module. The multiprocessing package offers both local and remote concurrency, effectively side-stepping the Global Interpreter Lock by using subprocesses instead of threads. Due to this, the multiprocessing module allows the programmer to fully leverage multiple processors on a given machine. It runs on both Unix and Windows. The multiprocessing module also introduces APIs which do not have analogs in the threading module. //  Дальше — docs.python.org
 

зы реально , вот мне нужно было сделать многопоточное приложение...на сях я офигел ещё в процессе написания прототипа, перл и баш не про это..на питоне всё было написано довольно быстро. фортран мне как-то под линукс не пришёл в голову )))
   95.095.0
Это сообщение редактировалось 11.01.2022 в 10:05
RU yacc #11.01.2022 09:57  @спокойный тип#11.01.2022 09:22
+
-
edit
 

yacc

старожил
★★★
с.т.> фортран гораздо более простой по синтаксису так это чисто язык математического расчёта.
Фортрану просто ставилась задача упростить написание вычислений для более широкого круга людей когда компьютеры были большие, дорогие и с небольшой вычислительной мощностью.
Поэтому он простой - чтобы и компилятор был простым.
Альтернатива была - машкод с ручным распределением ячеек :)
Фортран сурово упрощал это.

Вот пример - Наири-2, собственно подобное было и на IBM-1400 и на Минск-20
Прикреплённые файлы:
Nairi.jpg (скачать) [1191x902, 392 кБ]
 
 
   92.0.4515.10792.0.4515.107
RU yacc #11.01.2022 10:05  @спокойный тип#11.01.2022 09:54
+
-
edit
 

yacc

старожил
★★★
с.т.> реально, я не буду спорить на то относится ли библиотека языка к самому языку или нет )))
Ну вот у тебя написало же прямо черным по белому - "Source code: Lib/multiprocessing/"

Эдак ЛЮБОЙ язык с библиотеками поддерживает многозадачность :D

На том же фортране компилятор может раскидать его по процессорам - нафига программисту для вычислений ЯВНО создавать какие-то пулы если его задача - посчитать ? А параллельность - это просто средство ускорить вычисления.

Fortran Programmer's Guide: 10 - Parallelization

2. Profile. Using typical test data, determine the performance profile of the program. Identify the most significant loops. 3. Benchmark. Determine that the serial test results are accurate. Use these results and the performance profile as the benchmark. 4. Parallelize. Use a combination of options and directives to compile and build a parallelized executable. 5. Verify. Run the parallelized program on a single processor and check results to find instabilities and programming errors that might have crept in. //  Дальше — www.ph.surrey.ac.uk
 
   92.0.4515.10792.0.4515.107
RU спокойный тип #11.01.2022 10:13  @yacc#11.01.2022 10:05
+
+1
-
edit
 

спокойный тип
Спокойный_Тип

старожил
★★
☠☠
с.т.>> реально, я не буду спорить на то относится ли библиотека языка к самому языку или нет )))
yacc> Ну вот у тебя написало же прямо черным по белому - "Source code: Lib/multiprocessing/"

это стандартная библиотека.

yacc> Эдак ЛЮБОЙ язык с библиотеками поддерживает многозадачность :D
yacc> На том же фортране компилятор может раскидать его по процессорам - нафига программисту для вычислений ЯВНО создавать какие-то пулы если его задача - посчитать ? А параллельность - это просто средство ускорить вычисления.

yacc> Fortran Programmer's Guide: 10 - Parallelization

ну ок.
Note - Parallelization features are only available on SPARC platforms running Solaris 2.x, and require a Sun WorkShop license.

ну да, то есть на том где я с фортраном сталкивался - этого не было.
   95.095.0

16-й

аксакал
★★
a.p.> А юнит тесты этож на уровне класса/модуля/файла и т.п. У него данные всегда синтетика.

Это, если тупо по определению. Каковые страдают узкостью.
Вот, скажем, есть сохраненка, которая переваривает очередную порцию сырья, поступившего от системы мониторинга в базу через сервис. Делает какое-нибудь статистическое сжатие. Юнит? А то. Прямо-таки неуменьшаемый. Причем, который может зачудить вообще без всяких модификаций кода. Или мониторинг пришлет какую-нибудь замысловатую последовательность измерений, которую не ждали. Или база переведет очередной индекс на новый уровень иерархии из-за накопления данных. Или тот же индекс радикально перекосит из-за особенностей новогодней эксплуатации.
И чем тут синтетика поможет?
   96.0.4664.4596.0.4664.45
RU yacc #11.01.2022 10:37  @спокойный тип#11.01.2022 10:13
+
-
edit
 

yacc

старожил
★★★
с.т.> это стандартная библиотека.
Ну и С есть стандартная библиотека
И у других языков

с.т.> Note - Parallelization features are only available on SPARC platforms running Solaris 2.x, and require a Sun WorkShop license.
А ты как хотел ?
Intel до Peintium Pro вообще ядра не поддерживал
Там параллельность как таковая и не нужна была
Если у тебя одно ядро - для высокой скорости вычислений параллельность не нужна.

Много CPU это были Unix машины, IBM мейнфреймы и суперкомпьтеры, где выгоднее было сделать просто компилятор, который бы раскидал вычисление между независимыми вычислительными единицами.

Скажем как у Cray
Вот там была реальная параллельность - задача разбивалась на части и каждую часть обрабатывал отдельный CPU
Скажем если на 1 СPU выполнение требует 16 часов, то 16 CPU делают это параллельно за час

А то, что было на PC... так, поделка, для созданиям многозадачности разделением времени - будь то процессы или нити
   92.0.4515.10792.0.4515.107
RU 16-й #11.01.2022 10:42  @Татарин#10.01.2022 20:49
+
-
edit
 

16-й

аксакал
★★
Татарин> А ещё юнит-тесты очень любят аутсорс-конторы, которым в критерии оценки ставят количество сданных строк кода в продукте. :)

Обожают просто. А по тайм-материал, который щас прочно в моде у корпоративных заказчиков, задолбавшихся отсасывать неформализуемый результат, это вообще песня.
Я-то мзду беру (за потраченное время). Но за "державу" обидно.
   96.0.4664.4596.0.4664.45
RU спокойный тип #11.01.2022 10:47  @yacc#11.01.2022 10:37
+
-
edit
 

спокойный тип
Спокойный_Тип

старожил
★★
☠☠
с.т.>> это стандартная библиотека.
yacc> Ну и С есть стандартная библиотека
yacc> И у других языков
с.т.>> Note - Parallelization features are only available on SPARC platforms running Solaris 2.x, and require a Sun WorkShop license.
yacc> А ты как хотел ?

а я хоте что бы у меня на линуксе 4 процессорном под столом работало или дедике , как на питоне, само собой на x86-64
   95.095.0
RU yacc #11.01.2022 11:00  @спокойный тип#11.01.2022 10:47
+
-
edit
 

yacc

старожил
★★★
с.т.> а я хоте что бы у меня на линуксе 4 процессорном под столом работало или дедике , как на питоне, само собой на x86-64
Ты хотел сказать четырех ядерном ( Core ) ? :p
Там это компилятор решает - нет смысла делить на потоки руками.

Вот если бы у тебя был Линукс-кластер из нескольких отдельных машин, с настроенным OpenMPI или каким-нить гридом - там бы вычисление раскидалось между узлами.

... как раскидывалась у нас компиляция С++ на грид системе - очень быстро, когда куски проекта компилируются на десятке компов по конторе.
   92.0.4515.10792.0.4515.107

yacc

старожил
★★★
Кстати, кто хочет прочувствовать атмосферу использования фортрана в ранних 70-х

The IBM 1401 compiles and runs FORTRAN II
We attempt to compile and run a simple FORTRAN program on our vintage 1959 IBM mainframe computer at the Computer History Museum. FORTRAN is a big stretch for this business oriented machine, with 16k memory and a CPU not meant at all for scientific applications. Even integer multiply and divide instructions are an optional feature on the base machine!

Все по классике - фортран на ленте, программа на перфокартах, вывод на принтер
   92.0.4515.10792.0.4515.107
RU спокойный тип #11.01.2022 11:33  @yacc#11.01.2022 11:00
+
-
edit
 

спокойный тип
Спокойный_Тип

старожил
★★
☠☠
с.т.>> а я хоте что бы у меня на линуксе 4 процессорном под столом работало или дедике , как на питоне, само собой на x86-64
yacc> Ты хотел сказать четырех ядерном ( Core ) ? :p

ты никогда не видел 4х процессорные платы в больших тауэрах дома? )))

yacc> Там это компилятор решает - нет смысла делить на потоки руками.
yacc> Вот если бы у тебя был Линукс-кластер из нескольких отдельных машин, с настроенным OpenMPI или каким-нить гридом - там бы вычисление раскидалось между узлами.
yacc> ... как раскидывалась у нас компиляция С++ на грид системе - очень быстро, когда куски проекта компилируются на десятке компов по конторе.

это как у нас MPP хранилище работает...
   95.095.0
RU yacc #11.01.2022 11:51  @спокойный тип#11.01.2022 11:33
+
-
edit
 

yacc

старожил
★★★
с.т.> ты никогда не видел 4х процессорные платы в больших тауэрах дома? )))
Зачем это дома ? :p

с.т.> это как у нас MPP хранилище работает...
Ну кстати, по части той библиотеки питона что ты привел - это просто управление процессами.
Как я бы fork сделал на старом линуксе.
Как оно там - раскинется по процессорам или нет - решит диспетчер процессов операционной системы :D
   92.0.4515.10792.0.4515.107
RU спокойный тип #11.01.2022 12:02  @yacc#11.01.2022 11:51
+
-
edit
 

спокойный тип
Спокойный_Тип

старожил
★★
☠☠
с.т.>> ты никогда не видел 4х процессорные платы в больших тауэрах дома? )))
yacc> Зачем это дома ? :p

была железка и норм канал дома (не то что это акадо сейчас) , не хотелось платить за хостинг...

с.т.>> это как у нас MPP хранилище работает...
yacc> Ну кстати, по части той библиотеки питона что ты привел - это просто управление процессами.
yacc> Как я бы fork сделал на старом линуксе.

оно с мютексом в основном процессе который чилдами рулит, а так да.


yacc> Как оно там - раскинется по процессорам или нет - решит диспетчер процессов операционной системы :D

ну как бы исходим из того что диспетчер старается все ядра на всех процах нагружать )))
опять же есть htop которым можно помочь
   95.095.0
+
+1
-
edit
 

andry_p

втянувшийся

16-й> Это, если тупо по определению. Каковые страдают узкостью.
16-й> Вот, скажем, есть сохраненка, которая переваривает очередную порцию сырья, поступившего от системы мониторинга в базу через сервис. Делает какое-нибудь статистическое сжатие. Юнит? А то....

Это у вас получилась иллюстрация на тему "за что не любят хранимки". Случай специфический, и из-за тестирования тоже. Конечно, есть гуру хранимок, которые говорят что знают как, но...
Всё-таки под юнит тестами обычно понимают другое.
   88

16-й

аксакал
★★
a.p.> Это у вас получилась иллюстрация на тему "за что не любят хранимки". Случай специфический, и из-за тестирования тоже.

Хранимки не любят, в основном, апологеты всяких хибернейтов. Которые не в курсе, с какой стороны БД доят. Отчего у них получается лютый оверкил по запросам в цикле, имитирующим незабинденные джойны. И как только дело доходит до серьезных объемов - как тут выражались, промышленных - так сразу приложение всплывает дохляком.

a.p.> Конечно, есть гуру хранимок, которые говорят что знают как, но...

"Но" что? Унитарный запрос с клиентской стороны, конечно, магически облегчит жизнь, да? Он же не табличной статистикой питается, не в рамках транзакций за данными ныряет, и планы сам строит, по наитию.
Что гуру-то?
   96.0.4664.4596.0.4664.45
+
-
edit
 

Zenitchik

старожил


16-й> Вот при всей моей тяге к перфекционизму, не могу разделить мнение без оговорки.
16-й> Если покрытие тестами будет

Тот же разработчик, который реализовывал тестируемый функционал, совместно с разработчиком ТЗ на оный. Никак иначе. Потому что только эти двое могут знать, что и как тестировать.
   96.0.4664.11396.0.4664.113
RU Zenitchik #11.01.2022 15:02  @Garry_s#10.01.2022 18:34
+
-
edit
 

Zenitchik

старожил


G.s.> Критический баг, это когда в программе расчёта траектории американского венерианского аппарата в строке программы вместо
G.s.> DO 10 I=1,10
G.s.> оказалось набито
G.s.> DO 10 I=1.10
G.s.> Эта легенда почему-то крепко мне запомнилась с 1 курса.

В том числе. Если язык недостаточно строгий, чтобы такое отсечь - надо отсекать юнит-тестами.
Ещё был хороший пример с "Пэтриот", где в разных модулях деление на 10 выполнялось разными алгоритмами и накапливалась разница. Такое тоже можно отсечь юнит-тестированием.
   96.0.4664.11396.0.4664.113
1 4 5 6 7 8 9 10

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru