2

최근 클러스터에 코드를 실행할 수있는 액세스 권한이 있습니다. 내 코드는 완전히 병렬화할 수 있지만 병렬 속성을 가장 잘 사용하는 방법을 알지 못합니다. 저는 큰 행렬의 원소를 계산해야하고 각각의 원소는 다른 원소와 독립적입니다. 행렬의 계산 속도를 높이기 위해 여러 머신 (100과 같은)에서 실행되도록 작업을 제출하고 싶습니다.matlab distributed computing with sge (qsub)

지금 당장 나는 행렬의 일부를 계산하고 .mat 파일에 저장해야하는 여러 작업을 제출하는 스크립트를 작성했습니다. 결국 나는 전체 매트릭스를 얻기 위해 그들을 합치고있다. 각각의 개별 작업을 제출하기 위해 새로운 .m 파일 (run1.m, run.2, ...)을 만들어 변수를 설정 한 다음 함수를 실행하여 행렬의 관련 부분을 계산합니다. 따라서 기본적으로 run1.m은

입니다. 그런 다음 compute_dists_matrix는 id를 사용하여 계산할 부분을 찾습니다. 그런 다음 run60.m을 통해 run1.m을 작성하고 qsub을 클러스터에 작성하는 스크립트를 작성했습니다.

예를 들어 일부 MATLAB 기능을 사용하여 더 좋은 방법이 있는지 궁금합니다. 왜냐하면 이것은 매우 전형적인 작업 인 것 같습니다.

답변

3

예, 정상적으로 작동하지만 이상적인 것은 아니며 일반적인 문제입니다. Matlab은 parallel programming toolkit입니다.

클러스터에이 기능이 있습니까? 그렇다면 distributed arrays을 살펴볼 가치가 있습니다. 그들이 그것에 접근 할 수 없다면, 당신이하고있는 일이 다른 방법 일뿐입니다. run1.m, run2.m을 제어 스크립트에서 랩핑하여 자동화 할 수 있습니다 ...

0

id에 대한 명령 줄 인수를 사용할 수 있으며이 ID의 값 범위로 작업을 제출할 수 있다고 생각합니다. 명령 줄 인수는 명령 줄에서 IDE없이 MATLAB을 시작하고 실행될 스크립트의 이름과 인수 목록을 제공하여 처리 할 수 ​​있습니다. 나는 당신이 당신의 직업 매니저에서 의존성을 설정하고 부분적인 결과 (파일로부터)를 병합하는 "reduce"스크립트를 만들 수 있다고 생각할 것이다. id다른 필수 인수를 생성하는 단일 스크립트에서 전체 프로세스를 관리하고 종속성이있는 후속 처리 작업 &을 제출할 수 있습니다.