summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2024-02-05 14:20:02 -0500
committerTavian Barnes <tavianator@tavianator.com>2024-02-06 15:22:39 -0500
commit6bb323d446e2500c5a20866b56335ac8633e1c23 (patch)
treef7d37105eef1fdf5d9e75243cfb2dc02c8d53771
parent3b82c88d1950291b1b703f082df43ec1b9654eb5 (diff)
downloadbfs-6bb323d446e2500c5a20866b56335ac8633e1c23.tar.xz
ctx: Fill in ctx->threads earlier
-rw-r--r--src/ctx.c16
-rw-r--r--src/eval.c21
-rw-r--r--src/parse.c6
3 files changed, 20 insertions, 23 deletions
diff --git a/src/ctx.c b/src/ctx.c
index 1f3e72e..6c84f75 100644
--- a/src/ctx.c
+++ b/src/ctx.c
@@ -15,6 +15,21 @@
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
+#include <unistd.h>
+
+/** Get the initial value for ctx->threads (-j). */
+static int bfs_nproc(void) {
+ long nproc = sysconf(_SC_NPROCESSORS_ONLN);
+
+ if (nproc < 1) {
+ nproc = 1;
+ } else if (nproc > 8) {
+ // Not much speedup after 8 threads
+ nproc = 8;
+ }
+
+ return nproc;
+}
struct bfs_ctx *bfs_ctx_new(void) {
struct bfs_ctx *ctx = ZALLOC(struct bfs_ctx);
@@ -28,6 +43,7 @@ struct bfs_ctx *bfs_ctx_new(void) {
ctx->maxdepth = INT_MAX;
ctx->flags = BFTW_RECOVER;
ctx->strategy = BFTW_BFS;
+ ctx->threads = bfs_nproc();
ctx->optlevel = 3;
trie_init(&ctx->files);
diff --git a/src/eval.c b/src/eval.c
index dfeaa1e..a4c0c11 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1515,19 +1515,6 @@ done:
return ret;
}
-static int infer_nproc(void) {
- long nproc = sysconf(_SC_NPROCESSORS_ONLN);
-
- if (nproc < 1) {
- nproc = 1;
- } else if (nproc > 8) {
- // Not much speedup after 8 threads
- nproc = 8;
- }
-
- return nproc;
-}
-
/**
* Dump the bftw() flags for -D search.
*/
@@ -1614,12 +1601,8 @@ int bfs_eval(struct bfs_ctx *ctx) {
reserve_fds(fdlimit);
fdlimit = infer_fdlimit(ctx, fdlimit);
- int nthreads;
- if (ctx->threads > 0) {
- nthreads = ctx->threads - 1;
- } else {
- nthreads = infer_nproc() - 1;
- }
+ // -1 for the main thread
+ int nthreads = ctx->threads - 1;
struct bftw_args bftw_args = {
.paths = ctx->paths,
diff --git a/src/parse.c b/src/parse.c
index 4212196..3a78840 100644
--- a/src/parse.c
+++ b/src/parse.c
@@ -3452,14 +3452,12 @@ void bfs_ctx_dump(const struct bfs_ctx *ctx, enum debug_flags flag) {
cfprintf(cerr, " ${cyn}-s${rs}");
}
+ cfprintf(cerr, " ${cyn}-j${bld}%d${rs}", ctx->threads);
+
if (ctx->optlevel != 3) {
cfprintf(cerr, " ${cyn}-O${bld}%d${rs}", ctx->optlevel);
}
- if (ctx->threads > 0) {
- cfprintf(cerr, " ${cyn}-j${bld}%d${rs}", ctx->threads);
- }
-
cfprintf(cerr, " ${cyn}-S${rs} ${bld}%s${rs}", bftw_strategy_name(ctx->strategy));
enum debug_flags debug = ctx->debug;