主要内容

이번역페이지는최신내용을담고있지않습니다。최신내용을영문으로보려면여기를클릭하십시오。

parfor

여러워커에서병렬로루프반복실행

설명

예제

parforloopVarinitValendVal语句;结束는병렬풀에있는워커들에서루프반복을병렬로실행합니다。

MATLAB®initValendVal사이의loopVar값에대해루프본문명령语句를실행합니다。loopVar은1씩증가하는정수값으로구성된벡터를지정합니다。并行计算工具箱™가있으면멀티코어컴퓨터또는클러스터에병렬풀로조직된워커들을사용하여语句반복을실행할수있습니다。루프와마찬가지로语句에한줄또는여러줄을포함할수있습니다。

parfor를사용하여처리량을증가시킬수있는방법을알아보려면parfor를언제사용할지결정하기항목을참조하십시오。

parfor는기존의루프와는다음과같이다릅니다。

예제

parfor (loopVarinitValendVal);语句;结束루프본문에있는语句를실행할때사용할병렬풀의최대워커개수를을사용하여지정합니다。은음이아닌정수여야합니다。

기본적으로MATLAB은사용자의병렬풀에있는워커들을사용합니다。탭의환경섹션에서병렬연산>병렬기본설정을선택하여워커개수를변경할수있습니다。parpool을사용하여병렬풀의디폴트워커개수를재정의할수있습니다。풀에사용가능한워커가없거나0인이경우,MATLAB은병렬연산을수행하지는않지만계속비결정적순서로루프본문을실행합니다。이구문을사용하면코드를테스트할때병렬실행과직렬실행간에전환할수있습니다。

이구문을사용하여반복을병렬로실행하려면워커로구성된병렬풀이있어야합니다。기본적으로parfor를실행하면,디폴트클러스터프로파일로정의된클러스터에워커로구성된병렬풀이자동으로만들어집니다。디폴트클러스터는当地的입니다。병렬기본설정에서클러스터를변경할수있습니다。자세한내용은병렬기본설정지정하기항목을참조하십시오。

parfor (loopVarinitValendVal选择);语句;结束는루프본문에있는语句를실행할때사용할리소스를选择를사용하여지정합니다。parfor옵션세트는parforOptions함수를사용하여만들수있습니다。이방식에서는먼저병렬풀을만들지않고도클러스터에서parfor를실행할수있으며parfor가반복을워커의부분범위로분할하는방식을제어할수있습니다。

예제

parfor (loopVarinitValendVal集群);语句;结束는병렬풀을만들지않고集群의워커에서语句를실행합니다。이는parfor (loopVar = initVal:endVal,parforOptions(cluster));语句;结束를실행하는것과동일합니다。

예제

모두축소

계산량이많은작업에대해parfor루프를만들고속도향상결과를측정합니다。

MATLAB편집기에서다음루프를입력합니다。경과된시간을측정하려면抽搐toc을추가하십시오。

Tic n = 200;一个= 500;一个= 0 (1,n);i = 1:n a(i) = max(abs(eig(rand(a))));结束toc

스크립트를실행하고경과시간을확인합니다。

运行时间为31.935373秒。

스크립트에서루프를parfor루프로바꿉니다。

Tic n = 200;一个= 500;一个= 0 (1,n);parfori = 1:n a(i) = max(abs(eig(rand(a))));结束toc

새스크립트를실행하고다시실행합니다。병렬풀을시작하고워커에사용가능한코드를만들어야하기때문에첫번째실행이두번째실행보다느립니다。두번째실행의경과시간을확인합니다。

MATLAB은기본적으로로컬컴퓨터에서워커의병렬풀을자동으로엽니다。

运行时间为10.760068秒。

4개의워커에서루프를parfor루프로변환하여계산속도가향상되는지확인합니다。병렬풀의워커수를늘리면경과시간을더줄일수도있습니다。자세한내용은对于루프를parfor루프로변환하기항목과parfor루프를클러스터및클라우드로확장하기항목을참조하십시오。

