void FrameScheduler::DoOneFrame()
{
    RunAllMonopolies();
    CreateThreads();
    RunMainThreadWork();
    JoinAllThreads();
    ResetAllWorkUnits();
    WaitUntilNextFrame();
}
void FrameScheduler::CleanUpThreads()
{
#ifdef MEZZ_USEBARRIERSEACHFRAME
    while(1!=AtomicCompareAndSwap32(&LastFrame,LastFrame,1));
    StartFrameSync.SetThreadSyncCount(0);
    EndFrameSync.SetThreadSyncCount(0); // Handle situations where Threads have not been created yet
#else
    JoinAllThreads();
#endif
}
Пример #3
0
void OpenMPManager::TransferVectors(size_t Nener,double* h_energies, double* h_nu, double* h_aif,int* h_gns,double* h_gamma,double * h_n){

	JoinAllThreads();
	memcpy(g_energies,h_energies,size_t(Nener)*sizeof(double));
	memcpy(g_nu,h_nu,size_t(Nener)*sizeof(double));
	memcpy(g_aif,h_aif,size_t(Nener)*sizeof(double));
	memcpy(g_gns,h_gns,size_t(Nener)*sizeof(int));
	if(h_gamma!= NULL && h_n != NULL){
		memcpy(g_gamma,h_gamma,size_t(Nener)*sizeof(double));
		memcpy(g_n,h_n,size_t(Nener)*sizeof(double));
	} 
	
}
Пример #4
0
void OpenMPManager::TransferResults(double* h_freq,double* h_intens,int N){

	printf("Wait for the jobs to finish\n");
	JoinAllThreads(); // If we aren't done wait
	printf("Transferring from all threads into host!\n");
	for(int i = 0; i < total_threads; i++){
		for(int j = 0; j < N; j++){
			g_intens[j]+=t_intens[i][j];
		}
	}

	memcpy(h_intens,g_intens,sizeof(double)*size_t(N));


}