Skip to content

Commit 6d6a32b

Browse files
authored
no time like the present for sparser test output; fixes #165 (#166)
1 parent cfc3a87 commit 6d6a32b

File tree

1 file changed

+135
-85
lines changed

1 file changed

+135
-85
lines changed

test/_matmul.jl

Lines changed: 135 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -3,100 +3,145 @@
33
# `n_values`
44
# `k_values`
55
# `m_values`
6-
function test_complex(::Type{TE}, m_values, k_values, n_values, testset_name_suffix) where {TE}
6+
function test_complex(
7+
::Type{TE},
8+
m_values,
9+
k_values,
10+
n_values,
11+
testset_name_suffix
12+
) where {TE}
713
T = Complex{TE}
814
@time @testset "Matrix Multiply $T $(testset_name_suffix)" begin
915
for n n_values
1016
for k k_values
1117
for m m_values
12-
A = rand(T, m, k);
13-
B = rand(T, k, n);
14-
b = rand(T, k);
18+
A = rand(T, m, k)
19+
B = rand(T, k, n)
20+
b = rand(T, k)
1521

16-
Are = real.(A);
17-
Bre = real.(B);
18-
bre = real.(b);
22+
Are = real.(A)
23+
Bre = real.(B)
24+
bre = real.(b)
1925

2026
A′ = permutedims(A)'
2127
B′ = permutedims(B)'
22-
AB = A * B;
23-
A′B = A′*B;
24-
AB′ = A*B′;
25-
A′B′= A′*B′;
26-
Ab = A*b;
27-
A′b = A′*b;
28+
AB = A * B
29+
A′B = A′ * B
30+
AB′ = A * B′
31+
A′B′ = A′ * B′
32+
Ab = A * b
33+
A′b = A′ * b
2834

29-
AreB = Are*B;
30-
ABre = A*Bre;
31-
Areb = Are*b;
32-
Abre = A*bre;
35+
AreB = Are * B
36+
ABre = A * Bre
37+
Areb = Are * b
38+
Abre = A * bre
3339

34-
@info "" T n k m
35-
@test @time(Octavian.matmul(A, B)) AB
36-
@test @time(Octavian.matmul(A, Bre)) ABre
37-
@test @time(Octavian.matmul(Are, B)) AreB
38-
@test @time(Octavian.matmul(A′, B)) A′B
39-
@test @time(Octavian.matmul(A, B′)) AB′
40-
@test @time(Octavian.matmul(A′, B′)) A′B′
40+
@test (Octavian.matmul(A, B)) AB
41+
@test (Octavian.matmul(A, Bre)) ABre
42+
@test (Octavian.matmul(Are, B)) AreB
43+
@test (Octavian.matmul(A′, B)) A′B
44+
@test (Octavian.matmul(A, B′)) AB′
45+
@test (Octavian.matmul(A′, B′)) A′B′
4146

42-
@test @time(Octavian.matmul(A, b)) Ab
43-
@test transpose(@time(Octavian.matmul(transpose(b), transpose(A)))) Ab
44-
@test @time(Octavian.matmul(A, bre)) Abre
45-
@test @time(Octavian.matmul(Are, b)) Areb
46-
@test @time(Octavian.matmul(A′, b)) A′b
47-
@test transpose(@time(Octavian.matmul(transpose(b), transpose(A′)))) A′b
47+
@test (Octavian.matmul(A, b)) Ab
48+
@test transpose((Octavian.matmul(transpose(b), transpose(A)))) Ab
49+
@test (Octavian.matmul(A, bre)) Abre
50+
@test (Octavian.matmul(Are, b)) Areb
51+
@test (Octavian.matmul(A′, b)) A′b
52+
@test transpose((Octavian.matmul(transpose(b), transpose(A′)))) A′b
4853

49-
@test @time(Octavian.matmul_serial(A, B)) AB
50-
@test @time(Octavian.matmul_serial(A, Bre)) ABre
51-
@test @time(Octavian.matmul_serial(Are, B)) AreB
52-
@test @time(Octavian.matmul_serial(A′, B)) A′B
53-
@test @time(Octavian.matmul_serial(A, B′)) AB′
54-
@test @time(Octavian.matmul_serial(A′, B′)) A′B′
54+
@test (Octavian.matmul_serial(A, B)) AB
55+
@test (Octavian.matmul_serial(A, Bre)) ABre
56+
@test (Octavian.matmul_serial(Are, B)) AreB
57+
@test (Octavian.matmul_serial(A′, B)) A′B
58+
@test (Octavian.matmul_serial(A, B′)) AB′
59+
@test (Octavian.matmul_serial(A′, B′)) A′B′
5560

