Category: it

Category was added automatically. Read all entries about "it".

CrazyProf

Чем, на чём и под чем быстрее считать

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

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

Для тестирования использовалась машина с процессором Intel Core i5-3230M 2.6 ГГц, 12 Гбайт оперативной памяти, двумя «чистыми» операционными системами: Linux XUbuntu 16.10 и Windows 10; под последней в свою очередь были установлены ещё две виртуальные машины: VMWare Workstation 12 Player и Oracle VM VirtualBox 5.1.12 — и там, и там была развернута XUbuntu 16.10, которой отводились 4 логических процессора и 4 Гбайт памяти.

Для запуска программы использовался пайтоновский скрипт, запускающий сразу несколько конфигураций (обычно 4 или 8 — в зависимости от числа логических процессоров на используемой машине).

Поскольку общее количество конфигураций, которые необходимо посчитать, составляет несколько десятков тысяч, вопрос оптимизации работы программ по скорости стоит достаточно остро: даже выигрыш в 5% в конечном итоге приводит к экономии недели вычислительного времени.

Поэтому я протестировал несколько компиляторов, запущенными под разным окружением.
Для запуска под Linux использовались компиляторы gcc и gfortran версии 5.3.0.
Для запуска под Windows — компиляторы MinGW gcc и gfortran версии 5.3.0 и компилятор С/С++ из Visual Studio 2016 версии 19.00.24213.1

При компиляции использовались следующие ключи:
gcc, gfortran: -O3 -ffast-math -funsafe-math-optimizations
Microsoft C/C++: /O2 /Ot /fp:fast

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

Linux XUbuntu 16.10
gcc                                                         1250 s. 100%
gfortran                                                    1299 s. 104%

Microsoft Windows 10
gcc,      Ubuntu Linux under Oracle VM VirtualBox 5.1.12    1340 s. 100%
gfortran, Ubuntu Linux under Oracle VM VirtualBox 5.1.12    1441 s. 108%
Microsoft C/C++, Microsoft Windows 10                       1459 s. 109%
gcc,      MinGW, Microsoft Windows 10                       1520 s. 113%
gfortran, MinGW, Microsoft Windows 10                       1651 s. 123%
gfortran, Ubuntu Linux under VMWare Workstation 12 Player   1684 s. 126%
gcc,      Ubuntu Linux under VMWare Workstation 12 Player   1785 s. 133%


Почему в последнем случае (под VMWare Workstation 12 Player) фортрановская программа работает быстрее, чем скомпилированная gcc, хотя во всех остальных случаях программа на Си быстрее — загадка великая.
Что-то гремлины из VMWare непонятное у себя накодили. На чистой линукс-машине gcc-программа работает на 4% быстрее gfortran-программы.
Убитый Архимед

Точный тест Фишера. Python против R

Я понимаю, что для ответа на мой вопрос самым правильным было бы посмотреть исходники R, но прежде чем погрузиться в разбор чужого кода, я хотел бы задать вопрос здесь: а вдруг кто-нибудь из моих друзей уже знает ответ? Проблема возникла из-за того, что мне понадобилось заменить скрипт на R скриптом на Perl. Реализация функции, вычисляющей точный тест Фишера, есть в библиотеке Python и в библиотеке R, но её нет в Perl. Поэтому я написал следующий тестовый код на Perl (он приводится под катом).
Результаты работы этого теста совпадают с результатами работы стандартной функции из библиотеки Python, но расходятся с результатами, выдаваемыми стандартной функцией из R.
Тестовый вывод приведенной под катом программы:

A = |30 60|
    |10 70|
Fisher exact test, Perl
P two-sided =         0.00187
Odds ratio  =         3.500
Confidence Interval:  1.581...7.746
P one-sided less =    0.99972
P one sided greater = 0.00109
P hypergeom =         0.00081


Для сравнения привожу тестовый вывод с теми же данными результатов работы стандартной библиотечной функции Python stats.fisher_exact:

Python's library function stats.fisher_exact
P two-sided =         0.00187
Odds ratio  =         3.500
P one-sided less =    0.99972
P one-sided greater = 0.00109


Однако результаты работы функции fisher.test из библиотеки R несколько отличаются от реализации на Perl, выполненной в соответствии с описанием в учебниках, и от реализации в статистической библиотеке Python. Отличающиеся значения выделены красным цветом:

R: Fisher's Exact Test for Count Data
P two-sided =         0.001871
Odds ratio  =         3.475
Confidence Interval:  1.503...8.655
P one-sided less =    0.99972
P one-sided greater = 0.00109


В документации R написано, что при расчете отношения шансов и доверительного интервала используется дополнительная «подгонка» результатов с использованием метода наилучшего соответствия. Есть ещё вот такая статья по расчету отношения шансов: http://www.people.fas.harvard.edu/~mparzen/published/parzen17.pdf, но в R всё равно используется что-то другое. Может ли кто-нибудь вкратце описать алгоритм работы функции R или всё же придётся лезть в исходники?

Upd.: Вкратце: мне нужно понять, как «руками» получить такое же отношение шансов (odds ratio), которое возвращает функция R, потому что сами вероятности я считаю правильно.

Collapse )
Эврика

Оптимизация числодробилки

Рабочая программа для моделирования эволюции тройной звездной системы с учетом общей теории относительности непрерывно улучшалась и модифицировалась в течение последних десяти лет. В результате ее код превратился в такую кашу, что дальнейшая его поддержка стала невозможной.
Пришлось заняться рефакторингом, а заодно и оптимизацией.
В итоге код сократился в полтора раза, а быстродействие выросло в два раза. Интересно, что основной прирост быстродействия удалось получить, заменив везде где только можно деление умножением. Например, простая замена выражения a/(b/c+d/e) выражением a*c*e/(b*e+c*d) дает выигрыш в скорости выполнения в три раза.

