From 95ca0c519b147f7c7414a1f468eb7e53b64bcf01 Mon Sep 17 00:00:00 2001 From: Paul Irofti Date: Thu, 27 Mar 2025 20:04:40 +0200 Subject: [PATCH] Adjust batches if total jobs is smaller then. --- src/CCubes.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/CCubes.c b/src/CCubes.c index 38209e5..7a71402 100644 --- a/src/CCubes.c +++ b/src/CCubes.c @@ -195,16 +195,21 @@ SEXP CCubes(SEXP tt) { Rprintf("---k: %d\n", k); } - int n_tasks = 512; + int n_tasks = nchoosek(ninputs, k); + int n_tasks_batch = 512; struct ccubes_context *ctx = NULL; - for (int task = 0; task < nchoosek(ninputs, k); task+=n_tasks) { + for (int task = 0; task < n_tasks; task+=n_tasks_batch) { + /* adjust if batch size is larger than total job size */ + int current_batch = n_tasks < n_tasks_batch ? n_tasks : n_tasks_batch; + log_debug("ccubes", "Tasks %d - %d out of %d", - task, task + n_tasks, nchoosek(ninputs, k)); + task, task + current_batch, current_batch); + bool *coverage; unsigned int *fixed_bits; unsigned int *value_bits; unsigned int *pichart_values; - ctx = ccubes_do_tasks(n_tasks, + ctx = ccubes_do_tasks(current_batch, task, k, ninputs, @@ -231,7 +236,7 @@ SEXP CCubes(SEXP tt) { log_error("ccubes", "ccubes_do_tasks failed"); } - for (int i = 0; i < n_tasks; i++) { + for (int i = 0; i < current_batch; i++) { log_debug("ccubes", "Task %d", i); log_debug_raw("ccubes", "coverage[%d]:", i);