2008-09-24 4 views
5

과학 컴퓨팅은 알고리즘 집약적이며 데이터 집약적 일 수 있습니다. 분석을 실행하고 다음 단계로 넘어 가기 전에 많은 메모리를 사용하여 분석을 수행해야하는 경우가 있습니다. 언젠가 메모리 풀을 사용하여 각 분석을 위해 메모리를 재활용합니다. 관리 언어는 개발자가 응용 프로그램 논리에 집중할 수 있기 때문에 여기에서 흥미 롭습니다. 거대한 데이터 세트를 다루어야하기 때문에 성능 또한 중요합니다. 그러나 관리되는 언어로 어떻게 메모리와 성능을 제어 할 수 있습니까?과학 컴퓨팅 소프트웨어 용 관리 언어

답변

3

정확하게 확실하지 어떤 질문은,하지만 당신은 당신은 근본적으로 결함이 질문을하는 Fortress

6

을 확인 할 수 있습니다. 관리 언어의 전체적인 포인트는 당신이 메모리를 다루지 않는다는 것입니다. 그것은 Garbage Collector에 의해 처리되지만, 효율적인 방법으로 작업을 수행 할 수 있도록 특정 조치를 취할 수는 있지만 작업을 수행하는 것은 사용자의 작업이 아닙니다.

성능이 제어되지 않는 세계에서 성능을 향상시키기 위해 수행 할 수있는 작업은 간단합니다. 필요없는 참조를 보유하지 않도록하십시오. 그리고 상황에 대해 더 많은 제어가 필요한 경우 스택 기반 변수를 사용하십시오.

+0

가비지 수집 언어는 종종 메모리 레이아웃을 제어합니다. .NET의 구조체. –

5

F #은 다소 관객을 대상으로 한 것 같습니다. 실제로 F# for scientists이라는 책이 있습니다.

또한이 question은 Lambda the Ultimate에서 질문을 받았습니다.

1

필자는 기능 언어가 이러한 유형의 작업에 가장 적합하다고 생각합니다.

0

관리되는 언어를 사용하면 쉽게 제어 할 수 없습니다. 이러한 언어의 핵심은 malloc, 쓰레기 등을 처리하는 것입니다. 각 관리되는 언어가 다르게 처리합니다.

Perl 메모리 부족으로 치명적인 오류로 간주됩니다. $^M을 사용하여 약간의 소량 측정을 통해 요일을 저장할 수 있습니다. 그러나 이것은 컴파일러가 해당 기능으로 컴파일되어 있고 코드 조항을 추가 한 경우에만 해당됩니다.

5

Matlab을 사용하는 사람의 수가 놀랍지 만 프로그래밍 언어로 간주 될 수 있고 (거대한 데이터 세트 등을 지원하는) 자체 메모리를 관리 할 수 ​​있으므로 심각하게 고려해야합니다 여기 해결책으로.

또한, 별도의 플러그인이 필요할 수도 있습니다. 프로그램 코드가 생성되므로 패키지하려는 알고리즘에 도달하면 원래 M 스크립트에서 수행 한 작업을 수행하기위한 C 코드를 생성 할 수 있습니다 또는 시뮬 링크 모델.

-Adam 내가 말하여 질문을 의역 것이라고 생각

2

은 전통적으로 손 조정 루틴이 메모리 성능 향상을 위해 사용 된 과학 컴퓨팅을위한 메모리 관리의 작업을 처리 할 수있는 .NET 메모리 관리자는 특히,이다 매우 큰 (GByte) 행렬의 경우?

이 문서의 저자는 확실히이라고 생각 : 다른 사람들이 지적했듯이 Harness the Features of C# to Power Your Scientific Computing Projects

, 관리 코드의 주요 포인트는 당신이 메모리 관리 작업을 직접 처리 할 필요가 없다는 것입니다. 이는 알고리즘에 집중할 수있게 해주는 주요 장점입니다.

0

오버 헤드 때문에.NET 응용 프로그램은 관리되지 않는 응용 프로그램에 비해 성능이 저하됩니다. 그러나이 오버 헤드는 응용 프로그램의 전체 크기와 관련이 없거나 일정하기 때문에 (경고 : 간략화 간략화) 응용 프로그램이 클수록 상대적으로 페널티가 적어집니다.

