Управляемый язык для научных вычислительных программ - PullRequest
5 голосов
/ 24 сентября 2008

Научные вычисления требуют большого количества алгоритмов и данных. Часто необходимо использовать много памяти для запуска анализа и выпуска его, прежде чем перейти к следующему. Иногда он также использует пул памяти для перезапуска памяти для каждого анализа. Здесь интересен управляемый язык, поскольку он позволяет разработчику сосредоточиться на логике приложения. Поскольку может потребоваться работа с огромным набором данных, производительность также важна. Но как мы можем контролировать память и производительность с помощью управляемого языка?

Ответы [ 12 ]

10 голосов
/ 24 сентября 2008

Python стал довольно большим в научных вычислениях в последнее время. Это управляемый язык, поэтому вам не нужно помнить, чтобы освободить память. В то же время, он имеет пакеты для научных и численных вычислений ( NumPy , SciPy ), которые обеспечивают производительность, аналогичную компилируемым языкам. Кроме того, Python может быть довольно легко интегрирован с кодом C.

Python - очень выразительный язык, облегчающий написание и чтение, чем многие традиционные языки. В некотором смысле он также напоминает MATLAB, что делает его более легким в использовании для ученых, чем, скажем, C ++ или Fortran.

Университет Осло недавно начал преподавать Python как язык по умолчанию для всех студентов-естественников, не входящих в факультет информатики (которые все еще изучают Java).

Научно-исследовательская лаборатория Simula , которая активно занимается научными вычислениями, дифференциальными уравнениями в частных производных и т. Д., Широко использует python.

6 голосов
/ 24 сентября 2008

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

Вещи, которые вы можете сделать для улучшения производительности в мире, где вы не контролируете производительность, просты. Убедитесь, что вы не держите ссылки, которые вам не нужны. И используйте переменные на основе стека, если вам нужно больше контроля над ситуацией.

5 голосов
/ 24 сентября 2008

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

Кроме того, он будет генерировать программный код (может потребоваться отдельный плагин?), Поэтому, как только вы получите алгоритм, который вы хотите упаковать, вы можете сгенерировать код C для выполнения работы, которую вы изначально выполняли в своем скрипте M или модель simulink.

-Adam

5 голосов
/ 24 сентября 2008

F #, кажется, несколько ориентирован на эту аудиторию. На самом деле есть книга под названием F # для ученых .

Также этот вопрос был задан в Лямбда-Предельном.

3 голосов
/ 24 сентября 2008

Не совсем уверен, что вопрос, но вы можете проверить Крепость

2 голосов
/ 24 сентября 2008

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

Автор этой статьи, безусловно, считает, что это: Использование возможностей C # для разработки ваших научных вычислительных проектов

Как уже отмечали другие, основной момент управляемого кода заключается в том, что вам не нужно самостоятельно решать задачи управления памятью. Это главное преимущество, поскольку оно позволяет вам сконцентрироваться на алгоритмах.

1 голос
/ 31 июля 2009

Короткий ответ: вы можете контролировать память и производительность программ, написанных на управляемых языках, выбрав подходящий язык (например, OCaml или F # ) и научившись оптимизировать в этот язык. Для длинного ответа требуется книга на конкретном языке, который вы используете, например OCaml для ученых или Visual F # 2010 для технических вычислений .

Предметы, которые вам необходимо изучить, - это алгоритмическая оптимизация, низкоуровневая оптимизация, структуры данных и внутреннее представление типов на выбранном вами языке. Если вы пишете параллельные алгоритмы, особенно важно узнать о кешах.

1 голос
/ 24 сентября 2008

Лучшим вариантом является Python с NumPy / SciPy / IPython. Он имеет отличную производительность, потому что основная математика происходит в библиотеках, написанных на сильно оптимизированном C и Fortran. Поскольку вы взаимодействуете с ним с помощью Python, все, с вашей точки зрения, чисто и управляется с помощью чрезвычайно лаконичного, читаемого кода и сборки мусора.

1 голос
/ 24 сентября 2008

Компонент BlackBox Component Builder, разработанный компанией Oberon microsystems, является средой разработки компонентов для языка программирования «Компонентный Паскаль».

Благодаря своей стабильности, производительности и простоте, BlackBox идеально подходит для научных и инженерных приложений.

http://www.oberon.ch/blackbox.html

(Раскрытие информации: работаю на микросистемах Oberon)

С уважением, Тамберг

1 голос
/ 24 сентября 2008

Я думаю, что функциональные языки лучше всего подходят для этого типа задач.

...