Skip to content

Commit 5bc4a3f

Browse files
committed
Use safetestsets
1 parent 4b901d4 commit 5bc4a3f

File tree

7 files changed

+102
-84
lines changed

7 files changed

+102
-84
lines changed

src/algorithms.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ struct SerialPSO <: PSOAlogrithm
8787
end
8888

8989
function ParallelPSOKernel(num_particles::Int;
90-
global_update = false, backend = CPU())
90+
global_update = true, backend = CPU())
9191
ParallelPSOKernel(num_particles, global_update, backend)
9292
end
9393

src/kernels.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
update_pos = max.(particle.position, prob.lb)
1414
update_pos = min.(update_pos, prob.ub)
1515
@set! particle.position = update_pos
16-
# @set! particle.position = min(particle.position, ub)
1716

1817
@set! particle.cost = prob.f(particle.position, prob.p)
1918

src/utils.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,5 +109,9 @@ end
109109
function check_init_bounds(prob)
110110
lb = prob.lb === nothing ? fill(eltype(prob.u0)(-Inf), length(prob.u0)) : prob.lb
111111
ub = prob.ub === nothing ? fill(eltype(prob.u0)(Inf), length(prob.u0)) : prob.ub
112+
if prob.u0 isa SArray
113+
lb = SVector{length(lb), eltype(lb)}(lb)
114+
ub = SVector{length(ub), eltype(ub)}(ub)
115+
end
112116
lb, ub
113117
end

test/Project.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
[deps]
2+
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
23
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
34
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
5+
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
6+
SciMLBase = "0bca4576-84f4-4d90-8ffe-ffa030f20462"
47
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
58
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

test/gpu.jl

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,47 @@
1-
Random.seed!(1234)
1+
using PSOGPU, StaticArrays, SciMLBase, Test, LinearAlgebra, Random
22

3-
## Solving the rosenbrock problem
4-
lb = @SArray ones(Float32, N)
5-
lb = -1 * lb
6-
ub = @SArray fill(Float32(10.0), N)
3+
DEVICE = get(ENV, "GROUP", "CUDA")
74

8-
function rosenbrock(x, p)
9-
sum(p[2] * (x[i + 1] - x[i]^2)^2 + (p[1] - x[i])^2 for i in 1:(length(x) - 1))
5+
@eval using $(Symbol(DEVICE))
6+
7+
if DEVICE == "CUDA"
8+
backend = CUDABackend()
9+
elseif DEVICE == "AMDGPU"
10+
backend = ROCBackend()
1011
end
1112

12-
x0 = @SArray zeros(Float32, N)
13-
p = @SArray Float32[1.0, 100.0]
13+
@testset "Rosenbrock GPU tests $(N)" for N in 2:4
14+
Random.seed!(1234)
15+
16+
## Solving the rosenbrock problem
17+
lb = @SArray ones(Float32, N)
18+
lb = -1 * lb
19+
ub = @SArray fill(Float32(10.0), N)
20+
21+
function rosenbrock(x, p)
22+
sum(p[2] * (x[i + 1] - x[i]^2)^2 + (p[1] - x[i])^2 for i in 1:(length(x) - 1))
23+
end
24+
25+
x0 = @SArray zeros(Float32, N)
26+
p = @SArray Float32[1.0, 100.0]
1427

15-
prob = OptimizationProblem(rosenbrock, x0, p; lb = lb, ub = ub)
28+
prob = OptimizationProblem(rosenbrock, x0, p; lb = lb, ub = ub)
1629

17-
n_particles = 1000
30+
n_particles = 100
1831

19-
sol = solve(prob, ParallelPSOKernel(n_particles; backend), maxiters = 500)
32+
sol = solve(prob, ParallelPSOKernel(n_particles; backend), maxiters = 500)
2033

21-
@test sol.objective < 1e-4
34+
@test sol.retcode == ReturnCode.Default
2235

23-
sol = solve(prob,
24-
ParallelSyncPSOKernel(n_particles, backend),
25-
maxiters = 500)
36+
sol = solve(prob,
37+
ParallelPSOKernel(n_particles; backend, global_update = false),
38+
maxiters = 500)
2639

27-
@test sol.objective < 1e-4
40+
@test sol.retcode == ReturnCode.Default
41+
42+
sol = solve(prob,
43+
ParallelSyncPSOKernel(n_particles, backend),
44+
maxiters = 500)
45+
46+
@test sol.objective < 6e-4
47+
end

test/regression.jl

Lines changed: 53 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,76 @@
1-
## Solving the rosenbrock problem
2-
Random.seed!(1)
1+
using PSOGPU, StaticArrays, SciMLBase, Test, LinearAlgebra, Random
32

4-
lb = @SArray ones(Float32, N)
5-
lb = -1 * lb
6-
ub = @SArray fill(Float32(10.0), N)
3+
@testset "Rosenbrock test dimension = $(N)" for N in 2:4
74

