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

Intel Fortran и gFortran

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

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

[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)
А, тогда понятно.