비동기 함수
MATLAB®은 코드를 동기식 또는 비동기식으로 실행합니다. 다음 함수를 사용하여 코드를 비동기식으로 실행할 수 있습니다.
두 확률 행렬의 최댓값을 계산합니다. MATLAB은 각 라인을 연속해서 실행합니다.
tic A = rand(10000); B = ones(10000); C = max(A,B); toc
Elapsed time is 0.992156 seconds.
코드를 실행하면 MATLAB은 다음 세 개의 계산을 실행합니다.
포그라운드에서
A = rand(10000)
을 계산합니다.포그라운드에서
B = ones(10000)
을 계산합니다.A
와B
를 생성한 후에 포그라운드에서C = max(A,B)
를 계산합니다.
비동기 코드
함수를 비동기식으로 실행하면 MATLAB은 동시에 다른 코드를 포그라운드에서 실행할 수 있습니다.
함수를 비동기식으로 실행하려면 parfeval
또는 parfevalOnAll
을 사용합니다. 이전 함수가 완료된 후에 함수를 비동기식으로 실행하려면 afterEach
와 afterAll
을 사용합니다.
함수를 비동기식으로 실행하면 MATLAB은 즉시
Future
객체를 반환합니다. MATLAB은 이 함수를 백그라운드에서 실행하거나 병렬 풀에서 실행하도록 예약합니다.코드를 백그라운드에서 실행하려면
parfeval
과backgroundPool
을 사용합니다.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은 다음 세 개의 계산을 실행합니다.
백그라운드에서
A = rand(10000)
을 계산합니다.parfeval
을 사용하여 함수rand
를 출력값1
, 단일 입력값10000
으로 지정하여 백그라운드에서 실행되도록 예약합니다. 포그라운드에서 Future 객체fA
를 반환합니다.백그라운드에서 함수
rand
를 실행합니다.
포그라운드에서
B = ones(10000)
을 계산합니다.A
와B
를 생성한 후에 포그라운드에서C = max(A,B)
를 계산합니다.wait
를 사용하여 Future 객체fA
가 백그라운드에서 실행을 마칠 때까지 명시적으로 기다립니다.fetchOutputs
를 사용하여 Future 객체fA
에서rand(10000)
을 가져옵니다.행렬
fetchOutputs(fA)
와B
에서 최종 결과C
를 계산합니다.
백그라운드 워커
parfeval
또는 parfevalOnAll
을 사용하여 함수를 비동기식으로 실행할 경우 MATLAB은 함수를 풀에서 실행합니다.
backgroundPool
을 사용하여 코드를 백그라운드에서 실행할 경우 MATLAB은 백그라운드 풀을 사용하여 이 코드를 실행합니다.
백그라운드 풀에는 고정된 개수의 워커가 있습니다. MATLAB은 이러한 워커를 사용하여 함수를 실행합니다. 각 워커는 한 번에 하나의 함수만 실행할 수 있습니다. 따라서, 백그라운드에서 여러 개의 함수를 실행할 경우 워커가 각 함수를 실행할 수 있는 상태가 될 때까지 기다려야 합니다.
backgroundPool
의 NumWorkers
속성을 사용하여 몇 개의 워커가 있는지 확인할 수 있습니다.
Parallel Computing Toolbox 라이선스가 없는 경우 백그라운드 풀은
1
개의 워커를 가집니다.Parallel Computing Toolbox 라이선스가 있는 경우 백그라운드 풀은 여러 개의 워커를 가집니다. 백그라운드 풀이 가지는 워커의 개수는 컴퓨터에 있는 물리적 코어의 개수입니다. 예를 들어, 컴퓨터에 4개의 코어가 있으면 백그라운드 풀은
4
개의 워커를 가집니다.backgroundPool
을 처음 사용하기 전에maxNumCompThreads
를 사용하여 이 값을 줄일 수 있습니다.
참고 항목
도움말 항목
- 함수가 백그라운드에서 실행되는 동안 대기 표시줄 업데이트하기
- 스레드 기반 환경에서 MATLAB 함수 실행하기
- Write Portable Parallel Code (Parallel Computing Toolbox)