8-
function rosenbrock(x, p)
9-
sum(p[2] * (x[i + 1] - x[i]^2)^2 + (p[1] - x[i])^2 for i in 1:(length(x) - 1))
10-
end
5+
## Solving the rosenbrock problem
6+
Random.seed!(1234)
7+
lb = @SArray ones(Float32, N)
8+
lb = -1 * lb
9+
ub = @SArray fill(Float32(10.0), N)
10+
11+
function rosenbrock(x, p)
12+
sum(p[2] * (x[i + 1] - x[i]^2)^2 + (p[1] - x[i])^2 for i in 1:(length(x) - 1))
13+
end
1114

12-
x0 = @SArray zeros(Float32, N)
13-
p = @SArray Float32[1.0, 100.0]
15+
x0 = @SArray zeros(Float32, N)
16+
p = @SArray Float32[1.0, 100.0]
1417

15-
array_prob = OptimizationProblem(rosenbrock,
16-
zeros(Float32, N),
17-
Float32[1.0, 100.0];
18-
lb = lb,
19-
ub = ub)
18+
array_prob = OptimizationProblem(rosenbrock,
19+
zeros(Float32, N),
20+
Float32[1.0, 100.0];
21+
lb = lb,
22+
ub = ub)
2023

21-
prob = OptimizationProblem(rosenbrock, x0, p; lb = lb, ub = ub)
24+
prob = OptimizationProblem(rosenbrock, x0, p; lb = lb, ub = ub)
2225

23-
n_particles = 1000
26+
n_particles = 1000
2427

25-
sol = solve(array_prob,
26-
ParallelPSOArray(n_particles),
27-
maxiters = 500)
28+
sol = solve(array_prob,
29+
ParallelPSOArray(n_particles),
30+
maxiters = 500)
2831

29-
@test sol.objective < 1e-4
32+
@test sol.objective < 3e-4
3033

31-
sol = solve(prob,
32-
SerialPSO(n_particles),
33-
maxiters = 500)
34+
sol = solve(prob,
35+
SerialPSO(n_particles),
36+
maxiters = 600)
3437

35-
@test sol.objective < 1e-4
38+
@test sol.objective < 1e-4
3639

37-
lb = @SVector fill(Float32(-Inf), N)
38-
ub = @SVector fill(Float32(Inf), N)
40+
lb = @SVector fill(Float32(-Inf), N)
41+
ub = @SVector fill(Float32(Inf), N)
3942

40-
array_prob = remake(array_prob; lb = lb, ub = ub)
41-
prob = remake(prob; lb = lb, ub = ub)
43+
array_prob = remake(array_prob; lb = lb, ub = ub)
44+
prob = remake(prob; lb = lb, ub = ub)
4245

43-
n_particles = 2000
46+
n_particles = 2000
4447

45-
sol = solve(array_prob,
46-
ParallelPSOArray(n_particles),
47-
maxiters = 500)
48+
sol = solve(array_prob,
49+
ParallelPSOArray(n_particles),
50+
maxiters = 500)
4851

49-
@test sol.objective < 1e-4
52+
@test sol.objective < 1e-4
5053

51-
sol = solve(prob,
52-
SerialPSO(n_particles),
53-
maxiters = 500)
54+
sol = solve(prob,
55+
SerialPSO(n_particles),
56+
maxiters = 500)
5457

55-
@test sol.objective < 1e-4
58+
@test sol.objective < 1e-4
5659

57-
array_prob = remake(array_prob; lb = nothing, ub = nothing)
58-
prob = remake(prob; lb = nothing, ub = nothing)
60+
array_prob = remake(array_prob; lb = nothing, ub = nothing)
61+
prob = remake(prob; lb = nothing, ub = nothing)
5962

60-
n_particles = 2000
63+
n_particles = 2000
6164

62-
sol = solve(array_prob,
63-
ParallelPSOArray(n_particles),
64-
maxiters = 500)
65+
sol = solve(array_prob,
66+
ParallelPSOArray(n_particles),
67+
maxiters = 500)
6568

66-
@test sol.objective < 1e-4
69+
@test sol.objective < 1e-4
6770

68-
sol = solve(prob,
69-
SerialPSO(n_particles),
70-
maxiters = 500)
71+
sol = solve(prob,
72+
SerialPSO(n_particles),
73+
maxiters = 500)
7174

72-
@test sol.objective < 1e-4
75+
@test sol.objective < 1e-4
76+
end

test/runtests.jl

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,10 @@
1-
using PSOGPU
2-
using Test, StaticArrays, LinearAlgebra, Random
1+
using SafeTestsets
2+
using Test
33

44
const GROUP = get(ENV, "GROUP", "CPU")
55

6-
@testset "Rosenbrock test dimension = $(n)" for n in 2:4
7-
global N = n
8-
include("./regression.jl")
9-
end
6+
@safetestset "Regression tests" include("./regression.jl")
107

118
if GROUP != "CPU"
12-
@eval using $(Symbol(GROUP))
13-
if GROUP == "CUDA"
14-
backend = CUDABackend()
15-
elseif GROUP == "AMDGPU"
16-
backend = ROCBackend()
17-
end
18-
19-
@testset "Rosenbrock on gpu" begin
20-
include("./gpu.jl")
21-
end
9+
@safetestset "GPU optimizers tests" include("./gpu.jl")
2210
end

0 commit comments

Comments
 (0)