과학적 계산을 위해 기존의 프로그래밍 언어를 사용하는 것


22

참고 : 다음 글은 논란의 여지가있는 의견을 포함 할 수 있으므로 본인의 의견 일 뿐이며 다른 사람을 화나게하는 것은 아닙니다.

나는 1999 년 이래로 어떤 형태로든 다른 형태로 프로그래밍하고있다. 나는 처음에 R을 사용했다가 나중에 2004 년경에 주로 파이썬으로 바꿨다.

예를 들어 MCMC와 같은 시뮬레이션을 포함한 시뮬레이션과 같은 많은 과학 응용 프로그램의 경우 R과 Python이 너무 느려서 속도를 높여야합니다. 일반적인 방법은 C 또는 C ++로 확장하는 것입니다. R과 Python 모두 C ++에서 R의 C API를 사용하고 Python에서 Boost Python 라이브러리를 사용하여 수행 한 작업입니다.

그러나 여러 가지 이유로이 조합은 이상적인 솔루션이 아닙니다. 프로그래밍, 특히 알고리즘에서 중요한 것은 무엇입니까? 물론 표현력과 속도. 표현력이 높은 언어 일수록 더 빨리 쓸 수 있습니다.

1) 표현력에 관한 한 R이나 Python은 과학 알고리즘을 작성하는 데 이상적이라고 생각하지 않습니다. 기본 알고리즘에 밀접하게 매핑되지 않습니다. 그러나 둘 다 C ++보다 훨씬 낫습니다.

2) 나는 파이썬으로 작성하는 것을 즐깁니다. 유쾌한 언어이지만 위에서 언급 한 것처럼 알고리즘 작업에는 이상적이지 않습니다. 그러나 속도 문제로 인해 Python / C ++ 조합으로 작업 해야하는 경우이 혼합은 작업하기가 상당히 즐겁지 않습니다. 일반적으로 파이썬에서 처음 글을 쓰고 잘 작동하는 것을 찾으면 너무 느리다는 것을 종종 발견합니다 (주관적 가치가 너무 느림). 그런 다음 C ++로 다시 작성하는 데 불합리한 시간을 소비할지 아니면 속도를 늦출 지 결정합니다. 뒤늦은 견해에서, 나는 특히 획득 속도가 예측할 수 없기 때문에 느려짐을 극복하는 것이 더 나을 수도 있다고 생각합니다. 또한, 둘 사이의 Boost Python 인터페이스는 유지 관리에 많은 어려움을 겪습니다. 이렇게 서로 다른 두 언어로 된 코드를 붙이는 것은 산만합니다. Boost Python에 대한 비판은 없으며, 상상할 수있는만큼 강력한 인터페이스이며 거의 대부분 작동합니다.

이제 시간과 자원이 무제한 인 이상적인 세상에서 이러한 문제는 큰 문제가되지 않습니다. 그러나 내가 연구 한 과학 프로젝트에서 다음과 같은 경험을했습니다.

프로젝트에 공동 작업자가 있는지 여부에 관계없이 항상 컴퓨팅의 대부분을 수행하는 것처럼 보입니다. 총 5 개의 중요한 프로젝트에서 한 사람의 프로젝트에 한 사람 만 참여했습니다. 한 사람은 자신의 체중을 당기는 것 이상을했습니다. 그는 나만큼이나 많이했다. 그러나 여러 공동 작업자가있는 프로젝트를 포함한 다른 모든 경우에는 (가상적으로) 모든 계산 작업을 수행했습니다. 나는 최고의 협력자들에게 축복을받지 못했다고 말할 수는 있지만 (게으름과 무능함이 섞여있는 것 같음)이 상황이 미래에 변할 것인지는 분명하지 않습니다.

전산 과학 연구는 엄청난 노력이며, 공동 작업자의 행동 방식을 바꿀 수 없다면, 내가 일하는 방식을 바꿀 수 있습니다. 가장 중요한 개선은 더 빨리 일을 처리하는 것입니다. 언어를 정통성이 덜한 언어로 바꾸면 도움이 될 수 있습니다. 과거 연구에 따르면 가능성이 가장 높은 후보는 Common Lisp와 Ocaml입니다. 나는 몇 년 동안 이것에 대해 생각 해 왔지만 최근에는 더 심각하게 생각하고 있습니다.

