final release of the multi threaded Crusher
This commit is contained in:
		
							parent
							
								
									bc6cb23d47
								
							
						
					
					
						commit
						f8764de7e1
					
				
							
								
								
									
										12
									
								
								BM1D.cc
								
								
								
								
							
							
						
						
									
										12
									
								
								BM1D.cc
								
								
								
								
							| 
						 | 
				
			
			@ -45,7 +45,7 @@ int main(int argc, char* argv[])
 | 
			
		|||
		//todo fix  parameters
 | 
			
		||||
		percent = 0.99; 
 | 
			
		||||
		nGenerated = 7000;
 | 
			
		||||
		nop = 30;
 | 
			
		||||
		nop = 43;
 | 
			
		||||
		
 | 
			
		||||
		j_mu1=-25; 
 | 
			
		||||
        j_sigma1=0.3;
 | 
			
		||||
| 
						 | 
				
			
			@ -71,8 +71,8 @@ int main(int argc, char* argv[])
 | 
			
		|||
        rat=0.9;
 | 
			
		||||
 | 
			
		||||
		percent = 0.99; 
 | 
			
		||||
		nGenerated = 4000;
 | 
			
		||||
		nop = 30;
 | 
			
		||||
		nGenerated = 8000;
 | 
			
		||||
		nop = 40;
 | 
			
		||||
		
 | 
			
		||||
		vis = 1;
 | 
			
		||||
		typeOfRun = 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -114,10 +114,10 @@ int main(int argc, char* argv[])
 | 
			
		|||
	Plotter* myPlotter = new Plotter(vis==1);
 | 
			
		||||
	myPlotter->Plot(nRuns, nSteps, myBM1DProcess->GetT(), myBM1DProcess->GetX()); 
 | 
			
		||||
  
 | 
			
		||||
  //int numCPU = sysconf(_SC_NPROCESSORS_ONLN);
 | 
			
		||||
  //std::cout <<"cpus:"<<numCPU <<std::endl;
 | 
			
		||||
  int numCPU = sysconf(_SC_NPROCESSORS_ONLN);
 | 
			
		||||
  std::cout <<"cpus:"<<numCPU <<std::endl;
 | 
			
		||||
  
 | 
			
		||||
  Draw2D *myDraw2D = new Draw2D(nop, percent, nGenerated, myBM1DProcess->GetT(), myBM1DProcess->GetX(),2); //nop percent nruns
 | 
			
		||||
  Draw2D *myDraw2D = new Draw2D(nop, percent, nGenerated, myBM1DProcess->GetT(), myBM1DProcess->GetX(),numCPU); //nop percent nruns
 | 
			
		||||
  
 | 
			
		||||
  switch(random_type){
 | 
			
		||||
  	case 'g' :
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,8 +64,8 @@ void Draw2D::Histo2D()
 | 
			
		|||
	std::cout << "minMu:" <<   myLattice -> GetMuMin() << std::endl;
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	pthread_t thread[2];
 | 
			
		||||
	Draw2DWorkerThread *worker[2];
 | 
			
		||||
	pthread_t thread[nThreads];
 | 
			
		||||
	Draw2DWorkerThread *worker[nThreads];
 | 
			
		||||
	
 | 
			
		||||
    pthread_attr_t attr;
 | 
			
		||||
	
 | 
			
		||||
| 
						 | 
				
			
			@ -75,15 +75,42 @@ void Draw2D::Histo2D()
 | 
			
		|||
 | 
			
		||||
    void *status;
 | 
			
		||||
	
 | 
			
		||||
	int jobSize = myLattice -> GetLatticeSize();
 | 
			
		||||
	if(nThreads <= 0 || jobSize <= 0)
 | 
			
		||||
	{
 | 
			
		||||
		 std::cout<<"nThreads >= 1!!"<<std::endl;
 | 
			
		||||
		 exit(-1);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if(jobSize <= nThreads || nThreads > 32)    //small jobb size or too large nThreads? -> run single thread mode
 | 
			
		||||
	{
 | 
			
		||||
		std::cout<<"strange jobSize or nThread number!! run single thread mode!!"<<std::endl;
 | 
			
		||||
		worker[0] = new Draw2DWorkerThread(0, jobSize, x, t, nRuns, myLattice, BM1D_histo, BM1D_histo2, graphArray, &histoMutex);
 | 
			
		||||
		nThreads = 1;
 | 
			
		||||
	}
 | 
			
		||||
	else  //normal multi thread run
 | 
			
		||||
	{
 | 
			
		||||
		std::cout<<"Crusher run on "<< nThreads <<"thread"<<std::endl;
 | 
			
		||||
		int jobSliceSize = jobSize / nThreads;
 | 
			
		||||
	
 | 
			
		||||
		for(int i=0; i<nThreads; i++)
 | 
			
		||||
		{
 | 
			
		||||
			if(i == (nThreads - 1))  //larger slice
 | 
			
		||||
			{
 | 
			
		||||
				worker[i] = new Draw2DWorkerThread(jobSliceSize * i, (jobSize - (jobSliceSize * i)), x, t, nRuns, myLattice, BM1D_histo, BM1D_histo2, graphArray, &histoMutex);
 | 
			
		||||
			}
 | 
			
		||||
			else // normal slices
 | 
			
		||||
			{
 | 
			
		||||
				worker[i] = new Draw2DWorkerThread(jobSliceSize * i, jobSliceSize, x, t, nRuns, myLattice, BM1D_histo, BM1D_histo2, graphArray, &histoMutex);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	worker[0] = new Draw2DWorkerThread(0, (myLattice -> GetLatticeSize()/2), x, t, nRuns, myLattice, BM1D_histo, BM1D_histo2, graphArray, &histoMutex);
 | 
			
		||||
	worker[1] = new Draw2DWorkerThread((myLattice -> GetLatticeSize()/2), (myLattice -> GetLatticeSize()/2), x, t, nRuns, myLattice, BM1D_histo, BM1D_histo2, graphArray, &histoMutex);
 | 
			
		||||
	
 | 
			
		||||
    pthread_attr_init(&attr);
 | 
			
		||||
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
 | 
			
		||||
 | 
			
		||||
    for(int i=0; i<2; i++)
 | 
			
		||||
    for(int i=0; i<nThreads; i++)
 | 
			
		||||
	{
 | 
			
		||||
       std::cout<<"creating thread:"<<i<<std::endl;
 | 
			
		||||
       rc = pthread_create(&thread[i], &attr, (THREADFUNCPTR) &Draw2DWorkerThread::WorkerFunction, (void *)worker[i]);  
 | 
			
		||||
| 
						 | 
				
			
			@ -96,7 +123,7 @@ void Draw2D::Histo2D()
 | 
			
		|||
	
 | 
			
		||||
    pthread_attr_destroy(&attr);
 | 
			
		||||
	
 | 
			
		||||
    for(int i=0; i<2; i++)
 | 
			
		||||
    for(int i=0; i<nThreads; i++)
 | 
			
		||||
	{
 | 
			
		||||
       rc = pthread_join(thread[i], &status);
 | 
			
		||||
       if (rc) 
 | 
			
		||||
| 
						 | 
				
			
			@ -106,6 +133,11 @@ void Draw2D::Histo2D()
 | 
			
		|||
       }
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	for(int i=0; i<nThreads; i++)
 | 
			
		||||
	{
 | 
			
		||||
		delete worker[i];
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	std::cout << "RunMachine done" << std::endl;
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue