2013-05-14 3 views
1

이것은 주어진 코드이지만 실행하는 데 너무 오래 걸립니다. 중첩 된 for 루프를 제거하여 어떻게하면 더 빠르게 만들 수 있습니까?중첩 된 for 루프를 제거하여 MATLAB 코드를 최적화 하시겠습니까?

for iGroup = 1:length(groupIndices) 
      curGroupIndex = groupIndices(iGroup); 
      curChanIndices = chanIndices{iGroup}; 
      curChanNames = chanNames{iGroup}; 

      groupPropStruct = propsToStruct(propNames{curGroupIndex},propValues{curGroupIndex},REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND); 
      groupStruct = struct('name',groupNames(iGroup),'props',groupPropStruct); 
      for iChan = 1:length(curChanIndices) 
       curChanIndex = curChanIndices(iChan); 
       chanPropStruct = propsToStruct(propNames{curChanIndex},propValues{curChanIndex},REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND); 
       chanStruct = struct('name',curChanNames{iChan},'props',chanPropStruct,... 
        'data',[]); 
       chanStruct.data = data{curChanIndex}; 
       groupStruct.(TDMS_genvarname2(chanStruct.name,... 
        REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND)) = chanStruct; 
      end 
      output.(TDMS_genvarname2(groupStruct.name,... 
       REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND)) = groupStruct; 
     end 
+1

이 코드가 무엇을해야할지 모른 채이 질문을 찾기가 힘들다면. 잠재적으로이 작업은 중첩 루프없이 수행 할 수 있지만 모든 중첩 루프를 제거 할 수는 없습니다. – Schorsch

답변

1

1 개가 말한대로, 당신의 부호가 실제하고있는 무슨을 알기조차없이 말하기 어렵다. 코드와 관련하여 장난감을 예로들 수 있습니까? 이것은 도움이 될 것입니다.

1 :

어쨌든, 여기에 네 개의 전공 - 루프 MATLAB을 작성할 때 고려해야 할 점이다 물론, 사용하는 빌드 - MATLAB 기능을 대신를위한 루프. 그것들은 c/Fortran으로 작성되었으며 SIMD, 멀티 쓰레드 등에 관해서는 훨씬 더 빠릅니다.

2 : 당신의 for-loops는 연속적이고 모양이 있습니다. 루프에서 다중 프로세서 기능을 사용하려면 parfor 루프를 사용하십시오.

3 : for 루프는 matlab 함수로 캡슐화되어 있습니까? 그렇지 않다면, 그렇게해라!, 그래서 MATLAB의 yit-compiler가 루프를 바이트 코드로 컴파일 할 수있다.

4 : C++에 익숙하다면 mex-function을 작성하십시오. 여기서 기계의 잠재력을 최대한 활용할 수 있습니다.

관련 문제