내가 알 수 있듯이 과학 계산에 CL 또는 Ocaml을 사용하는 사람은 거의 없습니다. 이 사이트를 검색하면서 CL (하나는 광산)과 하나는 Ocaml (광)에 대한 두 가지 참조를 찾았습니다. 나는 수년 동안 모험을 좋아하는 사람들이 프린지에서 일하는 것을 격려하는 몇 가지 접촉을했습니다. 2008 년에 나는 Tamas K. Papp의 Peter Seibel의 "Practical Common Lisp"(내가 소유 한)에 대한 서평을 접하게 되었다. 이것이 내가 인터넷에서 봤던 Lisp에 대한 과학적 컴퓨팅에 대한 몇 안되는 언급 중 하나 였기 때문에 이것은 나의 관심을 끌었다. 나는 타마스에게 편지를 썼는데, 그는 즉시 도움과 격려를 표했습니다. 그를 인용

내 프로그래밍 생산성은 아마도 Lisp로 10 배 증가했을 것입니다. 그러나 약 1 년이 걸렸고 여전히 배우고 있습니다 (2 개월 후에는 꽤 잘 지내고있었습니다). 따라서 시간이 중요한 작업을 수행하는 경우 스위치를 연기하십시오.

당신은 cll에 사람들을 요구하는 것을 고려해야합니다, 나는 이것에 대해 아는 유일한 사람이 아니며, 다른 사람들은 Lisp에 대한 과학적 컴퓨팅을합니다.

또한 블로그GitHub 페이지가 있습니다.

내가 간단히 (2006 년 12 월에) 연락했던 또 다른 사람 은 방사선 종양학의 맥락에서 Common Lisp를 사용한 Ira Kalet 이었다 .

아마도 Lisp에서 과학 컴퓨팅을하는 다른 사람들이 있을지 모르지만 나는 아무도 모른다.

사람들이 CL로 인용하는 가장 일반적인 문제는 라이브러리가 없다는 것입니다. 이것은 범용 컴퓨팅에서 심각한 문제이지만 과학적 컴퓨팅, 특히 처음부터 알고리즘을 구현하는 경우에는 그리 많지 않을 수 있습니다. 특히, 확률 분포 함수, 다차원 배열 라이브러리 및 C ++ 및 Python 표준 라이브러리에있는 기본 컨테이너 세트 (예 : 맵, 세트, ​​목록 등)를 포함한 기본 수학 라이브러리를 사용하여 대부분의 시간을 얻을 수 있습니다.

나는 CL보다 Ocaml에 대해 덜 알고 있지만 대안으로 던졌습니다. 그것은 매우 빠르며, 프랑스 연구자들에 의해 하나의 무료 구현을 가지고 있으며 과학 컴퓨팅을위한 ML 언어 언어 중 가장 실행 가능한 것으로 보입니다.

결론적으로, 나는 다른 사람들이 이것에 대해 경험이 있는지, 그리고 어떤 생각이 있는지 궁금합니다.

편집 : 나는 위에서 논의 한 문제의 맥락에서 직접 경험에 관심이 있습니다. 예를 들어 파이썬과 C ++ (또는 R과 C ++)을 사용하고 좀 더 모호한 언어로 옮겼다면, 나는 당신의 경험에 대해 가장 관심이있을 것입니다.


2
스택 교환은 삶의 이야기를 게시하는 것이 아니라 질문하는 것입니다! 귀하의 질문은 "Common Lisp 또는 OCaml을 사용하는 과학 컴퓨팅 프로젝트가 있습니까?"
khinsen

4
동의, 이것은 블로그 게시물처럼 조금 더 읽지 만 전제를 좋아합니다. 이것을 2-3 문단으로 줄일 수 있습니까?
Aron Ahmadia 2012

