2009-09-13 3 views
9

저는 현재 "Scientific Computing"이라는 대학에서 수학 수업을 듣고 있으며 교수는 C가 과학적 컴퓨팅에 사용되는 가장 일반적인 언어이며이 교수의 정확성에 대해 궁금해하고 있다고 말했습니다.C는 많은 과학 컴퓨팅에 실제로 사용됩니까?

+3

http://stackoverflow.com/questions/38239/practices-for-programming-in-a-scientific-environment. – dmckee

+0

[This (http://scicomp.stackexchange.com/questions/5159/do-i-need-to-learn-c) 및 [similar questions] (http://scicomp.stackexchange.com/questions/5135)/soft-question-where-does-python-fit-the-picture)는 종종 [Computational Science] (http://scicomp.stackexchange.com)에서 논의됩니다. 이 스레드에 걸려 넘어지면 누구나 볼만한 가치가 있습니다. – Damien

답변

23

제 비즈니스에서 (입자 물리학) Fortran 77에서 C++ 및 Python으로 거의 이동했습니다. 프로그래밍에 관한 모든 사람들이 care에 대해 알고 있지만, 틈새 어플리케이션 (임베디드 DAQ 보드, 특수 드라이버 등)에 대해서만 쓰여집니다.

그러나 학습 C는 당신에게 프로그래밍을위한 확고한 기반을 제공 할 것이며, 교수들과 논쟁하는 것이 거의 수익성이 없습니다.

+7

"그리고 교수들과 논쟁하는 것이 거의 이익이되지 않습니다."... lol –

+0

+1 나는 유사한 것을 썼을 것입니다. (훈련에서 입자 물리학 자로부터 왔습니다. –

7

Fortran은 과학적 목적으로는 매우 일반적이지만 C는 대부분의 프로그래밍 목적을위한 좋은 해결책입니다.

11

교수님의 답변이 맞다고해도 나는 대답하지 않는다고 생각합니다.

과학 컴퓨팅 및 데이터 시스템 컨설턴트로서의 경험으로 C는 확실히 많이 사용되었지만 Fortran과 C++도 그렇습니다. 파이썬은 가장 일반적으로 사용되는 스크립팅 언어입니다.

이것이 바뀔 것이라고 생각합니다. 지금 큰 문제는 병렬 컴퓨팅이며 이것은 제가 언급 한 전통적인 언어로 고통 스럽습니다 (MPI 사람?). 필자의 추측에 따르면 많은 병렬화가 Java 또는 .NET과 같은 가상 시스템으로 이동해야합니다. 즉 병렬 처리가 JIT의 작업이라고 생각합니다. 예를 들어, Fortress 또는 기존 언어 중 하나를 사용할지 여부는 알 수 없습니다. 인텔은 C/C++에 대해 parallel tools을 밀고 있지만, 테라코타와 같은 것이 장기적으로 더 나을지는 모르겠다. (필자는 과학 공동체에서 누가 그것을 시도했는지에 대해 들어 보지 못했다. 큰 금융은 있지만 개방적이지 않다.).

과학 컴퓨팅 분야에서 직업을 얻는 법을 배워야하는 경우라면 프로그래밍 기술보다 과학 기술에 더 많이 고용 될 가능성이 높습니다. 이것에 대한 자세한 내용은 과학 코드의 많은 죄송합니다 상태 this SO topic 참조). 이 프로그래밍 기술 (아마도 HPC)을 위해 고용 될 인 경우,이 교수의 견해로는 그렇게 먼 미래의 새로운 프로젝트에서는 쓸모가 없을 수도 있습니다. 하지만 NumPy을 포함하여 일부 파이썬을 아는 것은 상처가되지 않습니다.

+0

이것은 흥미로운 개념입니다. 지금 우리 회사의 경우가 아닙니다. 우리의 커다란 업무 처리의 상당 부분은 입출력 경계 또는 거의 (데이터 테이블을 조회하고 여러 단계에서 결과를 작성하는) 많은 것입니다. 그러나 매우 흥미 롭습니다. 바로 지금 우리는 입력 파일 단위로 병렬 처리하고 느슨하게 결합 된 클러스터에서 실행합니다. 내 수정 구슬이 흐려서 언제 변할지 모르겠다. – dmckee

4

Mathematica, Matlab 및 기타 유사한 도구에서 많은 "과학적 컴퓨팅"이 처리됩니다.

음 ... Matlab은 C 또는 C++로 작성되었지만 Mathematica의 많은 부분이 Mathematica 자체로 작성되었습니다. 역사적인 이유로 C의 본질적인 특징 때문에 많은 과학 및 하이테크 컴퓨팅 소프트웨어 라이브러리 등이 C/C++로 작성되었습니다.

C/C++은 많은 실시간 및 고성능 응용 프로그램에 대해 유리한면을 누리고 있으며 원시 컴퓨팅 자체 (상위 수준 언어로는 표현할 수 없음)가 아닌 로컬 용 타이트한 루프의 최적화, 그리고 다양한 구성 요소들과의 인터페이스를 위해, 그것들은 equipement의 물리적 조각들이거나, 예를 들어 병렬 컴퓨팅 프레임 워크와 같은 소프트웨어 요소들이다.

dmckee가 지적했듯이, c 연구는 대규모 프로그래밍 절차 프로그래밍을위한 좋은 기초를 제공합니다. 또한 실용적인 응용 프로그램을 가지고 있기 때문에 교수의 견해는 현 시점에서 강력한지지를 얻고 있습니다. 그러나,해라!교수님과 장로님으로부터받은 지혜를 계속 존중하며, 선량한 선생님처럼 때로는 목적지로 향하는 것이 아니라 여행/과정에 도움이되도록 경로에 둡니다.

+2

Matlab의 모든 선형 대수학은 포트란을 기반으로하는 LAPACK에 위임되었습니다. 따라서 Matlab을 사용하면 대부분의 시간 소모적 인 작업을 위해 Fortran 컴파일 코드를 암묵적으로 사용하게됩니다. –

+0

@TimLin FWIW, MATLAB의 FFT 루틴은 OCaml 소스 코드에 의해 생성 된 C 코드입니다 (예 :). –

1

C는 프로그래밍에서 널리 사용됩니다. 우리 중 대부분은 특히 우리가 대학에있을 때 C로 코딩하는 프로그래머입니다. 그것은 당신의 교수 선호도입니다 :-)

5

생물 정보학과 전산 생물학에서 C는 매우 유명합니다.

1

C는 많은 Scientific Computing에 실제로 사용됩니까?

과학적 컴퓨팅은 많은 다른 것들을 포함하며, 결과적으로 많은 다른 프로그래밍 언어가 과학적 컴퓨팅에 사용됩니다.

전통적으로 과학적 컴퓨팅은 고성능 컴퓨팅을 의미하며 대다수의 선형 대수와 일부 스펙트럼 방법 (예 : FFT)으로 범위가 제한되었으며 대부분 Fortran에서 수행되었습니다. 그 이후로 많은 사람들이 과학 컴퓨팅 (예 : 매스 데이터, 그래프 플로팅, 프로토 타이핑)을 같은 제목 아래로 떨어 뜨리고 다른 사람들은 상징적 인 계산과 같은 새로운 고성능 컴퓨팅을 선택하는 것을 고려하여 엄청나게 확대되었습니다.

Python, R, Mathematica 및 MATLAB과 같은 언어는 일반적으로 기술 컴퓨팅에 사용됩니다. C, C++ 및 Fortran과 같은 언어는 여전히 숫자 처리에 사용됩니다. OCaml과 같은 언어는 대규모 기호 계산에 사용됩니다.

0

다른 실험실과 연구 기관에서 근무한 경험을 토대로 컴퓨터 언어를 배우는 것이 프로그래밍의 기초와 소개 만 제공한다고 말할 수 있습니다. C 또는 Java는 소개로 받아 들일 수있는 유익한 언어가 될 것이므로 귀하의 교수님은 일정한 방향으로 정확합니다.

1 언어로 다른 언어로 지식을 적용 할 수 있다는 것은 계산/개발 작업 환경에서 성공의 열쇠입니다. 다른 회사/기관/연구실 그룹을 통해 이동하면 각자 자신의 언어/소프트웨어 환경 설정을 갖게됩니다. 특정 언어의 구문을 외우려는 것보다 새로운 것을 빨리 배울 수있는 것이 더 중요합니다.

물론 프로젝트에 사용할 언어를 선택하려면 필요한 라이브러리가있는 언어를 1 개 선택하십시오.

1

과학자 및 엔지니어를위한 전문적인 프로그래머로서 소프트웨어를 구축하면서 거의 모든 수치 방법론이 C로 작성되었다고 말할 수 있습니다. 따라서 우리의 경우 확실히 그렇습니다. 우리에게는 C++과 Fortran의 포켓이 있습니다. 성능면에서 잘 코딩 된 C와 좋은 컴파일러를 이기기 란 어렵습니다. 아주 가끔씩 우리는 집회에 빠질 수도 있습니다.

하지만 세상은 많이 바뀌 었습니다. 파이썬은 멋진 언어입니다. IMHO라는 가장 좋은 언어이며 네이티브 라이브러리를 호출 할 수 있습니다. 그런 다음 R은 소스 해석 언어이지만 다시 C 또는 C++로 컴파일 된 방대한 숫자 형 메서드 라이브러리가 있습니다. 그런 다음 openCL과 많은 바인딩과 같은 새로운 하드웨어 가속화 된 메소드를 모두 추가하십시오. C 또는 Fortran은 더 이상 유일한 대답이 아닙니다. 하지만 전통적인 CPU의 경우 C와 ASM은 최고 수준입니다.

0

예, MPI가있는 ANSI C입니다.

가끔은 사람들이 "대물 렌즈 C"를 사용하기를 원합니다. 즉, 함수를 큰 클래스의 메서드에 넣고 모든 Explplar를 별도의 코어에서 실행한다는 의미입니다. 이것은 C++가 아니라 "객체가있는 C"입니다. 메서드 개체 모델을 제외하고 C++ 기능은 사용되지 않습니다.이것은 예전의 C를 "합리적인 객체 모델"로 랩핑하고 중간 레이어를 사용할 수 있도록하는 것입니다.

위의 좋은 예 : LAMMPS.

Charm ++는 "현대적인 방식으로 좋은 오래된 C"를 얻는 또 다른 좋은 방법입니다.

과학 언어의 다른 언덕에는 LISP, 하스켈 및 기타 메타 - lang 그룹이 있습니다. 이것은 과학 프로그래밍의 다른 "소프트"세계입니다. 시간은 문제가 아니지만 대답의 존재입니다.

관련 문제