주요 콘텐츠

parfor 루프에서 변수 저장하기

R2026b
R2024a 이후

이 예제에서는 parfor 루프에서 save 함수를 사용하여 하나 이상의 변수를 파일에 저장하는 방법을 보여줍니다.

parfor 루프의 본문에서 save 함수를 사용하려면 "-fromstruct" 옵션을 사용해야 합니다. 이 옵션을 사용하지 않는 경우 MATLAB®은 투명성 위반으로 인한 오류를 생성합니다.

또한 각 워커 또는 parfor 반복이 데이터를 쓰거나 저장하는 파일에 고유한 액세스를 갖도록 해야 합니다. 여러 워커가 동일한 파일에 쓰려고 하면 MATLAB에서 오류가 발생하거나 데이터가 손상될 수 있으며, 한 워커가 다른 워커의 데이터를 덮어쓸 수도 있습니다. 이러한 문제는 다음과 같은 경우 발생할 가능성이 더 높습니다.

  • 컴퓨터당 워커가 두 개 이상 있고, 이들 워커가 동일한 파일에 쓰려고 하는 경우.

  • 워커들이 공유 파일 시스템을 사용하고 있고, 파일에 쓰기 위해 동일한 경로를 사용하여 파일을 식별하는 경우.

프로세스 워커로 구성된 병렬 풀을 시작합니다.

pool = parpool("Processes");
Starting parallel pool (parpool) using the 'Processes' profile ...
Connected to parallel pool with 6 workers.

parfor 루프를 사용하여 데이터를 생성하고 각 반복에서 별도의 MAT 파일에 저장합니다. 결과 변수를 스칼라 구조체에 임시로 저장합니다. save 함수의 "-fromstruct" 옵션을 사용하여 구조체의 필드와 값을 파일에 변수로 저장합니다.

parfor idx = 1:pool.NumWorkers
    x = rand(1000*idx);
    s = struct("x",x);
    save(sprintf("output_%d.mat",idx),"-fromstruct",s);
end

기본적으로 parpool은 워커의 작업 폴더를 MATLAB 클라이언트 세션의 작업 폴더와 일치하도록 설정합니다. 따라서, 클라이언트의 현재 작업 폴더가 워커가 파일을 저장하는 디폴트 폴더가 됩니다.

whos 함수를 사용하여 파일 중 하나의 내용을 표시합니다.

whos("-file","output_1.mat");
  Name         Size                Bytes  Class     Attributes

  x         1000x1000            8000000  double              

여러 변수를 저장하려면 여러 개의 필드를 가진 구조체를 만든 다음, 해당 필드와 값을 개별 변수로 저장합니다.

parfor idx = 1:pool.NumWorkers
   x = rand(1000*idx);
   y = eye(idx);
   z = magic(idx);
   s = struct("x",x,"y",y,"z",z);
   save(sprintf("output_%d.mat",idx),"-fromstruct",s);
end

파일 중 하나의 내용을 표시합니다.

whos("-file","output_2.mat");
  Name         Size                 Bytes  Class     Attributes

  x         2000x2000            32000000  double              
  y            2x2                     32  double              
  z            2x2                     32  double              

파일을 삭제하고 병렬 풀을 종료합니다.

delete output*
delete(pool);
Parallel pool using the 'Processes' profile is shutting down.

참고 항목

|

도움말 항목