主要内容

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

루프를parfor루프로변환하기

루프를parfor루프로변환하도록코드를수정해야만하는경우가있습니다。이예제에서는간단한중첩루프를사용하여parfor루프문제를진단하고수정하는방법에대해설명합니다。MATLAB®에서다음코드를실행하고결과를확인해보십시오。

x = 0:0.1:1A(y) = A(y-1) + y;结束结束

코드의속도를높이려면루프를parfor루프로변환해보십시오。이코드가오류를생성한다는것을알수있습니다。

parforx = 0:0.1:1parforA(y) = A(y-1) + y;结束结束

이경우,코드수정없이단순히루프를parfor루프로변환할수없습니다。오류없이제대로작동하게하려면몇군데코드를변경해야합니다。문제를진단하려면MATLAB편집기의코드분석기메시지를확인하십시오。

이코드는루프를parfor루프로변환할때생기는흔한문제를보여줍니다。

이러한문제를해결하려면parfor를사용하도록코드를수정해야합니다。parfor루프의본문은비결정적순서로여러MATLAB워커를사용하여병렬풀에서실행됩니다。따라서parfor루프의본문이다음요구사항을충족해야합니다。

  1. parfor루프의본문은독립적이어야합니다。반복은비결정적순서로병렬실행되므로하나의루프반복이이전반복에영향을받을수없습니다。다음예제를보십시오。

    A(y) = A(y-1) + y;
    위코드는독립적이지않으므로parfor를사용할수없습니다。독립성문제를처리하는다음단계는parfor루프반복이서로독립적이어야함항목을참조하십시오。

  2. parfor루프를또다른parfor루프내에중첩할수없습니다。이예제에는두개의중첩된루프가있으므로하나의루프만parfor루프로바꿀수있습니다。대신다른parfor루프의본문내에서parfor루프를사용하는함수를호출할수있습니다。그러나모든워커가가장바깥쪽루프를병렬화하는데사용되기때문에이러한중첩parfor루프는계산적인이점이없습니다。중첩루프를처리하는방법에대한자세한내용은중첩parfor루프와중첩为루프및기타parfor요구사항항목을참조하십시오。

  3. parfor루프변수는연속으로증가하는정수여야합니다。다음예제를보십시오。

    parforx = 0:0.1:1
    위코드에는정수가아닌루프변수가있으므로여기서는parfor를사용할수없습니다。루프변수의값을알고리즘에서요구하는정수값으로변경하면이문제를해결할수있습니다。parfor루프변수문제해결의다음단계는parfor루프변수는연속으로증가하는정수여야함항목을참조하십시오。

  4. parfor루프는루프에서처럼일찍빠져나올수없습니다。parfor루프의본문返回문에이나打破문을삽입하지마십시오。서로간의통신없이는루프를실행중인다른MATLAB인스턴스에서는언제멈춰야할지를알수없습니다。대안으로parfeval을고려할수있습니다。

    루프를parfor루프로변환하는데여전히문제가있다면parfor루프에서변수문제해결하기항목을참조하십시오。

抽搐toc을사용하여parfor루프를프로파일링하여이에상응하는루프와비교하여속도향상을측정할수있습니다。병렬풀의워커간데이터전송량을측정하려면ticBytestocBytes를사용합니다。자세한내용및예제는剖析parfor-loops항목을참조하십시오。

참고항목

||

관련항목