Upd.: оптимизация компилятора отключена по причинам, которые обсуждаются далее в комментариях.

Upd2.: впрочем, для случая замены выражения a/(b/c+d/e) выражением a*c*e/(b*e+c*d) включение или выключение оптимизации не играет роли.
Убитый Архимед

Octave продолжает огорчать

Octave огорчает всё больше и больше. Вот, казалось бы, совсем простая задача: интегрирование системы дифференциальных уравнений методом Эйлера. Проще уже не бывает, и что же мы получаем?

Время работы Matlab — 1.2 c
Время работы Octave — 101.1 c

Collapse )

Octave выполняет скрипт в сто раз медленнее, чем Matlab. В сто раз, Карл!
Эврика

А вот это уже аргумент

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

Теперь же я решил задать им аналитическую задачу. Задача старая, довольно известная студентам. Требуется взять интеграл:

Collapse )
Убитый Архимед

Варианты выбора

Подходит к концу моя студенческая лицензия на Mathematica 9 и я задумался о приобретении собственной персональной лицензии на один из программных продуктов. Выбор профессиональных инструментов не особенно велик. Собственно, всего три варианта:

Maple Personal edition — $299.00
Mathematica Home Edition — $295.00
Matlab + Image Processing Toolbox + Symbolic Math Toolbox +
Partial Differential Equation Toolbox — $135 + $39 + $39 +$39 = $252

В этом отношении Matlab выглядит привлекательнее по цене, и остаётся запас для приобретения ещё одного тулбокса, правда, несколько смущает тот факт, что за ту же цену MapleSoft и Wolfram предлагают гораздо более полный набор инструментов, хотя что мне до них, если большую их часть я всё равно не буду использовать.
Поэтому следующим вопросом стал вопрос удобства использования и скорости работы.

Collapse )
Я, конечно, ещё поиграюсь с матлабом до истечения триального периода, но пока склоняюсь к тому, чтобы вообще отказаться от проприетарных систем компьютерной алгебры; для решения численных задач небесной механики продолжить использовать фортран, для работы с матрицами — Octave, а для символьной математики — Maxima.
Мефистофель

Бессмертный фортран

Программирование никогда не было моей основной профессией, но мне постоянно приходилось писать программы для решения тех или иных текущих задач. Не считая множества мелких поделок, мне за всё время пришлось делать пять больших программных проектов.
Первой такой задачей было моделирование работы навигационной системы космического челнока «Буран», которым я занимался (до сих пор не понимаю, зачем) в 1985 году в ВНИИРА. Начинался проект на языке PL-1 для ЭВМ ЕС-1045. Но в итоге всё было переписано на фортране и запускалось на БЭСМ-6.
Вторая задача решалась в рамках моей дипломной работы в 1986. Нужно было численно решать уравнения Максвелла-Блоха для моделирования прохождения наносекундного светового импульса в резонансно-усиливающей среде в режиме насыщения. Расчёты велись на калькулятор-монстре Электроника Д3-28 и начинались на Бейсике, но потом были переписаны на фортране.
Третьей задачей был расчёт шенноновской и марковской энтропии в наследственном коде, а также ещё двух энтропиеподобных параметров плюс различные способы визуализации данных, и сначала она реализовывалась на Delphi, но потом от Delphi остался только графический интерфейс, а весь расчётный код был переписан на фортране.
Четвёртой задачей стал расчёт эволюции иерархической тройной звёздной системы для полностью релятивистского случая. Код первоначально писался на C, но в итоге был переписан на фортране.
И наконец, пятой задачей был поиск возможной орбиты третьего компонента в системе Дельты Скорпиона. Первые варианты расчёта были сделаны в Wolfram Mathematica, но в конечном итоге всё опять-таки пришло к варианту gfortran + gnuplot.
Мефистофель

Мало букв

[personal profile] vitus_wagner задаётся вопросом: «Вот интересно, когда у Шаттлворта через 5 лет кончатся буквы латинского алфавита, как он назовет Ubuntu 17.04?»

Экстраполируя геополитические процессы на следующие пять лет, рискну предположить, что кодовое имя Убунты 17.04 будет «的沉思 的熊» (Медитирующий медведь (кит.))

This entry was originally posted at http://apximhd.dreamwidth.org/4078.html. Please comment there using OpenID.
Убитый Архимед

«Мы нашли врага: им оказался PowerPoint»

Теперь понятна причина американских неудач в Афганистане. Во всём виноват PowerPoint!
Слайд, отображающий американскую военную стратегию в Афганистане, представленный генералом МакКристалом:


(Щёлкните на картинке, чтобы посмотреть увеличенную версию)

Спасибо schegloff и popunder.
Мефистофель

Кому он нужен, этот Linux?

Есть желание написать книгу по дистрибутиву Linux Edubuntu.
Дистрибутив основан на дистрибутиве Ubuntu, включает в себя все необходимые для работы приложения плюс дополнительные программы, ориентированные на учебный процесс. Статья про Edubuntu есть, например, здесь: http://mycomp.com.ua/text/11261. Про Ubuntu - здесь: http://www.pcweek.ru/?ID=614812.

По предварительным расчётам отпускная цена издательства для книги с DVD будет составлять 185 руб. при тираже 5000 экз. Это значит, что в рознице книга будет не дороже 300 руб.

Но встаёт вопрос: насколько такая книга будет востребована. Если у вас есть какие-то соображения на этот счёт, напишите, пожалуйста, об этом в комментариях. И, если не сложно, отправьте, пожалуйста, ссылку на этот пост знакомым учителям информатики и директорам школ: готовы ли они приобретать такую книгу для себя лично и для школьных библиотек?

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