Skip to content

Commit af70b5d

Browse files
authored
Fix GreedyScheduler with ntasks and chunksize, closes #120 (#122)
1 parent 8ea0ff7 commit af70b5d

File tree

2 files changed

+34
-18
lines changed

2 files changed

+34
-18
lines changed

src/schedulers.jl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,12 +281,13 @@ function GreedyScheduler(;
281281
else
282282
# only choose nchunks default if chunksize hasn't been specified
283283
if !isgiven(nchunks) && !isgiven(chunksize)
284+
# neither nchunks nor chunksize has been specified but chunking = true
284285
nchunks = 10 * nthreads(:default)
285286
chunksize = -1
286-
else
287-
nchunks = isgiven(nchunks) ? nchunks :
288-
isgiven(ntasks) ? ntasks : -1
289-
chunksize = isgiven(chunksize) ? chunksize : -1
287+
elseif !isgiven(nchunks)
288+
nchunks = -1
289+
elseif !isgiven(chunksize)
290+
chunksize = -1
290291
end
291292
end
292293
GreedyScheduler(ntasks, nchunks, chunksize, split; chunking)

test/runtests.jl

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ end;
318318
end;
319319

320320
@testset "chunking mode + chunksize option" begin
321-
for sched in (DynamicScheduler, StaticScheduler)
321+
for sched in (DynamicScheduler, StaticScheduler, GreedyScheduler)
322322
@test sched() isa sched
323323
@test sched(; chunksize = 2) isa sched
324324

@@ -328,26 +328,41 @@ end;
328328
OhMyThreads.Schedulers.FixedCount
329329
@test OhMyThreads.Schedulers.chunking_mode(sched(; chunking = false)) ==
330330
OhMyThreads.Schedulers.NoChunking
331-
@test OhMyThreads.Schedulers.chunking_mode(sched(;
332-
nchunks = 2, chunksize = 4, chunking = false)) ==
333-
OhMyThreads.Schedulers.NoChunking
334-
@test OhMyThreads.Schedulers.chunking_mode(sched(;
335-
nchunks = -2, chunksize = -4, split = :whatever, chunking = false)) ==
336-
OhMyThreads.Schedulers.NoChunking
331+
if sched != GreedyScheduler
332+
# For (Dynamic|Static)Scheduler `chunking = false` overrides `nchunks` and
333+
# `chunksize`
334+
@test OhMyThreads.Schedulers.chunking_mode(sched(;
335+
nchunks = 2, chunksize = 4, chunking = false)) ==
336+
OhMyThreads.Schedulers.NoChunking
337+
@test OhMyThreads.Schedulers.chunking_mode(sched(;
338+
nchunks = -2, chunksize = -4, split = :whatever, chunking = false)) ==
339+
OhMyThreads.Schedulers.NoChunking
340+
@test OhMyThreads.Schedulers.chunking_enabled(sched(;
341+
nchunks = -2, chunksize = -4, chunking = false)) == false
342+
@test OhMyThreads.Schedulers.chunking_enabled(sched(;
343+
nchunks = 2, chunksize = 4, chunking = false)) == false
344+
else
345+
# For GreedyScheduler `nchunks` or `chunksize` overrides `chunking = false`
346+
@test OhMyThreads.Schedulers.chunking_mode(sched(;
347+
nchunks = 2, chunking = false)) ==
348+
OhMyThreads.Schedulers.FixedCount
349+
@test OhMyThreads.Schedulers.chunking_mode(sched(;
350+
chunksize = 2, chunking = false)) ==
351+
OhMyThreads.Schedulers.FixedSize
352+
@test OhMyThreads.Schedulers.chunking_enabled(sched(;
353+
nchunks = 2, chunking = false)) == true
354+
@test OhMyThreads.Schedulers.chunking_enabled(sched(;
355+
chunksize = 4, chunking = false)) == true
356+
end
337357
@test OhMyThreads.Schedulers.chunking_enabled(sched(; chunksize = 2)) == true
338358
@test OhMyThreads.Schedulers.chunking_enabled(sched(; nchunks = 2)) == true
339-
@test OhMyThreads.Schedulers.chunking_enabled(sched(;
340-
nchunks = -2, chunksize = -4, chunking = false)) == false
341-
@test OhMyThreads.Schedulers.chunking_enabled(sched(;
342-
nchunks = 2, chunksize = 4, chunking = false)) == false
343-
344359
@test_throws ArgumentError sched(; nchunks = 2, chunksize = 3)
345360
@test_throws ArgumentError sched(; nchunks = 0, chunksize = 0)
346361
@test_throws ArgumentError sched(; nchunks = -2, chunksize = -3)
347362

348-
let scheduler = sched(; chunksize = 2)
363+
let scheduler = sched(; chunksize = 2, split = :batch)
349364
@test tmapreduce(sin, +, 1:10; scheduler) mapreduce(sin, +, 1:10)
350-
@test tmap(sin, 1:10; scheduler) map(sin, 1:10)
365+
@test tmap(sin, Float64, 1:10; scheduler) map(sin, 1:10)
351366
@test isnothing(tforeach(sin, 1:10; scheduler))
352367
@test treduce(+, 1:10; scheduler) reduce(+, 1:10)
353368
end

0 commit comments

Comments
 (0)