管理科学计算软件的语言

时间:2008-09-24 05:09:45

标签: c# java scientific-computing

科学计算是算法密集型的,也可能是数据密集型的。它通常需要使用大量内存来运行分析并在继续下一个之前释放它。有时它还使用内存池为每次分析回收内存。托管语言在这里很有趣,因为它可以让开发人员专注于应用程序逻辑。由于它可能需要处理庞大的数据集,因此性能也很重要。但是我们如何使用托管语言控制内存和性能呢?

12 个答案:

答案 0 :(得分:10)

Python最近在科学计算方面变得非常重要。它是一种托管语言,因此您不必记住释放您的记忆。同时,它包含用于科学和数值计算的包(NumPySciPy),它为您提供与编译语言类似的性能。此外,Python可以很容易地与C代码集成。

Python是一种非常富有表现力的语言,比许多传统语言更容易编写和阅读。它在某些方面也类似于MATLAB,使得科学家比C ++或Fortran更容易使用。

University of Oslo最近开始教Python作为信息学系以外所有理科学生的默认语言(仍然学习Java)。

Simula Research Laboratory,大量使用科学计算,偏微分方程等,广泛使用python。

答案 1 :(得分:6)

你问的是一个根本上有缺陷的问题。托管语言的全部意义在于您不处理内存。这是由垃圾收集器处理的,虽然你可以采取某些行动以更好地让它以有效的方式完成工作,但是你的工作不是你的工作。

在性能不受您控制的世界中,您可以采取的措施可以提高性能。确保不要持有您不需要的参考文献。如果您需要对情况进行更多控制,请使用基于堆栈的变量。

答案 2 :(得分:5)

F#似乎有点针对这些观众。实际上有一本名为F# for scientists的书。

此次question也被问到了Lambda the Ultimate。

答案 3 :(得分:5)

你可能会对使用Matlab的人数感到惊讶,因为它可以被认为是一种编程语言并且当然管理自己的内存(支持大量数据集等),所以应该认真考虑解决方案。

此外,它会生成程序代码(可能需要一个单独的插件?)所以一旦你得到一个你想要打包的算法,你可以让它生成C代码来执行你最初​​在M脚本中的工作或者simulink模型。

- 亚当

答案 4 :(得分:3)

不完全确定问题是什么,但您可能想查看Fortress

答案 5 :(得分:2)

我想我会说这个问题是说.NET内存管理器能够处理科学计算的内存管理工作,传统上手工调优的例程已用于提高内存性能,特别是对于非常大的(GByte)矩阵?

本文作者当然认为它是: Harness the Features of C# to Power Your Scientific Computing Projects

正如其他人所指出的,托管代码的一个重点是您不需要自己处理内存管理任务。这是一个主要优势,因为它可以让您专注于算法。

答案 6 :(得分:1)

我认为功能语言最适合这类任务。

答案 7 :(得分:1)

由Oberon microsystems开发的BlackBox Component Builder是编程语言“Component Pascal”的基于组件的开发环境。

由于其稳定性,性能和简单性,BlackBox非常适合科学和工程应用。

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

(披露:我为Oberon微系统工作)

此致 tamberg

答案 8 :(得分:1)

最好的选择是使用NumPy / SciPy / IPython的Python。它具有出色的性能,因为核心数学发生在用高度优化的C和Fortran编写的库中。由于您使用Python与它进行交互,因此从您的角度来看,所有内容都是干净的,并且使用非常简洁,可读的代码和垃圾回收进行管理。

答案 9 :(得分:1)

简短的回答是,您可以通过选择合适的语言(如OCamlF#)并学习如何使用该语言进行优化来控制以托管语言编写的程序的内存和性能。长答案需要有关您正在使用的特定语言的书籍,例如OCaml for ScientistsVisual F# 2010 for Technical Computing

您需要了解的主题是算法优化,低级优化,数据结构以及所选语言中类型的内部表示。如果您正在编写并行算法,那么了解缓存也是特别重要的。

答案 10 :(得分:0)

使用托管语言,您无法轻松获得该控件。这些语言的重点是处理malloc,垃圾等。每种托管语言都会以不同的方式处理。

Perl耗尽内存被认为是一个致命的错误。您可以通过一些小的措施来节省$ ^ M,但这只有在您的编译器已经使用该功能进行编译并且为其添加代码规定时才能保存。

答案 11 :(得分:0)

由于其开销,.NET应用程序将导致相对于非托管应用程序的性能损失。但是,由于此开销或多或少是与应用程序整体大小无关的常量(警告:过度简化),因此应用程序越大,它就越少受到惩罚。

所以我会使用.NET(只要它为您提供所需的库)。管理记忆是一种痛苦,你需要做很多事情才能做到这一点。在.NET中,选择你最熟悉的语言,只要它不是J#或VB.NET并且是C#。