56-
@test @time(Octavian.matmul_serial(A, b)) Ab
57-
@test transpose(@time(Octavian.matmul_serial(transpose(b), transpose(A)))) Ab
58-
@test @time(Octavian.matmul_serial(A, bre)) Abre
59-
@test @time(Octavian.matmul_serial(Are, b)) Areb
60-
@test @time(Octavian.matmul_serial(A′, b)) A′b
61-
@test transpose(@time(Octavian.matmul_serial(transpose(b), transpose(A′)))) A′b
61+
@test (Octavian.matmul_serial(A, b)) Ab
62+
@test transpose((Octavian.matmul_serial(
63+
transpose(b),
64+
transpose(A)
65+
))) Ab
66+
@test (Octavian.matmul_serial(A, bre)) Abre
67+
@test (Octavian.matmul_serial(Are, b)) Areb
68+
@test (Octavian.matmul_serial(A′, b)) A′b
69+
@test transpose((Octavian.matmul_serial(
70+
transpose(b),
71+
transpose(A′)
72+
))) A′b
6273

6374
C = Matrix{T}(undef, n, m)'
64-
@test @time(Octavian.matmul!(C, A, B)) AB
75+
@test (Octavian.matmul!(C, A, B)) AB
6576

6677
C1 = rand(T, m, n)
6778
C2 = copy(C1)
6879
α, β = T(1 - 2im), T(3 + 4im)
69-
@test @time(Octavian.matmul!(C1, A, B, α, β)) Octavian.matmul!(C2, A, B, α, β)
80+
@test (Octavian.matmul!(C1, A, B, α, β))
81+
Octavian.matmul!(C2, A, B, α, β)
7082
end
7183
end
7284
end
7385
end
7486
end
7587

7688
function matmul_pack_ab!(C, A, B)
77-
M, N = size(C); K = size(B,1)
78-
zc, za, zb = Octavian.zstridedpointer.((C,A,B))
89+
M, N = size(C)
90+
K = size(B, 1)
91+
zc, za, zb = Octavian.zstridedpointer.((C, A, B))
7992
nspawn = min(Threads.nthreads(), Octavian.num_cores())
8093
GC.@preserve C A B begin
8194
if nspawn > 1 && sizeof(Int) >= 8
82-
threads, torelease = Octavian.PolyesterWeave.__request_threads((nspawn-1)%UInt32, Octavian.PolyesterWeave.worker_pointer(), nothing)
95+
threads, torelease = Octavian.PolyesterWeave.__request_threads(
96+
(nspawn - 1) % UInt32,
97+
Octavian.PolyesterWeave.worker_pointer(),
98+
nothing
99+
)
83100
@assert threads.i < Threads.nthreads()
84101
Octavian.matmul_pack_A_and_B!(
85-
zc, za, zb, Octavian.StaticInt{1}(), Octavian.StaticInt{0}(), M, K, N, threads,
86-
Octavian.W₁Default(), Octavian.W₂Default(), Octavian.R₁Default(), Octavian.R₂Default()
102+
zc,
103+
za,
104+
zb,
105+
Octavian.StaticInt{1}(),
106+
Octavian.StaticInt{0}(),
107+
M,
108+
K,
109+
N,
110+
threads,
111+
Octavian.W₁Default(),
112+
Octavian.W₂Default(),
113+
Octavian.R₁Default(),
114+
Octavian.R₂Default()
87115
)
88116
Octavian.PolyesterWeave.free_threads!(torelease)
89117
else
90118
Octavian.matmul_st_pack_A_and_B!(
91-
zc, za, zb, Octavian.StaticInt{1}(), Octavian.StaticInt{0}(), M, K, N,
92-
Octavian.W₁Default(), Octavian.W₂Default(), Octavian.R₁Default(), Octavian.R₂Default(), 0
119+
zc,
120+
za,
121+
zb,
122+
Octavian.StaticInt{1}(),
123+
Octavian.StaticInt{0}(),
124+
M,
125+
K,
126+
N,
127+
Octavian.W₁Default(),
128+
Octavian.W₂Default(),
129+
Octavian.R₁Default(),
130+
Octavian.R₂Default(),
131+
0
93132
)
94133
end
95134
end
96135
C
97136
end
98137

