Skip to content

Commit c055f88

Browse files
committed
Add SVD to testsuite and don't test regular stuff on GPU
1 parent c49e17c commit c055f88

File tree

15 files changed

+481
-494
lines changed

15 files changed

+481
-494
lines changed

src/implementations/schur.jl

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,29 @@ function check_input(::typeof(schur_vals!), A::AbstractMatrix, vals, ::AbstractA
2626
return nothing
2727
end
2828

29+
function check_input(::typeof(schur_full!), A::AbstractMatrix, TZv, ::DiagonalAlgorithm)
30+
m, n = size(A)
31+
@assert m == n && isdiag(A)
32+
T, Z, vals = TZv
33+
@assert vals isa AbstractVector && Z isa Diagonal
34+
@check_scalar(T, A)
35+
@check_size(Z, (m, m))
36+
@check_scalar(Z, A)
37+
@check_size(vals, (n,))
38+
# Diagonal doesn't need to promote to complex scalartype since we know it is diagonalizable
39+
@check_scalar(vals, A)
40+
return nothing
41+
end
42+
function check_input(::typeof(schur_vals!), A::AbstractMatrix, vals, ::DiagonalAlgorithm)
43+
m, n = size(A)
44+
@assert m == n && isdiag(A)
45+
@assert vals isa AbstractVector
46+
@check_size(vals, (n,))
47+
# Diagonal doesn't need to promote to complex scalartype since we know it is diagonalizable
48+
@check_scalar(vals, A)
49+
return nothing
50+
end
51+
2952
# Outputs
3053
# -------
3154
function initialize_output(::typeof(schur_full!), A::AbstractMatrix, ::AbstractAlgorithm)
@@ -39,6 +62,17 @@ function initialize_output(::typeof(schur_vals!), A::AbstractMatrix, ::AbstractA
3962
vals = similar(A, complex(eltype(A)), n)
4063
return vals
4164
end
65+
function initialize_output(::typeof(schur_full!), A::Diagonal, ::DiagonalAlgorithm)
66+
n = size(A, 1)
67+
Z = similar(A)
68+
vals = similar(A, eltype(A), n)
69+
return (A, Z, vals)
70+
end
71+
function initialize_output(::typeof(schur_vals!), A::Diagonal, ::DiagonalAlgorithm)
72+
n = size(A, 1)
73+
vals = similar(A, eltype(A), n)
74+
return vals
75+
end
4276

4377
# Implementation
4478
# --------------
@@ -72,3 +106,20 @@ function schur_vals!(A::AbstractMatrix, vals, alg::LAPACK_EigAlgorithm)
72106
end
73107
return vals
74108
end
109+
110+
# Diagonal logic
111+
# --------------
112+
function schur_full!(A::Diagonal, (T, Z, vals)::Tuple{Diagonal, Diagonal, <:AbstractVector}, alg::DiagonalAlgorithm)
113+
check_input(schur_full!, A, (T, Z, vals), alg)
114+
copy!(vals, diagview(A))
115+
one!(Z)
116+
T === A || copy!(T, A)
117+
return T, Z, vals
118+
end
119+
120+
function schur_vals!(A::Diagonal, vals::AbstractVector, alg::DiagonalAlgorithm)
121+
check_input(schur_vals!, A, vals, alg)
122+
Ad = diagview(A)
123+
vals === Ad || copy!(vals, Ad)
124+
return vals
125+
end

test/eig.jl

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@ using TestExtras
44
using StableRNGs
55
using LinearAlgebra: Diagonal
66
using MatrixAlgebraKit: TruncatedAlgorithm, diagview, norm
7-
8-
BLASFloats = (Float32, Float64, ComplexF32, ComplexF64)
9-
GenericFloats = (Float16, BigFloat, Complex{BigFloat})
10-
117
using CUDA, AMDGPU
128

139
BLASFloats = (Float32, Float64, ComplexF32, ComplexF64)
@@ -16,21 +12,28 @@ GenericFloats = (Float16,) #BigFloat, Complex{BigFloat})
1612
@isdefined(TestSuite) || include("testsuite/TestSuite.jl")
1713
using .TestSuite
1814

15+
is_buildkite = get(ENV, "BUILDKITE", "false") == "true"
16+
1917
m = 54
2018
for T in BLASFloats
2119
TestSuite.seed_rng!(123)
22-
TestSuite.test_eig(T, (m, m))
23-
if CUDA.functional()
24-
TestSuite.test_eig(CuMatrix{T}, (m, m); test_blocksize = false)
25-
TestSuite.test_eig(Diagonal{T, CuVector{T}}, m; test_blocksize = false)
20+
if is_buildkite
21+
if CUDA.functional()
22+
TestSuite.test_eig(CuMatrix{T}, (m, m); test_blocksize = false)
23+
TestSuite.test_eig(Diagonal{T, CuVector{T}}, m; test_blocksize = false)
24+
end
25+
#= not yet supported
26+
if AMDGPU.functional()
27+
TestSuite.test_eig(ROCMatrix{T}, (m, m); test_blocksize = false)
28+
TestSuite.test_eig(Diagonal{T, ROCVector{T}}, m; test_blocksize = false)
29+
end=#
30+
else
31+
TestSuite.test_eig(T, (m, m))
2632
end
27-
#= not yet supported
28-
if AMDGPU.functional()
29-
TestSuite.test_eig(ROCMatrix{T}, (m, m); test_blocksize = false)
30-
TestSuite.test_eig(Diagonal{T, ROCVector{T}}, m; test_blocksize = false)
31-
end=#
3233
end
33-
for T in (BLASFloats..., GenericFloats...)
34-
AT = Diagonal{T, Vector{T}}
35-
TestSuite.test_eig(AT, m; test_blocksize = false)
34+
if !is_buildkite
35+
for T in (BLASFloats..., GenericFloats...)
36+
AT = Diagonal{T, Vector{T}}
37+
TestSuite.test_eig(AT, m; test_blocksize = false)
38+
end
3639
end

test/eigh.jl

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,27 @@ GenericFloats = (Float16, BigFloat, Complex{BigFloat})
1111
@isdefined(TestSuite) || include("testsuite/TestSuite.jl")
1212
using .TestSuite
1313

14+
is_buildkite = get(ENV, "BUILDKITE", "false") == "true"
15+
1416
m = 54
1517
for T in BLASFloats
1618
TestSuite.seed_rng!(123)
17-
TestSuite.test_eigh(T, (m, m))
18-
if CUDA.functional()
19-
TestSuite.test_eigh(CuMatrix{T}, (m, m); test_blocksize = false)
20-
TestSuite.test_eigh(Diagonal{T, CuVector{T}}, m; test_blocksize = false)
21-
end
22-
if AMDGPU.functional()
23-
TestSuite.test_eigh(ROCMatrix{T}, (m, m); test_blocksize = false)
24-
TestSuite.test_eigh(Diagonal{T, ROCVector{T}}, m; test_blocksize = false)
19+
if is_buildkite
20+
if CUDA.functional()
21+
TestSuite.test_eigh(CuMatrix{T}, (m, m); test_blocksize = false)
22+
TestSuite.test_eigh(Diagonal{T, CuVector{T}}, m; test_blocksize = false)
23+
end
24+
if AMDGPU.functional()
25+
TestSuite.test_eigh(ROCMatrix{T}, (m, m); test_blocksize = false)
26+
TestSuite.test_eigh(Diagonal{T, ROCVector{T}}, m; test_blocksize = false)
27+
end
28+
else
29+
TestSuite.test_eigh(T, (m, m))
2530
end
2631
end
27-
for T in (BLASFloats..., GenericFloats...)
28-
AT = Diagonal{T, Vector{T}}
29-
TestSuite.test_eigh(AT, m; test_blocksize = false)
32+
if !is_buildkite
33+
for T in (BLASFloats..., GenericFloats...)
34+
AT = Diagonal{T, Vector{T}}
35+
TestSuite.test_eigh(AT, m; test_blocksize = false)
36+
end
3037
end

test/genericschur/eig.jl

Lines changed: 0 additions & 116 deletions
This file was deleted.

test/lq.jl

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,30 @@ using CUDA, AMDGPU
88
BLASFloats = (Float32, Float64, ComplexF32, ComplexF64)
99
GenericFloats = (Float16, BigFloat, Complex{BigFloat})
1010

11+
@isdefined(TestSuite) || include("testsuite/TestSuite.jl")
12+
using .TestSuite
13+
14+
is_buildkite = get(ENV, "BUILDKITE", "false") == "true"
15+
1116
m = 54
1217
for T in BLASFloats, n in (37, m, 63)
1318
TestSuite.seed_rng!(123)
14-
TestSuite.test_lq(T, (m, n); test_pivoted = false)
15-
if CUDA.functional()
16-
TestSuite.test_lq(CuMatrix{T}, (m, n); test_pivoted = false, test_blocksize = false)
17-
TestSuite.test_lq(Diagonal{T, CuVector{T}}, m; test_pivoted = false, test_blocksize = false)
18-
end
19-
if AMDGPU.functional()
20-
TestSuite.test_lq(ROCMatrix{T}, (m, n); test_pivoted = false, test_blocksize = false)
21-
TestSuite.test_lq(Diagonal{T, ROCVector{T}}, m; test_pivoted = false, test_blocksize = false)
19+
if is_buildkite
20+
if CUDA.functional()
21+
TestSuite.test_lq(CuMatrix{T}, (m, n); test_pivoted = false, test_blocksize = false)
22+
TestSuite.test_lq(Diagonal{T, CuVector{T}}, m; test_pivoted = false, test_blocksize = false)
23+
end
24+
if AMDGPU.functional()
25+
TestSuite.test_lq(ROCMatrix{T}, (m, n); test_pivoted = false, test_blocksize = false)
26+
TestSuite.test_lq(Diagonal{T, ROCVector{T}}, m; test_pivoted = false, test_blocksize = false)
27+
end
28+
else
29+
TestSuite.test_lq(T, (m, n); test_pivoted = false)
2230
end
2331
end
24-
for T in (BLASFloats..., GenericFloats...)
25-
AT = Diagonal{T, Vector{T}}
26-
TestSuite.test_lq(AT, m; test_pivoted = false, test_blocksize = false)
32+
if !is_buildkite
33+
for T in (BLASFloats..., GenericFloats...)
34+
AT = Diagonal{T, Vector{T}}
35+
TestSuite.test_lq(AT, m; test_pivoted = false, test_blocksize = false)
36+
end
2737
end

test/orthnull.jl

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,27 @@ GenericFloats = (Float16, BigFloat, Complex{BigFloat})
1111
@isdefined(TestSuite) || include("testsuite/TestSuite.jl")
1212
using .TestSuite
1313

14+
is_buildkite = get(ENV, "BUILDKITE", "false") == "true"
15+
1416
m = 54
1517
for T in BLASFloats, n in (37, m, 63)
1618
TestSuite.seed_rng!(123)
17-
TestSuite.test_orthnull(T, (m, n))
18-
if CUDA.functional()
19-
TestSuite.test_orthnull(CuMatrix{T}, (m, n); test_pivoted = false, test_blocksize = false)
20-
TestSuite.test_orthnull(Diagonal{T, CuVector{T}}, m; test_pivoted = false, test_blocksize = false)
21-
end
22-
if AMDGPU.functional()
23-
TestSuite.test_orthnull(ROCMatrix{T}, (m, n); test_pivoted = false, test_blocksize = false)
24-
TestSuite.test_orthnull(Diagonal{T, ROCVector{T}}, m; test_pivoted = false, test_blocksize = false)
19+
if is_buildkite
20+
if CUDA.functional()
21+
TestSuite.test_orthnull(CuMatrix{T}, (m, n); test_pivoted = false, test_blocksize = false)
22+
TestSuite.test_orthnull(Diagonal{T, CuVector{T}}, m; test_pivoted = false, test_blocksize = false)
23+
end
24+
if AMDGPU.functional()
25+
TestSuite.test_orthnull(ROCMatrix{T}, (m, n); test_pivoted = false, test_blocksize = false)
26+
TestSuite.test_orthnull(Diagonal{T, ROCVector{T}}, m; test_pivoted = false, test_blocksize = false)
27+
end
28+
else
29+
TestSuite.test_orthnull(T, (m, n))
2530
end
2631
end
27-
for T in (BLASFloats..., GenericFloats...)
28-
AT = Diagonal{T, Vector{T}}
29-
TestSuite.test_orthnull(AT, m; test_pivoted = false, test_blocksize = false)
32+
if !is_buildkite
33+
for T in (BLASFloats..., GenericFloats...)
34+
AT = Diagonal{T, Vector{T}}
35+
TestSuite.test_orthnull(AT, m; test_pivoted = false, test_blocksize = false)
36+
end
3037
end

test/polar.jl

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,27 @@ GenericFloats = (Float16, BigFloat, Complex{BigFloat})
1010
@isdefined(TestSuite) || include("testsuite/TestSuite.jl")
1111
using .TestSuite
1212

13+
is_buildkite = get(ENV, "BUILDKITE", "false") == "true"
14+
1315
m = 54
1416
for T in BLASFloats, n in (37, m, 63)
1517
TestSuite.seed_rng!(123)
16-
TestSuite.test_polar(T, (m, n))
17-
if CUDA.functional()
18-
TestSuite.test_polar(CuMatrix{T}, (m, n); test_pivoted = false, test_blocksize = false)
19-
TestSuite.test_polar(Diagonal{T, CuVector{T}}, m; test_pivoted = false, test_blocksize = false)
20-
end
21-
if AMDGPU.functional()
22-
TestSuite.test_polar(ROCMatrix{T}, (m, n); test_pivoted = false, test_blocksize = false)
23-
TestSuite.test_polar(Diagonal{T, ROCVector{T}}, m; test_pivoted = false, test_blocksize = false)
18+
if is_buildkite
19+
if CUDA.functional()
20+
TestSuite.test_polar(CuMatrix{T}, (m, n); test_pivoted = false, test_blocksize = false)
21+
TestSuite.test_polar(Diagonal{T, CuVector{T}}, m; test_pivoted = false, test_blocksize = false)
22+
end
23+
if AMDGPU.functional()
24+
TestSuite.test_polar(ROCMatrix{T}, (m, n); test_pivoted = false, test_blocksize = false)
25+
TestSuite.test_polar(Diagonal{T, ROCVector{T}}, m; test_pivoted = false, test_blocksize = false)
26+
end
27+
else
28+
TestSuite.test_polar(T, (m, n))
2429
end
2530
end
26-
for T in (BLASFloats..., GenericFloats...)
27-
AT = Diagonal{T, Vector{T}}
28-
TestSuite.test_polar(AT, m; test_pivoted = false, test_blocksize = false)
31+
if !is_buildkite
32+
for T in (BLASFloats..., GenericFloats...)
33+
AT = Diagonal{T, Vector{T}}
34+
TestSuite.test_polar(AT, m; test_pivoted = false, test_blocksize = false)
35+
end
2936
end

0 commit comments

Comments
 (0)