2013-07-01 1 views
0

rocks 클러스터에서 실행되도록 MS VC++ 프로그램을 포팅하려고합니다! 나는 리눅스에별로 좋지 않다. 배우기를 열망하고, 포팅하는 것이 나를위한 불가능한 일이 아닐 것이라고 생각한다. 그러나 클러스터 노드를 활용하는 방법을 이해하지 못합니다. 코드가 프런트 엔드 서버에서만 실행되는 것 같습니다 (분명히).MS VC++ 프로그램 (단일 컴퓨터)을 Rocks 클러스터로 이식 할 때의 고려 사항

나는 MPI에 대해 조금 읽었으며 MPI를 사용하여 노드 사이를 갈아 치워야한다. 이 프로그램은 현재 모든 작업자 스레드를 동기화하는 기본 스레드를 갖도록 작성되었습니다. 또한 메인 스레드는 시뮬레이션을 조작하거나 상태를 쿼리하는 명령을 수신합니다. 시뮬레이션이 제대로 설정되면 실행중인 스레드 간의 통신을 크게 줄일 수 있습니다. 이해할 수없는 것은 계산 노드에서 프로세스를 시작하는 방법과 노드에서 오류를 처리하는 방법입니다. 그리고 클러스터 내에서 프로그램을 이식 할 때 고려해야 할 다른 것들이 있을까요?

답변

1

첫 번째 단계는 스레드 된 MS VC++ 프로그램을 단일 Linux 컴퓨터에서 실행되도록 포팅하는 것입니다.

일단 그 시점을 지나면 스레드가 아니라 스레드와 함께 MPI를 사용하도록 프로그램을 수정하십시오. 단일 컴퓨터에서도이 작업을 수행 할 수 있습니다.

클러스터의 여러 노드에서 프로그램을 실행하려면 클러스터링하는 모든 예약 시스템에 프로그램을 제출해야합니다. 이를위한 명령은 Rocks 클러스터에 사용되는 스케줄링 소프트웨어에 따라 다릅니다. 관리자에게 문의하십시오. mpirun -np 32 yourprogram과 비슷할 수 있습니다.

노드를 처리하는 것은 광범위한 질문입니다. 첫 번째 단계에서 실패를보고하고 프로그램을 실패해야합니다. 프로그램이 클러스터에서 계산하는 데 오래 걸리지 않으면 프로그램을 재시작하고 실패한 노드를 조정하면됩니다. 그 외에도 응용 프로그램은 중단 된 위치에서 다시 시작하는 데 필요한 중간 정보를 디스크에 쓸 수 있습니다. 이것을 응용 프로그램의 체크 포인트라고합니다. 따라서 노드가 실패하면 작업은 실패하지만 작업을 다시 시작하는 것은 처음부터 시작하지 않습니다. 훨씬 더 발전된 것은 실제로 노드 실패를 감지하고 실패한 노드에있는 작업 단위를 다시 스케줄하려고 시도하는 것입니다. 이것은 작업 단위가 멱등수가 아닌 부작용이 없다고 가정합니다. 이런 종류의 일은 정말로 복잡해집니다. 체크 포인트는 충분히 좋은 것 같습니다.

+0

매우 유익한 답변에 감사드립니다. 포인팅 사운드를 확인하는 것이 좋습니다. 시뮬레이션은 무한정 또는 멈출 때까지 (흥미로운 일이 일어날 때까지) 거의 실행됩니다. 매개 변수를 조정 한 다음 다시 실행하십시오. 그래서 결코 진정으로 완성되지 않습니다. 유지 관리를 위해 나중에 상태를 재개 할 수 있도록 전체 상태를 디스크에 덤프합니다. – Mel