[med-svn] [SCM] aghermann branch, master, updated. 65add7a81ffcf60b3e754aadd631a766286c9c6a

Andrei Zavada johnhommer at gmail.com
Sun Apr 7 16:50:55 UTC 2013


The following commit has been merged in the master branch:
commit 10a0cc903d32694d7c33dca930ac2e0da0758226
Author: Andrei Zavada <johnhommer at gmail.com>
Date:   Sun Apr 7 11:24:13 2013 +0300

    endow on-demand profile recompute with omp goodness

diff --git a/src/ui/mw/mw_cb.cc b/src/ui/mw/mw_cb.cc
index 80c97ca..e3fb4d3 100644
--- a/src/ui/mw/mw_cb.cc
+++ b/src/ui/mw/mw_cb.cc
@@ -126,23 +126,47 @@ eMsmtProfileType_changed_cb( GtkComboBox* b, gpointer userdata)
 
 	auto params = ED.make_active_profile_paramset();
 	// don't let it throw on insufficiently scored recordings
-	params.req_percent_scored	= 0.;
+	params.req_percent_scored	    = 0.;
 	params.swa_laden_pages_before_SWA_0 = 0u;
 
+	// collect profiles that need to be re-created
 	aghui::SBusyBlock *bb = nullptr;
+	vector<agh::CProfile*> redo_profiles;
 	for ( auto &G : ED.groups )
 		for ( auto &J : G )
 			if ( J.cprofile and J.cprofile->need_compute( params) ) {
-				bb = new aghui::SBusyBlock (ED.wMainWindow);
-				goto proceed;
+				if ( !bb )
+					bb = new aghui::SBusyBlock (ED.wMainWindow);
+				redo_profiles.push_back( J.cprofile);
 			}
-proceed:
 
+	size_t global_i = 0;
+#ifdef _OPENMP
+#pragma omp parallel for schedule(guided)
+#endif
+	for ( size_t i = 0; i < redo_profiles.size(); ++i ) {
+#ifdef _OPENMP
+#pragma omp critical
+#endif
+		{
+			auto& P = *redo_profiles[i];
+			ED.sb_main_progress_indicator(
+				(string ("Compute ") + P.subject() + "/" + P.session() + "/" + P.channel()).c_str(),
+				redo_profiles.size(), ++global_i,
+				TGtkRefreshMode::gtk);
+		}
+
+		redo_profiles[i]->create_timeline( params);
+	}
+	ED.sb_clear();
+
+	// do it for all the rest (those needing heavy recompute will be fetched from cache)
 	for ( auto &G : ED.groups )
 		for ( auto &J : G )
 			if ( J.cprofile )
 				J.cprofile->create_timeline( params);
 
+
 	if ( ED.profile_scale_psd == 0. || ED.profile_scale_swu == 0. || ED.profile_scale_mc == 0. ||  // don't know which
 		ED.autoscale )
 		ED.calculate_profile_scale();

-- 
Sleep experiment manager



More information about the debian-med-commit mailing list