-
-
Notifications
You must be signed in to change notification settings - Fork 34
/
Copy pathbenchmark.jl
103 lines (87 loc) · 1.81 KB
/
benchmark.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using ArrayFire, LinearAlgebra, Logging
function warmup()
a = rand(Float32, 10,10)
ad = AFArray(a)
ad * ad
a * a
fft(a)
fft(ad)
cholesky(a*a')
cholesky(ad*ad')
rand(AFArray{Float32}, 10, 10)
sort(vec(a))
sort(vec(ad))
end
function matmul(a::AFArray, b::AFArray)
for i = 1:10
r = a * b
sync(r)
end
end
function fast_fourier(a::AFArray)
for i = 1:10
r = fft(a)
sync(r)
end
end
function chol(a::AFArray)
for i = 1:10
r,s = cholesky(a)
sync(r)
end
end
function random()
for i = 1:10
r = rand(AFArray{Float32}, 5000, 5000)
sync(r)
end
end
function sorting(a::AFArray)
for i = 1:10
r = sort(a)
sync(r)
end
end
function benchmark()
warmup()
@info("Warmup done!")
GC.gc()
a = rand(Float32, 2000, 2000)
ad = AFArray(a)
#Matmul
@info("Matmul")
t1 = @elapsed a * a
t2 = @elapsed matmul(ad, ad)
println("Time (CPU): $t1")
println("Time (GPU): $(t2/10)")
GC.gc()
#FFT
@info("FFT")
t1 = @elapsed fft(a)
t2 = @elapsed fast_fourier(ad)
println("Time (CPU): $t1")
println("Time (GPU): $(t2/10)")
#Cholesky
b = a * a' + 2000 * Matrix{Float32}(I, 2000, 2000)
bd = AFArray(b)
@info("Cholesky")
t1 = @elapsed cholesky(b)
t2 = @elapsed chol(bd)
println("Time (CPU): $t1")
println("Time (GPU): $(t2/10)")
#Rand
@info("Rand")
t1 = @elapsed rand(Float32, 5000, 5000)
t2 = @elapsed random()
println("Time (CPU): $t1")
println("Time (GPU): $(t2/10)")
#Vecsort
c = rand(Float32, 10^6)
cd = AFArray(c)
@info("Vec sort")
t1 = @elapsed sort(c)
t2 = @elapsed sorting(cd)
println("Time (CPU): $t1")
println("Time (GPU): $(t2/10)")
end
benchmark()