99-
function test_real(::Type{T}, m_values, k_values, n_values, testset_name_suffix) where {T}
138+
function test_real(
139+
::Type{T},
140+
m_values,
141+
k_values,
142+
n_values,
143+
testset_name_suffix
144+
) where {T}
100145
@time @testset "Matrix Multiply $T $(testset_name_suffix)" begin
101146
for n n_values
102147
for k k_values
@@ -106,34 +151,33 @@ function test_real(::Type{T}, m_values, k_values, n_values, testset_name_suffix)
106151
b = rand(T, k)
107152
A′ = permutedims(A)'
108153
B′ = permutedims(B)'
109-
AB = A * B;
110-
Ab = A * b;
111-
@info "" T n k m
112-
@test @time(Octavian.matmul(A, B)) AB
113-
@test @time(Octavian.matmul(A′, B)) AB
114-
@test @time(Octavian.matmul(A, B′)) AB
115-
@test @time(Octavian.matmul(A′, B′)) AB
116-
@test @time(Octavian.matmul_serial(A, B)) AB
117-
@test @time(Octavian.matmul_serial(A′, B)) AB
118-
@test @time(Octavian.matmul_serial(A, B′)) AB
119-
@test @time(Octavian.matmul_serial(A′, B′)) AB
120-
@test @time(Octavian.matmul(A, b)) Ab
121-
@test @time(Octavian.matmul(A′, b)) Ab
122-
@test @time(Octavian.matmul(b', A'))' Ab
123-
@test @time(Octavian.matmul(b', A′'))' Ab
124-
@test @time(Octavian.matmul_serial(A, b)) Ab
125-
@test @time(Octavian.matmul_serial(A′, b)) Ab
126-
@test @time(Octavian.matmul_serial(b', A'))' Ab
127-
@test @time(Octavian.matmul_serial(b', A′'))' Ab
154+
AB = A * B
155+
Ab = A * b
156+
@test (Octavian.matmul(A, B)) AB
157+
@test (Octavian.matmul(A′, B)) AB
158+
@test (Octavian.matmul(A, B′)) AB
159+
@test (Octavian.matmul(A′, B′)) AB
160+
@test (Octavian.matmul_serial(A, B)) AB
161+
@test (Octavian.matmul_serial(A′, B)) AB
162+
@test (Octavian.matmul_serial(A, B′)) AB
163+
@test (Octavian.matmul_serial(A′, B′)) AB
164+
@test (Octavian.matmul(A, b)) Ab
165+
@test (Octavian.matmul(A′, b)) Ab
166+
@test (Octavian.matmul(b', A'))' Ab
167+
@test (Octavian.matmul(b', A′'))' Ab
168+
@test (Octavian.matmul_serial(A, b)) Ab
169+
@test (Octavian.matmul_serial(A′, b)) Ab
170+
@test (Octavian.matmul_serial(b', A'))' Ab
171+
@test (Octavian.matmul_serial(b', A′'))' Ab
128172
end
129173
end
130174
end
131175
m = k = n = max(8Octavian.OCTAVIAN_NUM_TASKS[], 400)
132-
A = rand(T, m, k);
133-
B = rand(T, k, n);
134-
A′ = permutedims(A)';
135-
B′ = permutedims(B)';
136-
AB = A * B;
176+
A = rand(T, m, k)
177+
B = rand(T, k, n)
178+
A′ = permutedims(A)'
179+
B′ = permutedims(B)'
180+
AB = A * B
137181
@test matmul_pack_ab!(similar(AB), A, B) AB
138182
@test matmul_pack_ab!(similar(AB), A, B′) AB
139183
@test matmul_pack_ab!(similar(AB), A′, B) AB
@@ -142,13 +186,19 @@ function test_real(::Type{T}, m_values, k_values, n_values, testset_name_suffix)
142186
end
143187

144188
@time @testset "zero-sized-matrices" begin
145-
@test Octavian.matmul_serial(randn(0,0), randn(0,0)) == zeros(0, 0)
146-
@test Octavian.matmul_serial(randn(2,3), randn(3,0)) == zeros(2, 0)
147-
@test Octavian.matmul_serial(randn(2,0), randn(0,2)) == zeros(2, 2)
148-
@test Octavian.matmul_serial!(ones(2,2),randn(2,0), randn(0,2), 1.0, 2.0) == ones(2, 2) .* 2
149-
@test Octavian.matmul(randn(0,0), randn(0,0)) == zeros(0, 0)
150-
@test Octavian.matmul(randn(2,3), randn(3,0)) == zeros(2, 0)
151-
@test Octavian.matmul(randn(2,0), randn(0,2)) == zeros(2, 2)
152-
@test Octavian.matmul!(ones(2,2),randn(2,0), randn(0,2), 1.0, 2.0) == ones(2, 2) .* 2
189+
@test Octavian.matmul_serial(randn(0, 0), randn(0, 0)) == zeros(0, 0)
190+
@test Octavian.matmul_serial(randn(2, 3), randn(3, 0)) == zeros(2, 0)
191+
@test Octavian.matmul_serial(randn(2, 0), randn(0, 2)) == zeros(2, 2)
192+
@test Octavian.matmul_serial!(
193+
ones(2, 2),
194+
randn(2, 0),
195+
randn(0, 2),
196+
1.0,
197+
2.0
198+
) == ones(2, 2) .* 2
199+
@test Octavian.matmul(randn(0, 0), randn(0, 0)) == zeros(0, 0)
200+
@test Octavian.matmul(randn(2, 3), randn(3, 0)) == zeros(2, 0)
201+
@test Octavian.matmul(randn(2, 0), randn(0, 2)) == zeros(2, 2)
202+
@test Octavian.matmul!(ones(2, 2), randn(2, 0), randn(0, 2), 1.0, 2.0) ==
203+
ones(2, 2) .* 2
153204
end
154-

0 commit comments

Comments
 (0)