Skip to content

Commit 7c6ec17

Browse files
authored
interrupt long-running evaluations (#162)
1 parent 1f15105 commit 7c6ec17

File tree

14 files changed

+64
-36
lines changed

14 files changed

+64
-36
lines changed

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"map": "cpp",
66
"chrono": "cpp",
77
"utility": "cpp",
8-
"stdexcept": "cpp"
8+
"stdexcept": "cpp",
9+
"thread": "cpp"
910
},
1011
"makefile.makeDirectory": "src"
1112
}

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ To install or update LODA, please follow the [installation instructions](https:/
44

55
### Bugfixes
66

7+
* Interrupt long-running evaluations if time limit is reached
78
* Fix handling of protected programs
89
* Fix progress monitor for native mining (non-BOINC)
910

src/Makefile.linux-arm64.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# BEGIN PLATFORM CONFIG FOR LINUX ARM64
22
CXX = aarch64-linux-gnu-g++
3-
LDFLAGS = -static -static-libstdc++ -static-libgcc
3+
LDFLAGS = -pthread -static -static-libstdc++ -static-libgcc
44
# END PLATFORM CONFIG FOR LINUX ARM64
55

66
include Makefile

src/Makefile.linux-x86.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# BEGIN PLATFORM CONFIG FOR LINUX X86
22
CXX = x86_64-linux-gnu-g++
3-
LDFLAGS = -static -static-libstdc++ -static-libgcc
3+
LDFLAGS = -pthread -static -static-libstdc++ -static-libgcc
44
# END PLATFORM CONFIG FOR LINUX X86
55

66
include Makefile

src/boinc.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,7 @@ void Boinc::run() {
7979
}
8080

8181
// start mining!
82-
Miner miner(settings, 60, // reduced log interval: 1 minute
83-
&progress_monitor);
82+
Miner miner(settings, &progress_monitor);
8483
miner.mine();
8584
}
8685

src/commands.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ void Commands::mine() {
208208
const int64_t target_seconds = settings.num_mine_hours * 3600;
209209
progress_monitor.reset(new ProgressMonitor(target_seconds, "", "", 0));
210210
}
211-
Miner miner(settings, Miner::DEFAULT_LOG_INTERVAL, progress_monitor.get());
211+
Miner miner(settings, progress_monitor.get());
212212
miner.mine();
213213
}
214214

src/finder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ Matcher::seq_programs_t Finder::findSequence(
7878
evaluator.eval(p, tmp_seqs);
7979
norm_seq = tmp_seqs[1];
8080
} catch (const std::exception &) {
81+
// evaluation error
8182
return result;
8283
}
8384
Program p2 = p;

src/include/miner.hpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,15 @@ class Miner {
2525
std::vector<Matcher::Config> matchers;
2626
};
2727

28-
static constexpr int64_t DEFAULT_LOG_INTERVAL = 120; // 2 minutes
29-
30-
Miner(const Settings &settings, int64_t log_interval = DEFAULT_LOG_INTERVAL,
31-
ProgressMonitor *progress_monitor = nullptr);
28+
Miner(const Settings &settings, ProgressMonitor *progress_monitor = nullptr);
3229

3330
void mine();
3431

3532
void submit(const std::string &path, std::string id);
3633

3734
private:
35+
void runMineLoop();
36+
3837
bool checkRegularTasks();
3938

4039
void reload();

src/include/util.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,8 @@ class Random {
133133
private:
134134
Random();
135135
};
136+
137+
class Signals {
138+
public:
139+
static bool HALT;
140+
};

src/interpreter.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,11 @@ size_t Interpreter::run(const Program& p, Memory& mem) {
240240
"Maximum memory exceeded: " + std::to_string(mem.approximate_size()) +
241241
"; last operation: " + ProgramUtil::operationToString(op));
242242
}
243+
244+
// check for external interrupt
245+
if (Signals::HALT) {
246+
throw std::runtime_error("interpreter interrupted by halt signal");
247+
}
243248
}
244249
if (is_debug) {
245250
Log::get().debug("Finished execution after " + std::to_string(cycles) +

0 commit comments

Comments
 (0)