2009-11-23 10 views
5

Я медицинский исследователь с кодом, написанным на MATLAB 2009b, который работает очень медленно из-за цикла саморегуляции (не уверен в программировании lingo здесь), т. Е. Результаты первой итерации используются во время вторая итерация и т. д. (я векторизовал его в проездной скважине. Я запустил Profiler.)Преобразование кода MATLAB в Fortran

Я хотел бы преобразовать медленные части кода в функцию mex. Я изучил Фортран в начале 1970-х годов, но не использовал его с тех пор. Код, который мне нужно преобразовать, не имеет ничего общего, это просто длинный численный расчет.

Мой вопрос: какая была бы самая простая в разрешении версия Fortran, подходящая для этой цели, и какой компилятор лучше всего работает на Intel Mac для этого? Например, я нашел информацию, сравнивающую синтаксис в MATLAB с Fortran 90, и преобразование не похоже, что это будет слишком сложным для меня. Однако, опять же, я не программист.

Я использую MacBook Pro с OS 10.6.

Цените любую помощь, спасибо.

+0

Как иронично. Matlab был разработан частично как «лучший» FORTRAN. – Marc

+5

Является ли код достаточно малым для публикации? Все еще могут быть другие оптимизации, прежде чем прибегать к MEX. Например. preallocation и быть осторожным с вызовами функций, может позволить более новым Matlabs делать модификацию массива на месте, что является большой победой для итеративных вычислений. –

+1

позволяет надеяться, что эта горячая дискуссия не напугала его :) – Amro

ответ

8

Я бы рекомендовал использовать современный Fortran, по крайней мере, 90/95, поскольку синтаксис намного более прощает, и почти все компиляторы теперь поддерживают его.

На Mac Я бы рекомендовал gfortran с here. Это не самая последняя версия, но она хорошо интегрирована с инструментами Apple build (вам нужно будет установить Xcode с вашего Mac OS DVD) и хорошо работает. В числовом сообществе python, которое зависит от большого количества расширений Fortran, рекомендуется использовать эту сборку.

Я на самом деле не использовал fortran mex на mac - но я думаю, что это должно быть довольно просто, если вы следуете документации mex - и, как вы говорите, перевод кода из Matlab в Fortran не должен быть слишком плохим (лучше если вы можете избежать вызова функций Matlab, но fortran имеет разумный разрез и доступ к массиву).

+0

Downvote без комментариев? Думаю, я ответил на вопрос ... – robince

+0

+1 чтобы противостоять нисходящему. Я думаю, что совет хорош (в значительной степени то, что я собирался сказать), только некоторые люди здесь не любят некоторые языки, поэтому нисходящее (угадывание). – Rook

0

Ну, вы, вероятно, нашли решение уже. Тем не менее, я скажу это: Matlab становится все быстрее и быстрее. Однако использование JIT Matlab в полной мере неинтуитивно. В Mathworks использовался векторный код для скорости. Затем они сказали, что пишут все в явных петлях. На самом деле я не уверен, что такое лучшая практика.

То, что я говорю, прежде чем вы отправитесь в Fortran, узнайте о лучшей практике и реализуйте ее. Это может дать вам достаточно ускорения прямо там.

Кроме того, вы абсолютно уверены, что вы изолировали замедление до петли? Вы использовали профилировщик? Вероятно, вы, похоже, испытали. Я просто подумал, что я упоминаю об этом.

Успехов, Ариэль