pphantom: (Default)
pphantom ([personal profile] pphantom) wrote2009-11-16 01:30 am

Intel Fortran и gFortran

Обнаружил, что есть как минимум одна языковая деталь, при работе с которой интеловский компилятор проигрывает GNU'тому. Собственно, подозрения возникали и раньше, но сейчас они окончательно подтвердились.

Интеловский компилятор не умеет нормально обрабатывать рекурсию. Хвостовую - еще более-менее нормально, а вот в общем случае код получается весьма неэффективным. Правда, в вычислительных задачах рекурсия не особо нужна (и при необходимости ее обычно можно легко убрать), но все-таки печально.

[identity profile] pphantom.livejournal.com 2009-11-16 08:35 pm (UTC)(link)
Xто Вы не любите Фортран, я знаю. :) Правда, при этом я почти уверен, что не любите Вы именно Фортран 77, который разменял четвертый десяток лет (и на котором сейчас действительно пишут редко, скорее используют уже готовый код).

Что касается простоты синтаксиса, но опять-таки "на вкус и цвет". У каждого свои привычки, и если Ruby я более-менее перевариваю (хотя и не слишком люблю), то некоторые особенности Python'а, начиная с табулятора в виде синтаксической конструкции, вызывают просто отторжение.

Но это, в конце концов, не так уж важно. "Обвязку" вычислительной задачи можно писать на чем угодно, хоть на Прологе (не кидайтесь тапками, но им для этих целей я как раз периодически пользуюсь). А вот саму эту задачу на Ruby Вы не напишете (а если и напишете, то результатов будете ждать до пенсии). Писать на Python'е обвязку для GLESP'а, наверное, удобно, но для этого сначала некто Олег Верходанов сотоварищи должны были написать сам этот GLESP. На чем, кстати, он написан, Вы в курсе? ;)

[identity profile] dair-targ-one.livejournal.com 2009-11-16 09:02 pm (UTC)(link)
GLESP? На С. Благо у меня сейчас исходники регулярно появляются ;)
Может быть я просто слишком много общаюсь с такими задачами и такими языками, где нужно не правильно писать что-то новое, а правильно комбинировать уже существующее.

И в ответ на удалённый комментарий (они таки приходят =). Пример того, что у меня получалось:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import glesp

mis = xrange(50, 100)
lrs = xrange(2, 11)

with open('x.plot', 'w') as pf:
	for map_index in mis:
		map = glesp.random()
		for lr in lrs:
			filename = 'out/m%03d-lr%03d.ascii' % (map_index, lr)
			with open(filename, 'w') as f:
				for lmin in xrange(map.lmin(), map.lmax() - lr):
					lmax = lmin + lr - 1
					f.write('%d %d %f\n' % (lmin, lmax, (map - map[lmin:lmax]).autocorr()))
			pf.write(',\\\n    \'%s\' using 1:3 w l linetype 5' % (filename))
	
	pf.write('    0\n')


Кусок генерирует случайные карты cmb, затем для каждой карты поочерёдно выкидывает по несколько гармоник, строит автокорреляцию полученной карты, записывает это всё дело в файл и параллельно генерирует gnuplot-скрипт для отрисовки всего этого дела.

p.s. Используйте тэги <code><pre>your code here</pre><code>.

[identity profile] pphantom.livejournal.com 2009-11-16 09:23 pm (UTC)(link)
Насколько я помню, GLESP написан на смеси F77 и С. Причем основная счетная часть - именно на Фортране. Или фортрановский только внешний интерфейс? Впрочем, это в любом случае не Python и не Ruby. :)

Я догадываюсь, что приходят.

Такой фокус тоже не прошел (вернее, прошел частично). :( Есть нормальное решение, но, к сожалению, оно не лезет (длина комментария ограничена), а маленький кусок не слишком показателен. Не картинку же вставлять...

[identity profile] dair-targ-one.livejournal.com 2009-11-16 10:08 pm (UTC)(link)
pastebin.com -- Есть такой ресурс для всяческого выкладывания кода.

Вот я, кстати, сейчас ровно на 95-м фортране пишу какую-то гидродинамическую задачку (решение несложного дифура...). И меня больше раздражают не какие-нибудь крупные идеи, а всякие мелочи, о которые спотыкаешься... просто такое ощущение, что выехал с автобана на разбитый асфальт. Вроде ровно, а вроде и трясёт.

[identity profile] pphantom.livejournal.com 2009-11-16 10:16 pm (UTC)(link)
Ну, не знаю. А что пишете?

[identity profile] dair-targ-one.livejournal.com 2009-11-16 10:21 pm (UTC)(link)
Frictional Resistance in Pipe Flow using the Colebrook-White equation.

[identity profile] pphantom.livejournal.com 2009-11-16 10:29 pm (UTC)(link)
Забавно. В качестве халтуры или какому-нибудь знакомому механику в порядке гуманитарной помощи? Просто, насколько я понимаю, ни в каком другом качестве оно Вам не нужно.

[identity profile] dair-targ-one.livejournal.com 2009-11-16 10:34 pm (UTC)(link)
Ну это наша проверка одного сервиса для freelancer-ства.

[identity profile] pphantom.livejournal.com 2009-11-16 10:38 pm (UTC)(link)
А, тогда понятно.