parfor루프의최대워커개수을지정할수있습니다。풀이열려있는경우에도M = 0을설정하면데스크탑MATLAB에서루프의본문을워커를사용하지않고실행할수있습니다。M = 0이면MATLAB이병렬은아니지만비결정적순서로루프본문을계속실행하므로parfor루프가독립적이며워커에서실행되기적합한지확인할수있습니다。이방법을통해가장간단히parfor루프의내용을디버그할수있습니다。parfor루프본문에직접중단점을설정할수는없지만parfor루프본문에서호출된함수에중단점을설정할수있습니다。

M = 0을지정하여풀이열려있는경우에도데스크탑MATLAB에서parfor루프의본문을실행합니다。

M = 0;% M指定最大工作人员数量y = 1 (1100);parfori = 1:100,M) y(i) = i;结束

병렬풀의워커개수를제어하려면병렬기본설정지정하기parpool을참조하십시오。

현재병렬풀의워커간데이터전송량을측정하려면parfor루프전과후에ticBytes (gcp)tocBytes (gcp)를추가하십시오。gcp를인수로사용하여현재병렬풀을가져옵니다。

현재병렬풀을삭제합니다(아직있는경우)。

删除(gcp (“nocreate”))
抽搐ticBytes (gcp);n = 200;一个= 500;一个= 0 (1,n);parfori = 1:n a(i) = max(abs(eig(rand(a))));结束tocBytes toc (gcp)

새스크립트를실행하고다시실행합니다。병렬풀을시작하고워커에사용가능한코드를만들어야하기때문에첫번째실행이두번째실행보다느립니다。

MATLAB은기본적으로로컬컴퓨터에서워커의병렬풀을자동으로엽니다。

使用“local”配置文件启动并行池(parpool)…连接到4个工人. ...bytesenttoworkers BytesReceivedFromWorkers __________________ ________________________ 1 15340 7024 2 13328 5712 3 13328 5704 4 13328 5728 Total 55324 24168

ticBytestocBytes결과를사용하여병렬풀의워커간데이터전송량을검토할수있습니다。이예제에서는데이터전송량이적습니다。parfor루프에대한자세한내용은parfor를언제사용할지결정하기对于루프를parfor루프로변환하기항목을참조하십시오。

parcluster함수를사용하여集群객체를만들고parfor옵션세트도만듭니다。기본적으로parcluster는디폴트클러스터프로파일을사용합니다。MATLAB탭의병렬연산>디폴트클러스터선택에서디폴트프로파일을확인합니다。

集群= parcluster;

클러스터에서직접parfor계산을실행하려면集群객체를두번째입력인수로parfor에전달하십시오。

이방법을사용할경우parfor는클러스터에서사용가능한모든워커를사용할수있으며루프가완료되는즉시워커는다시사용가능한상태가됩니다。이방법은클러스터가병렬풀을지원하지않는경우에도유용합니다。반복을분할하는등의다른옵션을제어하려면parforOptions를사용하십시오。

价值= [3 3 3 7 3 3 3];parfor(i=1:numel(values),cluster) out(i) = norm(pinv(rand(values(i)*1e3))));结束

이구문을사용하면워커를필요이상으로사용하지않고큰클러스터에서parfor를실행할수있습니다。

입력인수

모두축소

초기값이initVal이고최종값이endVal인루프인덱스변수。변수는임의의숫자형일수있으며,값은정수여야합니다。

parfor루프변수는연속으로증가하는정수여야합니다。자세한내용은parfor루프에서변수문제해결하기항목을참조하십시오。

parfor루프변수의범위는지원되는범위를초과해서는안됩니다。자세한내용은parfor루프에서오버플로방지하기항목을참조하십시오。

데이터형:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

루프인덱스loopVar의초기값변수。변수는임의의숫자형일수있으며,값은정수여야합니다。endVal과함께parfor범위벡터를M: N형식으로지정합니다。

