Changeset 622


Ignore:
Timestamp:
Jan 28, 2010 5:59:51 PM (12 years ago)
Author:
srkline
Message:

Updated MonteCarlo? to use a maximum of 4 processors. If XOP is not present (with 4 functions), the Igor code reverts to a single thread, even reverting to ipf code if necessary.

Location:
sans/Dev/trunk/NCNR_User_Procedures
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • sans/Dev/trunk/NCNR_User_Procedures/Common/Packages/PlotManager/PlotUtilsMacro_v40.ipf

    r621 r622  
    950950 
    951951        // SANS Reduction bits 
    952         tmp = "ASStandardFunction;Ann_1D_Graph;Avg_1D_Graph;BStandardFunction;CStandardFunction;Draw_Plot1D;MyMat2XYZ;NewDirection;SANSModelAAO_MCproto;Monte_SANS_Threaded;Monte_SANS_NotThreaded;Monte_SANS_W1;Monte_SANS_W2;Monte_SANS;FractionReachingDetector;" 
     952        tmp = "ASStandardFunction;Ann_1D_Graph;Avg_1D_Graph;BStandardFunction;CStandardFunction;Draw_Plot1D;MyMat2XYZ;NewDirection;SANSModelAAO_MCproto;Monte_SANS_Threaded;Monte_SANS_NotThreaded;Monte_SANS_W1;Monte_SANS_W2;Monte_SANS_W3;Monte_SANS_W4;Monte_SANS;FractionReachingDetector;" 
    953953        list = RemoveFromList(tmp, list  ,";") 
    954954 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/SANS/MultScatter_MonteCarlo_2D.ipf

    r615 r622  
    106106        Variable NNeutron=inputWave[0] 
    107107        Variable i,nthreads= ThreadProcessorCount 
    108         if(nthreads>2)          //only support 2 processors until I can figure out how to properly thread the XOP and to loop it 
    109                 nthreads=2 
    110         endif 
     108 
     109// make sure that the XOP exists if we are going to thread       
     110#if exists("Monte_SANSX4") 
     111        //OK 
     112        if(nthreads>4)          //only support 4 processors until I can figure out how to properly thread the XOP and to loop it 
     113                nthreads=4 
     114        endif 
     115#else 
     116        nthreads = 1 
     117#endif 
    111118         
    112119//      nthreads = 1 
     
    134141                        WAVE inputWave0,ran_dev0,nt0,j10,j20,nn0,linear_data0,retWave0 
    135142                        retWave0 = 0            //clear the return wave 
    136                         retWave0[0] = -1*(datetime-gInitTime)           //to initialize ran3 
     143                        retWave0[0] = -1*trunc(datetime-gInitTime)              //to initialize ran3 
    137144                        ThreadStart mt,i,Monte_SANS_W1(inputWave0,ran_dev0,nt0,j10,j20,nn0,linear_data0,retWave0) 
    138145                        Print "started thread 0" 
     
    141148                        WAVE inputWave1,ran_dev1,nt1,j11,j21,nn1,linear_data1,retWave1 
    142149                        retWave1 = 0                    //clear the return wave 
    143                         retWave1[0] = -1*(datetime-gInitTime)           //to initialize ran1 
     150                        retWave1[0] = -1*trunc(datetime-gInitTime-2)            //to initialize ran1 
    144151                        ThreadStart mt,i,Monte_SANS_W2(inputWave1,ran_dev1,nt1,j11,j21,nn1,linear_data1,retWave1) 
    145152                        Print "started thread 1" 
    146153                endif 
    147 //              if(i==2) 
    148 //                      WAVE inputWave2,ran_dev2,nt2,j12,j22,nn2,linear_data2,retWave2 
    149 //                      retWave2[0] = -1*datetime               //to initialize ran3 
    150 //                      ThreadStart mt,i,Monte_SANS_W(inputWave2,ran_dev2,nt2,j12,j22,nn2,linear_data2,retWave2) 
    151 //              endif 
    152 //              if(i==3) 
    153 //                      WAVE inputWave3,ran_dev3,nt3,j13,j23,nn3,linear_data3,retWave3 
    154 //                      retWave3[0] = -1*datetime               //to initialize ran3 
    155 //                      ThreadStart mt,i,Monte_SANS_W(inputWave3,ran_dev3,nt3,j13,j23,nn3,linear_data3,retWave3) 
    156 //              endif 
     154                if(i==2) 
     155                        WAVE inputWave2,ran_dev2,nt2,j12,j22,nn2,linear_data2,retWave2 
     156                        retWave2[0] = -1*trunc(datetime-gInitTime-3)            //to initialize ran3a 
     157                        ThreadStart mt,i,Monte_SANS_W3(inputWave2,ran_dev2,nt2,j12,j22,nn2,linear_data2,retWave2) 
     158                endif 
     159                if(i==3) 
     160                        WAVE inputWave3,ran_dev3,nt3,j13,j23,nn3,linear_data3,retWave3 
     161                        retWave3[0] = -1*trunc(datetime-gInitTime-4)            //to initialize ran1a 
     162                        ThreadStart mt,i,Monte_SANS_W4(inputWave3,ran_dev3,nt3,j13,j23,nn3,linear_data3,retWave3) 
     163                endif 
    157164        endfor 
    158165 
     
    182189                retWave = retWave0+retWave1 
    183190        endif 
    184 //      if(nthreads == 3) 
    185 //              nt = nt0+nt1+nt2                // add up each instance 
    186 //              j1 = j10+j11+j12 
    187 //              j2 = j20+j21+j22 
    188 //              nn = nn0+nn1+nn2 
    189 //              linear_data = linear_data0+linear_data1+linear_data2 
    190 //              retWave = retWave0+retWave1+retWave2 
    191 //      endif 
    192 //      if(nthreads == 4) 
    193 //              nt = nt0+nt1+nt2+nt3            // add up each instance 
    194 //              j1 = j10+j11+j12+j13 
    195 //              j2 = j20+j21+j22+j23 
    196 //              nn = nn0+nn1+nn2+nn3 
    197 //              linear_data = linear_data0+linear_data1+linear_data2+linear_data3 
    198 //              retWave = retWave0+retWave1+retWave2+retWave3 
    199 //      endif 
     191        if(nthreads == 3) 
     192                nt = nt0+nt1+nt2                // add up each instance 
     193                j1 = j10+j11+j12 
     194                j2 = j20+j21+j22 
     195                nn = nn0+nn1+nn2 
     196                linear_data = linear_data0+linear_data1+linear_data2 
     197                retWave = retWave0+retWave1+retWave2 
     198        endif 
     199        if(nthreads == 4) 
     200                nt = nt0+nt1+nt2+nt3            // add up each instance 
     201                j1 = j10+j11+j12+j13 
     202                j2 = j20+j21+j22+j23 
     203                nn = nn0+nn1+nn2+nn3 
     204                linear_data = linear_data0+linear_data1+linear_data2+linear_data3 
     205                retWave = retWave0+retWave1+retWave2+retWave3 
     206        endif 
    200207         
    201208        // fill up the results wave 
     
    240247        Monte_SANSX2(inputWave,ran_dev,nt,j1,j2,nn,linear_data,results) 
    241248#else 
    242         Monte_SANS(inputWave,ran_dev,nt,j1,j2,nn,linear_data,results) 
     249//      Monte_SANS(inputWave,ran_dev,nt,j1,j2,nn,linear_data,results) 
    243250#endif 
    244251 
    245252        return (0) 
    246253End 
     254 
     255// uses ran3a 
     256ThreadSafe Function Monte_SANS_W3(inputWave,ran_dev,nt,j1,j2,nn,linear_data,results) 
     257        WAVE inputWave,ran_dev,nt,j1,j2,nn,linear_data,results 
     258         
     259#if exists("Monte_SANSX3") 
     260        Monte_SANSX3(inputWave,ran_dev,nt,j1,j2,nn,linear_data,results) 
     261#else 
     262//      Monte_SANS(inputWave,ran_dev,nt,j1,j2,nn,linear_data,results) 
     263#endif 
     264 
     265        return (0) 
     266End 
     267 
     268// uses ran1a 
     269ThreadSafe Function Monte_SANS_W4(inputWave,ran_dev,nt,j1,j2,nn,linear_data,results) 
     270        WAVE inputWave,ran_dev,nt,j1,j2,nn,linear_data,results 
     271         
     272#if exists("Monte_SANSX4") 
     273        Monte_SANSX4(inputWave,ran_dev,nt,j1,j2,nn,linear_data,results) 
     274#else 
     275//      Monte_SANS(inputWave,ran_dev,nt,j1,j2,nn,linear_data,results) 
     276#endif 
     277 
     278        return (0) 
     279End 
     280 
     281 
    247282 
    248283// NON-threaded call to the main function returns what is to be displayed 
Note: See TracChangeset for help on using the changeset viewer.