1
또한 동의했다. 주된 질문을 뒷받침 할 때는 해설과 개인적인 경험이 좋습니다. 너무 많은 디테일이 요점을 amp을 수 있습니다. 질문을 요약 할 수 있다면, 읽기가 더 쉬워지고보다 표적화 된 고품질 응답을 얻을 수 있다고 생각합니다.
Geoff Oxberry

1
@FaheemMitha : "이상적인 세계"에서 당신은 그것을 통해 모든 손으로 최적화 된 어셈블리가 될 것이라고 언급했습니다.
meawoppl

3
@FaheemMitha : 질문을 개선하기 위해 할 수있는 최선의 방법은 질문을 명확하게하는 것입니다. 그것은 당신이 당신의 경험에 관한 이야기를하는 것 같습니다 (괜찮습니다) 그리고 마지막에, 당신은 당신의 이야기의 끝에 진술로 질문을 묻습니다. ( "결국, 궁금하다 ...") 당신이 할 수있는 최선의 방법은 그 부분을 질문으로 만드는 것입니다. 나는 그것을 알아 내기 위해 몇 번 되돌아 가야했다.
Geoff Oxberry

답변:


18

우리는 정확하게 제기 된 이유로 Julia 를 개발했습니다 . C / Fortran에서 코드의 일부를 계속 다시 작성할 필요가없는 우수한 수준의 과학적 컴퓨팅 언어는 없었습니다. Julia의 디자인은 약간의 lisp 영향을 미치므로 원하는대로 찾을 수 있지만 공동 작업자는 기능적 부분에 신경 쓰지 않으면 matlab 또는 R처럼 처리 할 수 ​​있습니다. 단점은 언어가 새로운 언어이며, 일상적인 사용에 필요한 모든 라이브러리를 아직 가지고 있지 않다는 것입니다.

마크, 줄리아를 벤치마킹에 추가하여 우리가 어떻게 요금을 지불하는지보고 싶습니다. 메일 링리스트로 올라가서 줄리아에서보고 싶은 것을 알려 주면 더 유용합니다.


아름다워요! 나는 확실히 내 자신의 작업을 확인합니다. 현재 내가, 이론 응집 물질 내 모든 작업에 파이썬을 사용하는 이유만으로 코드 : 처음에 C ++로 작성 소요되는 시간에 의해 부정되고 ++ 빠른 C를함으로써 얻을 수있는 시간
Lagerbaer

9

프로그래밍 언어의 속도, 크기 및 신뢰성은 "질문"에 표현 된 많은 다른 문제를 해결하는 데 정말 효과적입니다. 33 개 언어에 걸쳐 동일한 벤치 마크를 여러 번 구현 한 속도와 코드베이스 크기를 비교합니다!

나는 주로 프로그래밍하는 데 초과 시간보다 초과 컴퓨팅 시간이 더 일반적이기 때문에 파이썬 애호가가되었습니다. 나는 더 흥미로운 것에 헌신 할 수있는 시간을 낭비하는 것보다 CPU 사이클을 낭비하려고하는 것 이상이다.

또한 Julia에게 +1. 좀 더 안정적이고 널리 지원 될 때, 즉 표준 모듈이 내가 좋아하는 작업을 위해 랩핑 될 때 스위치로 전환 할 수 있다고 생각합니다.


4

OCaml의 과학적 응용 프로그램은 예를 참조하십시오.

과학 Lisp의 경우 예를 참조하십시오

더 많은 참조가 있다고 확신합니다. 그러나 OCaml 또는 Lisp에서 계산 작업이 수행 된 주요 연구 프로젝트를 인용 할 수는 없습니다. 둘 중 하나를 선택한다는 것은 상대적 격리 작업을 의미합니다.

또한 현재 Lisp에 영향을 미치면서 현재 개발중인 새로운 과학 컴퓨팅 언어 인 Julia에 관심이있을 수 있습니다 .


1
내가 직접 경험하는 것에 관심이 많다는 것을 더 분명하게했을 것입니다. 이것을 반영하여 질문을 편집하겠습니다.
Faheem Mitha
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.