C ++로 수치 소프트웨어를 작성할 때의 디자인 패턴


13

수치 소프트웨어의 디자인 패턴과 원칙 에 대한 자료를 찾고 있는데 , 수치 코드에 대한 객체 지향 접근 방식에 초점을 맞추지는 않습니다.

나는 Writing Scientific Software : A Guide for Good Style 이라는 텍스트를 알고 있지만 여전히 부동 소수점 문제, 최적화 방법 및시기 등과 같은 것들을 많이 다루고 있습니다.

알고리즘 등을 다루는 것이 아니라 숫자 코드 디자인 의 더 큰 그림 에 대한 정보를 찾고 있습니다.

나는 이것에 대한 리소스가 있기를 희망하며, 라이브러리 이후 라이브러리를 거치지 않을 것입니다. 특히 C ++의 좋은 관용구와 관행에 대한 내 지식과는 별도로 현명하게 디자인하는 일에 대한 가이드가 없기 때문입니다.

(이것은 언어에 국한되지 않지만 언어에 특정한 내용이 있으면 C ++을 선호합니다.)


나는 종종 그런 책을 쓰는 것에 대해 생각했습니다. 그러나 가능한 접근 방법의 범위는 엄청 나며 (1 차 수치 기술 + 문제 영역에 크게 의존) 필요한 것은 백과 사전과 같습니다. 또한 어떤 사람도 모든 가능성을 파악할 수 없습니다. 하드웨어 개발을 염두에두고 전통적인 소프트웨어 관행을 따르는 경우 가장 좋은 방법은 다음과 같습니다. 당신의 기술과 관심 분야는 무엇입니까?
Biswajit Banerjee

2
목표에 맞지 않는 또 다른 유용한 참고 자료는 Anthony Scopatz와 Kathryn Huff의 "Effective Computation in Physics"입니다.
Brian Borchers

@BrianBorchers Hm, 그 중 절반은 Python을 소개 한 다음 개발 도구에 중점을 둡니다.
user1997744

답변:


8

20 년 동안 수치 소프트웨어를 개발 한 결과, Book of Gang에 의해 책에 설명 된 대부분의 디자인 패턴을 사용했을 것입니다 ( 여기 참조 ). 결국 수치 소프트웨어는 대규모의 복잡한 소프트웨어 일 뿐이므로 다른 소프트웨어와 동일한 설계 고려 사항이 적용되는 것은 놀라운 일이 아닙니다.

물론 숫자 알고리즘에 특정한 경우가 많지만 (예를 들어 here 참조), "전통적인"디자인 패턴 세트를 아는 것은 이미 좋은 출발입니다.


최신 하드웨어에서의 수치 계산을 위해서는 포인터 추적을 최소화하기 위해 노력해야합니다 (많은 Gang of Four 패턴이 사용함). C ++ 설계를위한 좋은 출발점입니다 github.com/isocpp/CppCoreGuidelines/blob/master/...
Biswajit 얀 배너 지

@BiswajitBanerjee 그렇습니다. C ++ 핵심 지침은 현대적인 C ++를 사용하는 모든 사람을위한 기본 지식입니다. Herb Sutter는 편집자 중 한 사람이며 항상 그의 조언을 신뢰할 수 있습니다.
user1997744

Bjarne을 의미 했습니까? Herb Sutter는 또한 "항상 자동"이라는 아이디어로 유명합니다. 또한 C ++ 핵심 지침은 기본 지식과는 거리가 멀다. 당신은 놀랄 것입니다.
Biswajit Banerjee

@BiswajitBanerjee 글쎄, 그렇지 않다면, 대부분의 지침에 익숙하지 않고 사용하지 않으면 개발자가 한 번의 인터뷰를 넘어서는 진보를 절대로하지 않을 것이라고 말할 수있다 (레거시 코드가 까다로울 수있는 곳은 제외).
user1997744

6

나는 Matthew G Knepley를 추천합니다. 과학 컴퓨팅을위한 프로그래밍 언어. arXiv 프리 프린트 arXiv : 1209.1711, 2012 ( https://arxiv.org/pdf/1209.1711.pdf )

또한 삼각형, PETSc, MoAB, deal.II, fenics 및 기타 코드와 같은 다른 코드를보고 읽는 것이 좋습니다. 모든 솔루션이 귀하에게 적합한 것은 아니지만 결국에는 다른 개발자 (경험이 풍부한 개발자 및 성공적인 코드)로부터 대처하고 학습하는 것이 코드를 설계하는 가장 좋은 교훈입니다.

또한 기존 프로젝트에 참여하여 기고자 또는 개발자가되는 것이 좋습니다. 때로는 새로운 것을 시작하기를 원하지만, 그렇게하려면 확실한 주장이 필요합니다.


킥 스타트 뭔가 내 주장은 새로운 IT의 학습 경험과 : 성취의 감각
user1997744

1
나는이 주장을 이해한다. 나는 오래 전에 같은 일을했었다. 이제는 그것이 이른 것이라고 생각합니다. 처음에 우리는 모두 같은 실수를해야 할 수도 있습니다. 먼저 걷는 방법을 배우려면 넘어 져야합니다. 자신의 코드를 작성하는 것은 이번이 처음이라면 코드의 유일한 사용자 일 것입니다. 커뮤니티가 개발 한 코드에 기여하면 다른 사람이 귀하의 작업을 사용하게되며이를 통해 성취도와 감사 의식을 얻을 수 있습니다. 당신은 당신의 기술을 배우고 향상시킬 수 있도록 풀 요청시 의견 / 검토를 받게됩니다.
likask

글쎄, 내가해야 할 매우 구체적인 밀교 계산을위한 라이브러리가 없으므로 결국 실제로 모든 것을 재발 명 할 필요는 없지만 실제로 내 자신을 작성해야합니다.
user1997744

오픈 소스 기존 프로젝트에 참여하기위한 훌륭한 조언. 나는 프로그래머의 네트워크에 들어갔습니다있어 방법 이 작업을 수행하여 더 나은 나보다.
user14717
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.