문제

매우 계산적으로 집중적 인 병렬 애플리케이션을 작성하려는 경우, 병렬 처리를 최대한 활용할 수있는 잠재력을 극대화하기 위해 객체 (클래스 또는 스트러크 등)를 설계하는 데 어떤 지침을 사용 하시겠습니까?

해석/컴파일이라고 말하는 응용 프로그램을 생각하고 있습니다. 트리를 만들어야하는 객체의 트리와 같은 그래프를 작성하고 트리와 같은 구조로 처리 할 다른 개체로 전달합니다.

초기 설계 프로세스에서 무엇을 고려해야합니까?

도움이 되었습니까?

해결책

물건을 생성 한 다음 처리하도록 전달하는 경우 거의 확실하게 사용하여 응용 프로그램을 설계 할 수 있습니다. 메시지 전달 그리고 객체 격리.

첫 번째 단계는 책임을 식별하는 것, 즉 누가 무엇을 처리 할 것인지 식별하는 것입니다. 상자로 둥글게 된 모든 사람들.

두 번째 단계는 상자 사이의 정보 흐름을 정의하는 것입니다.

그 두 단계 후에는 a가 있습니다 메시지를 나타내는 작업자와 화살표를 나타내는 잎이있는 간단한 그래프. 모든 화살표는 a를 나타냅니다 종속성 순서 (즉, 화살표가 A에서 B로 이동하면 A는 B 전에 실행해야합니다).

이를 통해 어떤 동작이 평행하게 만들 수 있고 어떤 행동이 실제로 쉽게 볼 수 있고, 쉽게 보여주기 쉽습니다.

그런 다음 a 파이프 당신을 허용하는 구조 작업자간에 메시지를 전달합니다 모든 근로자에게는 작업 파이프 라인이 있도록합니다.

마지막 참고 사항 : 원래 디자인이 완료되면 개선하기 위해 리팩터링하기가 비교적 쉽습니다. 예를 들어, 동일한 작업을하는 노드는 작업 파이프를 공유 할 수 있으므로 8 개의 구문 분석기가 "Lexic Token"파이프에서 소비하거나 변경하여 작업자가 다른 작업자 파이프에서 작업을 "도둑질"할 수 있도록 변경합니다.

다른 팁

불변의 데이터 구조를 많이 사용하여 도망 갈 수 있다면 많은 시간, 타이핑 및 두통을 절약 할 수 있습니다.

호르헤 코르도바 (Jorge Córdoba)는 위에서 설명하는 패턴은 단지 하나의 접근법 일뿐입니다. 다음은 확실히 읽을 가치가 있습니다.

http://www.amazon.com/patterns-parallel-programming-software/dp/0321228111

그것은 문제를 분해하는 가장 좋은 방법에 대한 데이터 간의 종속성에 달려 있습니다. 예를 들어, 마스터 워크 및 단일 프로그램 다중 데이터 (SPMD)와 같은 패턴은 문제가 생기고 접근하는 경우 매우 간단한 접근 방식 인 경향이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top