그래서 .NET과 함께 할 것입니다. (필요한 라이브러리를 제공하는 한). 기억을 관리하는 것은 고통이며, 그것에 능숙 해지기 위해서는 많이해야합니다. .NET에서 J # 또는 VB.NET이 아니고 C# 인 한 가장 편한 언어를 선택하십시오.

+2

와우, 나는 그 * 첫 단락에서 내가 말한 지옥에 대해 모른다. 나는 술에 취해 있었음에 틀림 없다. 나는 아직도 C#이 과학 컴퓨팅 소프트웨어를위한 탁월한 선택이라고 생각하지만, 이런. – MusiGenesis

10

Python 최근 과학 컴퓨팅 분야에서 꽤 큰 규모가되었습니다. 관리되는 언어이므로 메모리를 확보 할 필요가 없습니다. 동시에 과학 및 수치 계산을위한 패키지 (NumPy, SciPy)를 사용하여 컴파일 된 언어와 비슷한 성능을 제공합니다. 또한 Python은 C 코드와 쉽게 통합 될 수 있습니다.

파이썬은 매우 표현력이 강한 언어이기 때문에 많은 전통적인 언어보다 읽고 쓰기가 더 쉽습니다. 또한 MATLAB과 몇 가지면에서 유사하기 때문에 C++이나 Fortran보다 과학자에게 더 쉽게 사용할 수 있습니다.

University of Oslo은 최근 정보학 부서 외부의 모든 과학 학생들을위한 Python을 기본 언어로 가르치기 시작했습니다 (여전히 Java를 배우는 사람).

Simula Research Laboratory 과학 컴퓨팅, 편미분 방정식 등에 많이 사용되는 python은 광범위하게 사용됩니다.

+3

파이썬은 퍼포먼스 언어로 작성된 기존 코드를 호출하는 데 적합 할 수 있지만이 질문의 대상인 퍼포먼스 코드를 작성하는 것은 분명히 충분하지 않습니다. –

+3

정확하게 NumPy와 SciPy에서 어떤 일이 벌어지고있는가. 그것들은 C로 구현되고 파이썬 모듈로 싸여 있으며 그와 동등한 C 코드만큼 효율적입니다. 그래서 나는 나의 대답이 여전히 적절하고 전혀 부적절하지 않다고 주장 할 것이다. – knatten

+4

나는 OP가 새로운 퍼포먼스 코드를 직접 작성하려고하며 파이썬에서 다른 사람의 코드를 호출하지 않을 것이라고 생각한다. –

1

Oberon microsystems가 개발 한 BlackBox Component Builder는 "Component Pascal"프로그래밍 언어의 구성 요소 기반 개발 환경입니다.

안정성, 성능 및 단순성으로 인해, BlackBox는 과학 및 공학 응용 분야에 완벽하게 적합합니다.

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

(공시 : 나는 오베론 마이크로 작동)

1

최선의 선택을 tamberg

안부, 는 NumPy와/SciPy/IPython 파이썬입니다. 최적화 된 C 및 Fortran으로 작성된 라이브러리에서 핵심 수학이 발생하기 때문에 성능이 뛰어납니다. Python을 사용하여 상호 작용하기 때문에 사용자의 관점에서 볼 때 모든 것이 매우 간결하고 읽기 쉬운 코드와 가비지 수집을 통해 깨끗하고 관리됩니다.

1

짧은 대답은 적절한 언어 (예 : OCaml 또는 F#)를 선택하고 해당 언어로 최적화하는 방법을 학습하여 관리되는 언어로 작성된 프로그램의 메모리와 성능을 제어 할 수 있다는 것입니다. 긴 답변을 사용하려면 사용중인 특정 언어에 대한 책 (예 : OCaml for Scientists 또는 Visual F# 2010 for Technical Computing)이 필요합니다.

학습해야 할 주제는 알고리즘 최적화, 저수준 최적화, 데이터 구조 및 선택한 언어로 된 유형의 내부 표현입니다. 병렬 알고리즘을 작성한다면 캐시에 대해 배우는 것이 특히 중요합니다.

관련 문제