공유 메모리 메소드를 사용하여 병렬로 실행할 수있는 C++ 코드가 있습니다. 코드를 PETSc에 연결하면 PETSc는 병렬로 코드를 실행할 수 있지만 분산 메모리 메소드로 실행할 수 있습니다. 병렬로 코드 (C++ + PETSc)를 실행하면 모든 프로세서가 동일한 작업을 반복하는 것으로 보입니다. 예를 들어, 프로세서 수가 4라면 경계 조건과 초기 조건을 4 번 읽거나 printf 명령을 사용하면 무언가가 4 번 인쇄됩니다. 따라서 작업이 프로세서간에 분산되지 않고 모든 프로세서가 일부 작업을 수행하는 대신 전체 작업을 수행한다는 의미입니다. 이 문제를 해결하기 위해 누구나 같은 경험을하고 있으며 당신의 제안은 무엇입니까? 예를 들어 , 당신이 그 코드를 한 번 읽는 대신에 두 번 메쉬를 읽고 볼 수 아래 :MPI를 사용하여 프로세서간에 작업을 배포하지만 모든 프로세서가 일부 작업 만 수행하는 대신 전체 작업 수행
읽기 메쉬 파일 Mesh_cavity2d.txt :
메쉬 파일 Mesh_cavity2d.txt을 읽는
나 :
제임스 감사합니다. 그렇다면 내가 가진 모든 파일에 루프를 정의해야한다는 것을 의미합니까? 내 코드는 거의 50 개의 다른 헤더와 소스 파일로 구성되어 있습니다. (모두 rank = 0이면) 모두 정의해야합니까? – Nazi
나치, if (rank == 0) 브라케팅이 포함 된 현재 인쇄 명령문 대신 래퍼 함수를 사용할 수 있습니다. 기존 함수 호출을 쉽게 찾아서 바꿀 수 있도록 코드가 형식화되어 있으면 (cscope가 도움이 될 수 있음), 이것은 그렇게 큰 작업이 아닙니다. –