Skip to content

Commit cb44d57

Browse files
committed
Resolve #2162, Fix thread control, reorganize studio prefs, apply studio thread control to groom/optimize
1 parent 450480a commit cb44d57

File tree

7 files changed

+351
-292
lines changed

7 files changed

+351
-292
lines changed

Libs/Common/ShapeworksUtils.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ namespace shapeworks {
1818

1919
unsigned ShapeWorksUtils::rng_seed_ = std::chrono::system_clock::now().time_since_epoch().count();
2020
std::mt19937 ShapeWorksUtils::mt_;
21+
std::unique_ptr<tbb::global_control> ShapeWorksUtils::tbb_global_control_;
2122

2223
//-----------------------------------------------------------------------------
2324
/// looks at the pathname to see if it's a file or a directory or neither
@@ -86,7 +87,9 @@ void ShapeWorksUtils::setup_threads() {
8687
}
8788
SW_DEBUG("TBB using {} threads", num_threads);
8889
Eigen::setNbThreads(num_threads);
89-
tbb::global_control c(tbb::global_control::max_allowed_parallelism, num_threads);
90+
91+
tbb_global_control_ =
92+
std::make_unique<tbb::global_control>(tbb::global_control::max_allowed_parallelism, num_threads);
9093
}
9194

9295
//-----------------------------------------------------------------------------

Libs/Common/ShapeworksUtils.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

3+
#include <oneapi/tbb/global_control.h>
34
#include <vtkMatrix4x4.h>
45
#include <vtkPolyData.h>
56
#include <vtkSmartPointer.h>
@@ -54,6 +55,7 @@ class ShapeWorksUtils {
5455
private:
5556
static unsigned rng_seed_;
5657
static std::mt19937 mt_;
58+
static std::unique_ptr<tbb::global_control> tbb_global_control_;
5759
};
5860

5961
} // namespace shapeworks

Libs/Groom/Groom.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ bool Groom::run() {
4747

4848
tbb::parallel_for(tbb::blocked_range<size_t>{0, subjects.size()}, [&](const tbb::blocked_range<size_t>& r) {
4949
for (size_t i = r.begin(); i < r.end(); ++i) {
50+
std::cerr << "Thread " << std::this_thread::get_id() << " processing subject " << i << std::endl;
5051
for (int domain = 0; domain < project_->get_number_of_domains_per_subject(); domain++) {
5152
if (abort_) {
5253
success = false;

Studio/Data/Preferences.cpp

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
//-----------------------------------------------------------------------------
1414
Preferences::Preferences() : settings_("Scientific Computing and Imaging Institute", "ShapeWorksStudio") {
1515
settings_.setFallbacksEnabled(false);
16+
update_threads();
1617
}
1718

1819
//-----------------------------------------------------------------------------
@@ -47,7 +48,10 @@ void Preferences::set_cache_enabled(bool value) { settings_.setValue("Studio/cac
4748
bool Preferences::get_parallel_enabled() { return settings_.value("Studio/parallel_enabled", true).toBool(); }
4849

4950
//-----------------------------------------------------------------------------
50-
void Preferences::set_parallel_enabled(bool value) { settings_.setValue("Studio/parallel_enabled", value); }
51+
void Preferences::set_parallel_enabled(bool value) {
52+
settings_.setValue("Studio/parallel_enabled", value);
53+
update_threads();
54+
}
5155

5256
//-----------------------------------------------------------------------------
5357
int Preferences::get_memory_cache_percent() { return settings_.value("Studio/memory_cache_percent", 25).toInt(); }
@@ -61,7 +65,10 @@ int Preferences::get_num_threads() {
6165
}
6266

6367
//-----------------------------------------------------------------------------
64-
void Preferences::set_num_threads(int num_threads) { settings_.setValue("Studio/num_threads", num_threads); }
68+
void Preferences::set_num_threads(int num_threads) {
69+
settings_.setValue("Studio/num_threads", num_threads);
70+
update_threads();
71+
}
6572

6673
//-----------------------------------------------------------------------------
6774
float Preferences::get_glyph_size() { return settings_.value("Project/glyph_size", 5.0).toFloat(); }
@@ -325,32 +332,48 @@ void Preferences::update_recent_files() {
325332
recent_paths_ = no_dupe_paths;
326333
}
327334

335+
//-----------------------------------------------------------------------------
336+
void Preferences::update_threads() {
337+
int num_threads = get_parallel_enabled() ? get_num_threads() : 1;
338+
setenv("TBB_NUM_THREADS", std::to_string(num_threads).c_str(), 1);
339+
}
340+
328341
//-----------------------------------------------------------------------------
329342
bool Preferences::get_auto_update_check() { return settings_.value("General/auto_update_check", true).toBool(); }
330343

331344
//-----------------------------------------------------------------------------
332345
void Preferences::set_auto_update_check(bool enabled) { settings_.setValue("General/auto_update_check", enabled); }
333346

347+
//-----------------------------------------------------------------------------
334348
QDateTime Preferences::get_update_snooze_until() {
335349
return settings_.value("General/update_snooze_until", QDateTime()).toDateTime();
336350
}
337351

352+
//-----------------------------------------------------------------------------
338353
void Preferences::set_update_snooze_until(QDateTime date) { settings_.setValue("General/update_snooze_until", date); }
339354

355+
//-----------------------------------------------------------------------------
340356
QString Preferences::get_device_id() {
341357
QString id = settings_.value("General/device_id", QUuid::createUuid().toString()).toString();
342358
settings_.setValue("General/device_id", id);
343359
return id;
344360
}
345361

362+
//-----------------------------------------------------------------------------
346363
bool Preferences::get_telemetry_enabled() { return settings_.value("General/telemetry_enabled", true).toBool(); }
364+
//-----------------------------------------------------------------------------
347365
void Preferences::set_telemetry_enabled(bool enabled) { settings_.setValue("General/telemetry_enabled", enabled); }
366+
//-----------------------------------------------------------------------------
348367
bool Preferences::get_telemetry_asked() { return settings_.value("General/telemetry_asked", false).toBool(); }
368+
//-----------------------------------------------------------------------------
349369
void Preferences::set_telemetry_asked(bool asked) { settings_.setValue("General/telemetry_asked", asked); }
350370

371+
//-----------------------------------------------------------------------------
351372
QStringList Preferences::get_pending_telemetry_events() {
352373
return settings_.value("Telemetry/pending_events").toStringList();
353374
}
375+
376+
//-----------------------------------------------------------------------------
354377
void Preferences::set_pending_telemetry_events(QStringList events) {
355378
settings_.setValue("Telemetry/pending_events", events);
356379
}

Studio/Data/Preferences.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ class Preferences : public QObject {
139139

140140
private:
141141
void update_recent_files();
142+
void update_threads();
142143
QStringList recent_files_;
143144
QStringList recent_paths_;
144145

Studio/Data/PreferencesWindow.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ PreferencesWindow::PreferencesWindow(QWidget* parent, Preferences& prefs) : pref
3535
}
3636

3737
ui_->particle_colors->clear();
38-
QMetaEnum e = QMetaEnum::fromType<shapeworks::ParticleColors::ParticleColorsType>();
38+
QMetaEnum e = QMetaEnum::fromType<ParticleColors::ParticleColorsType>();
3939
for (int i = 0; i < e.keyCount(); i++) {
4040
ui_->particle_colors->addItem(e.key(i));
4141
}

0 commit comments

Comments
 (0)