2008-09-24 74 views
5

科學計算是算法密集型的,也可能是數據密集型的。在繼續下一步之前,通常需要使用大量內存來運行分析併發布它。有時它還使用內存池爲每次分析回收內存。託管語言在這裏很有趣,因爲它可以讓開發人員專注於應用程序邏輯。由於它可能需要處理龐大的數據集,因此性能也很重要。但是如何用託管語言來控制內存和性能?科學計算軟件的管理語言

回答

3

不完全知道什麼問題是,但你可能想看看Fortress

6

你問一個根本性的缺陷問題。託管語言的整個要點是你不處理內存。這是由垃圾收集器處理的,雖然你可以採取某些行動來更好地讓它以有效的方式完成工作,但這不是你的工作。

你可以在性能不受你控制的世界,以提高性能的事情都很簡單。確保你不要拘泥於你不需要的引用。如果您需要更多控制情況,請使用基於堆棧的變量。

+0

垃圾收集語言通常會讓您控制內存佈局,例如, .NET中的結構。 – 2010-05-11 01:31:15

5

F#似乎有點針對這個受衆。實際上有一本書叫F# for scientists

而且這個question在拉姆達終極有人問過。

1

我認爲函數式語言將是最適合這種類型的任務。

0

與託管語言,你沒有得到控制,很容易。這些語言的要點是處理malloc,垃圾等。每種託管語言都會以不同方式處理。

用Perl運行內存被認爲是一個致命的錯誤。您可以通過$^M小小的度量來節省一天的時間,但是這隻有在您的編譯器已經使用該功能進行編譯並且您爲其添加了代碼規定的情況下。

5

你可能會在使用Matlab的這個人的數量感到驚訝,並且可以認爲它是一種編程語言,當然管理自己的內存(與龐大的數據集的支持,等等),那麼就應該認真考慮作爲這裏的解決方案。

此外,它會生成程序代碼(可能需要單獨的插件?),所以一旦你到達你想打包的算法,你可以讓它生成C代碼來執行你原來在你的M腳本中的工作或simulink模型。

- 亞當

2

我想我會說意譯,問題是能夠處理內存管理進行科學計算,從傳統手工調整程序已被用於提高內存性能的工作的.NET內存管理器,特別是對於非常大的(GByte)矩陣?

這篇文章的作者肯定認爲它是: Harness the Features of C# to Power Your Scientific Computing Projects

正如其他人所指出的,託管代碼的一個主要問題是,你不需要處理內存管理任務自己。這是一個主要的優勢,因爲它可以讓你專注於算法。

0

由於其開銷,a。NET應用程序相對於非託管應用程序會產生性能損失。然而,因爲這個開銷或多或少是一個與應用程序整體大小無關的常量(警告:過簡化),因此應用程序越大,懲罰就越少。

所以我會去與.NET(只要它提供你需要的庫)。管理記憶是一種痛苦,你必須做很多才能做到這一點。在.NET中,選擇你最喜歡的語言,只要它不是J#或VB.NET,並且是C#。

+2

哇,我不知道我在第一段中討論的是什麼。我一定喝醉了。我仍然認爲C#是科學計算軟件的絕佳選擇,但是geez。 – MusiGenesis 2009-09-30 01:33:33

10

Python近來科學計算已經變得相當大。它是一種託管語言,因此您不必記住釋放自己的記憶。同時,它還具有科學和數值計算軟件包(NumPySciPy),可爲您提供與編譯語言相似的性能。另外,Python可以很容易地與C代碼集成。

Python是一種非常富有表現力的語言,使得它比許多傳統語言更易於書寫和閱讀。它在某些方面也類似於MATLAB,因此比C++或Fortran更容易用於科學家。

University of Oslo最近開始將Python作爲信息學系之外的所有理科學生(仍然學習Java)的默認語言。

Simula Research Laboratory,它深入科學計算,偏微分方程等,廣泛使用python。

+3

Python可能足以調用以高性能語言編寫的現有代碼,但它顯然完全不適合編寫高性能代碼,這是此問題的主題。 – 2009-07-31 15:35:34

1

BlackBox組件生成器由Oberon microsystems開發,是用於編程語言「Component Pascal」的基於組件的開發環境。

BlackBox由於其穩定性,性能和簡單性,非常適合科學和工程應用。

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

(披露:我的奧伯倫微系統工作)

問候, tamberg

1

最好的辦法是用Python與NumPy/SciPy的/ IPython的。它具有出色的性能,因爲在高度優化的C和Fortran編寫的庫中發生了核心數學問題。由於您使用Python進行交互,因此您的視角中的所有內容都是乾淨的,並且使用非常簡潔易讀的代碼和垃圾回收進行管理。

1

簡而言之,您可以通過選擇合適的語言(如OCamlF#)並學習如何使用該語言進行優化來控制以託管語言編寫的程序的內存和性能。長答案需要一本關於您正在使用的特定語言的書籍,例如OCaml for ScientistsVisual F# 2010 for Technical Computing

您需要了解的主題包括算法優化,底層優化,數據結構以及所選語言中的類型的內部表示。如果你正在編寫並行算法,那麼瞭解高速緩存也是特別重要的。