Skip to content
This repository was archived by the owner on Oct 23, 2023. It is now read-only.

Commit b2c1cd1

Browse files
committed
Implemented --extra-time
1 parent de5a49b commit b2c1cd1

File tree

10 files changed

+23
-4
lines changed

10 files changed

+23
-4
lines changed

capnp/server.capnp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ interface Execution {
3333
disableCache @5 ();
3434
makeExclusive @6 ();
3535
setLimits @7 (limits: Resources);
36+
setExtraTime @14 (extraTime: Float32);
3637

3738
# Get file IDs representing outputs
3839
stdout @8 (isExecutable :Bool = false) -> (file :File);

cpp/frontend/frontend.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,12 @@ void Execution::setLimits(const Resources& limits) {
227227
my_builder_.AddPromise(req.send().ignoreResult());
228228
}
229229

230+
void Execution::setExtraTime(float extra_time) {
231+
auto req = execution_.setExtraTimeRequest();
232+
req.setExtraTime(extra_time);
233+
my_builder_.AddPromise(req.send().ignoreResult());
234+
}
235+
230236
File* Execution::stdout(bool is_executable) {
231237
auto req = execution_.stdoutRequest();
232238
req.setIsExecutable(is_executable);

cpp/frontend/frontend.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ class Execution {
175175
void disableCache();
176176
void makeExclusive();
177177
void setLimits(const Resources& limits);
178+
void setExtraTime(float extra_time);
178179

179180
File* stdout(bool is_executable);
180181
File* stderr(bool is_executable);

cpp/frontend/python/frontend.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ PYBIND11_MODULE(task_maker_frontend, m) {
117117
.def("disableCache", &frontend::Execution::disableCache)
118118
.def("makeExclusive", &frontend::Execution::makeExclusive)
119119
.def("setLimits", &frontend::Execution::setLimits)
120+
.def("setExtraTime", &frontend::Execution::setExtraTime)
120121
.def("stdout", &frontend::Execution::stdout,
121122
pybind11::return_value_policy::reference)
122123
.def("stderr", &frontend::Execution::stderr,

cpp/server/server.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,13 @@ kj::Promise<void> Execution::setLimits(SetLimitsContext context) {
210210
request_.setLimits(context.getParams().getLimits());
211211
return kj::READY_NOW;
212212
}
213+
kj::Promise<void> Execution::setExtraTime(SetExtraTimeContext context) {
214+
KJ_LOG(INFO, "Execution " + description_,
215+
kj::str("Setting extra time to ",
216+
std::to_string(context.getParams().getExtraTime())));
217+
request_.setExtraTime(context.getParams().getExtraTime());
218+
return kj::READY_NOW;
219+
}
213220
// TODO: check that this FIFO is from the correct execution group
214221
kj::Promise<void> Execution::addFifo(AddFifoContext context) {
215222
KJ_LOG(INFO, "Execution " + description_,

cpp/server/server.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class Execution : public capnproto::Execution::Server {
4242
kj::Promise<void> disableCache(DisableCacheContext context);
4343
kj::Promise<void> makeExclusive(MakeExclusiveContext context);
4444
kj::Promise<void> setLimits(SetLimitsContext context);
45+
kj::Promise<void> setExtraTime(SetExtraTimeContext context);
4546
kj::Promise<void> addFifo(AddFifoContext context);
4647
kj::Promise<void> stdout(StdoutContext context);
4748
kj::Promise<void> stderr(StderrContext context);

cpp/worker/executor.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,9 +274,9 @@ kj::Promise<void> Executor::Execute(capnproto::Request::Reader request_,
274274
// Scale up time limits to have a good margin for random occurrences.
275275
auto limits = request.getLimits();
276276
exec_options.cpu_limit_millis =
277-
limits.getCpuTime() * 1200 + request.getExtraTime();
277+
limits.getCpuTime() * 1200 + request.getExtraTime() * 1000;
278278
exec_options.wall_limit_millis =
279-
limits.getWallTime() * 1200 + request.getExtraTime();
279+
limits.getWallTime() * 1200 + request.getExtraTime() * 1000;
280280
exec_options.memory_limit_kb = limits.getMemory() * 1.2;
281281
exec_options.max_files = limits.getNofiles();
282282
exec_options.max_procs = limits.getNproc();

python/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def __init__(self, args):
3535

3636
# execution group
3737
self.exclusive = args.exclusive # type: bool
38-
# self.extra_time = args.extra_time # type: float
38+
self.extra_time = args.extra_time # type: float
3939
self.copy_exe = args.copy_exe # type: # bool
4040

4141
# terry group

python/formats/ioi_format.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,8 @@ def add_non_solution(source: SourceFile):
384384
output = eval.stdout(False)
385385
if config.exclusive:
386386
eval.makeExclusive()
387+
if config.extra_time:
388+
eval.setExtraTime(config.extra_time)
387389

388390
interface.add_evaluate_solution(st_num, tc_num, solution.name,
389391
eval)

python/languages/rust.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def get_compilation_command(self, source_filenames: List[str],
2727
% source_filenames[0])
2828
cmd += ["-O", "-o", exe_name]
2929
# with rustc you only need to specify the main file
30-
cmd += source_filenames[0]
30+
cmd += [source_filenames[0]]
3131
return CommandType.SYSTEM, cmd
3232

3333

0 commit comments

Comments
 (0)