주요 콘텐츠

비동기 함수

MATLAB®은 코드를 동기식 또는 비동기식으로 실행합니다. 다음 함수를 사용하여 코드를 비동기식으로 실행할 수 있습니다.

두 확률 행렬의 최댓값을 계산합니다. MATLAB은 각 라인을 연속해서 실행합니다.

tic
A = rand(10000);
B = ones(10000);
C = max(A,B);
toc
Elapsed time is 0.992156 seconds.

코드를 실행하면 MATLAB은 다음 세 개의 계산을 실행합니다.

  1. 포그라운드에서 A = rand(10000)을 계산합니다.

  2. 포그라운드에서 B = ones(10000)을 계산합니다.

  3. AB를 생성한 후에 포그라운드에서 C = max(A,B)를 계산합니다.

비동기 코드

함수를 비동기식으로 실행하면 MATLAB은 동시에 다른 코드를 포그라운드에서 실행할 수 있습니다.

함수를 비동기식으로 실행하려면 parfeval 또는 parfevalOnAll을 사용합니다. 이전 함수가 완료된 후에 함수를 비동기식으로 실행하려면 afterEachafterAll을 사용합니다.

  • 함수를 비동기식으로 실행하면 MATLAB은 즉시 Future 객체를 반환합니다. MATLAB은 이 함수를 백그라운드에서 실행하거나 병렬 풀에서 실행하도록 예약합니다.

    • 코드를 백그라운드에서 실행하려면 parfevalbackgroundPool을 사용합니다.

    • Parallel Computing Toolbox™가 있는 경우 코드를 병렬 풀에서 실행하려면 parpool (Parallel Computing Toolbox)을 사용합니다.

    • Parallel Computing Toolbox가 있는 경우 parfeval (Parallel Computing Toolbox)과 다른 함수들을 사용하여 코드를 자동으로 병렬 풀에서 실행할 수 있습니다. 자세한 내용은 자동 병렬 연산을 지원하는 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.

  • 함수가 백그라운드에서 실행되는 동안 다른 코드를 실행할 수 있습니다.

  • fetchOutputs를 사용하여 Future 객체에서 결과를 가져옵니다.

동기 함수비동기 함수
MATLAB이 함수가 완료될 때까지 기다립니다.MATLAB이 함수가 완료될 때까지 기다리지 않습니다.
MATLAB이 코드를 즉시 실행합니다.워커가 사용 가능할 때 MATLAB이 코드를 실행합니다. 자세한 내용은 백그라운드 워커 항목을 참조하십시오.
함수의 출력값을 현재 작업 공간에서 사용할 수 있습니다.출력값을 현재 작업 공간에 복사하려면 fetchOutputs를 사용합니다. fetchOutputs를 사용하면, MATLAB이 함수가 완료될 때까지 기다립니다.
동기 함수에서는 어떠한 함수나 객체이든 사용할 수 있습니다.

비동기 함수에서는 대부분의 함수와 객체를 사용할 수 있습니다.

현재 작업 공간을 동기 함수에서도 사용할 수 있습니다.현재 작업 공간에 있는 대부분의 변수를 비동기 함수에서도 사용할 수 있습니다.

두 확률 행렬의 최댓값을 계산합니다. 한 행렬은 백그라운드에서 생성하고 다른 행렬은 포그라운드에서 생성합니다. 행렬 A가 백그라운드에서 생성되고, 동시에 행렬 B가 포그라운드에서 계산됩니다.

참고

대개는 wait를 사용할 필요가 없습니다. fetchOutputs는 묵시적으로 MATLAB이 백그라운드에서 함수 실행을 마칠 때까지 기다렸다가 결과를 수집합니다. 여기서는 결과를 기다렸다가 수집하는 것을 명시적으로 보여주기 위해 함수 wait가 사용됩니다.

tic
fA = parfeval(backgroundPool,@rand,1,10000);
B = ones(10000);
wait(fA)
C = max(fetchOutputs(fA),B);
toc
Elapsed time is 0.534475 seconds.

코드를 실행하면 MATLAB은 다음 세 개의 계산을 실행합니다.

  1. 백그라운드에서 A = rand(10000)을 계산합니다.

    1. parfeval을 사용하여 함수 rand를 출력값 1, 단일 입력값 10000으로 지정하여 백그라운드에서 실행되도록 예약합니다. 포그라운드에서 Future 객체 fA를 반환합니다.

    2. 백그라운드에서 함수 rand를 실행합니다.

  2. 포그라운드에서 B = ones(10000)을 계산합니다.

  3. AB를 생성한 후에 포그라운드에서 C = max(A,B)를 계산합니다.

    1. wait를 사용하여 Future 객체 fA가 백그라운드에서 실행을 마칠 때까지 명시적으로 기다립니다.

    2. fetchOutputs를 사용하여 Future 객체 fA에서 rand(10000)을 가져옵니다.

    3. 행렬 fetchOutputs(fA)B에서 최종 결과 C를 계산합니다.

백그라운드 워커

parfeval 또는 parfevalOnAll을 사용하여 함수를 비동기식으로 실행할 경우 MATLAB은 함수를 풀에서 실행합니다.

backgroundPool을 사용하여 코드를 백그라운드에서 실행할 경우 MATLAB은 백그라운드 풀을 사용하여 이 코드를 실행합니다.

백그라운드 풀에는 고정된 개수의 워커가 있습니다. MATLAB은 이러한 워커를 사용하여 함수를 실행합니다. 각 워커는 한 번에 하나의 함수만 실행할 수 있습니다. 따라서, 백그라운드에서 여러 개의 함수를 실행할 경우 워커가 각 함수를 실행할 수 있는 상태가 될 때까지 기다려야 합니다.

backgroundPoolNumWorkers 속성을 사용하여 몇 개의 워커가 있는지 확인할 수 있습니다.

  • Parallel Computing Toolbox 라이선스가 없는 경우 백그라운드 풀은 1개의 워커를 가집니다.

  • Parallel Computing Toolbox 라이선스가 있는 경우 백그라운드 풀은 여러 개의 워커를 가집니다. 백그라운드 풀이 가지는 워커의 개수는 컴퓨터에 있는 물리적 코어의 개수입니다. 예를 들어, 컴퓨터에 4개의 코어가 있으면 백그라운드 풀은 4개의 워커를 가집니다. backgroundPool을 처음 사용하기 전에 maxNumCompThreads를 사용하여 이 값을 줄일 수 있습니다.

참고 항목

|

도움말 항목