데이터형:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

루프인덱스loopVar의최종값변수。변수는임의의숫자형일수있으며,값은정수여야합니다。initVal과함께parfor범위벡터를M: N형식으로지정합니다。

데이터형:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

루프본문으로,텍스트로지정됩니다。parfor루프에서실행할일련의MATLAB명령。

parfor루프를사용하려면코드를수정해야할수있습니다。자세한내용은对于루프를parfor루프로변환하기항목을참조하십시오。

parfor루프를중첩시키지마십시오。중첩parfor루프와중첩为루프및기타parfor요구사항항목을참조하십시오。

병렬로실행하는최대워커개수로,음이아닌정수로지정됩니다。이상한을지정할경우,MATLAB은추가워커를사용할수있는경우에도이숫자보다많이사용하지않습니다。사용가능한워커개수보다많은워커를요청할경우,MATLAB은호출시점에사용가능한최대워커개수를사용합니다。루프반복이워커개수보다적은경우,일부워커는작업을수행하지않습니다。

parfor가여러워커에서실행될수없는경우(예를들어,하나의코어만사용할수있거나0인이경우),MATLAB은직렬방식으로루프를실행합니다。MATLAB은이경우에도계속해서비결정적순서로루프본문을실행합니다。이구문을사용하면코드를테스트할때병렬과직렬간에전환할수있습니다。

parfor옵션으로,ClusterOptions객체로지정됩니다。parfor옵션세트는parforOptions함수를사용하여만들수있습니다。

예:选择= parforOptions (parcluster);

parfor가실행될클러스터이며平行的。集群객체로지정됩니다。集群객체를만들려면parcluster함수를사용하십시오。

예:集群= parcluster(当地的)

데이터형:平行的。集群

  • 다음과같은경우에parfor를사용합니다。

    • 간단한계산으로구성된루프반복이많이있는경우。parfor는루프반복을그룹으로나누고각스레드가하나의반복그룹을실행할수있도록합니다。

    • 실행시간이오래걸리는일부루프반복이있는경우。

  • 루프의반복이다른반복결과에따라달라지는경우에는parfor루프를사용하지마십시오。

    귀결(减少)은이규칙에대한한가지예외입니다。귀결변수는매반복마다달라지는값을계속누적하지만반복회차간에는독립적인값을가집니다。자세한내용은减少变量항목을참조하십시오。

  • parfor를사용하는경우결과를얻으려면루프가완료되기를기다려야합니다。클라이언MATLAB이트차단되어루프를일찍중단할수없습니다。중간결과를구하거나루프를일찍중단하려면대신parfeval을사용해보십시오。

  • 集群객체를지정하지않는한parfor루프는기존병렬풀에서실행됩니다。풀이없는경우,병렬기본설정에서자동풀시작이비활성화되어있지않는한parfor는새병렬풀을시작합니다。병렬풀이없는경우와parfor가병렬풀을시작할수없는경우에는루프가클라이언트세션에서직렬로실행됩니다。

  • 병렬풀에대한클러스터프로파일의AutoAttachFiles속성이真正的로설정된경우,MATLAB이parfor루프를분석하여루프실행에필요한코드파일을결정합니다。listAutoAttachedFiles를참조하십시오。MATLAB은코드가워커에사용될수있도록병렬풀에이러한코드파일을자동으로연결합니다。

  • parfor루프에서직접스크립트를호출할수는없습니다。대신,스크립트를호출하는함수를호출할수있습니다。

  • 清晰的는작업공간투명성을위반하므로parfor루프내에서사용하지마십시오。parfor루프또는spmd문에서투명성확보하기항목을참조하십시오。

  • parfor루프를사용하는대신parsim명령을사용하여仿真金宝app软件®모델을병렬로실행할수있습니다。金宝app仿真软件의병렬사용에대한자세한내용과예제는运行多个模拟(金宝app模型)항목을참조하십시오。

R2008a에개발됨