|
| 1 | +using OffsetArrays |
1 | 2 |
|
2 | 3 | function reg_term(omega, B = size(omega,2); alpha=0.01)
|
3 | 4 | reg = 0.0
|
@@ -188,6 +189,52 @@ function tk_base(v::Vector{T}, c_::Vector{T}, n::Int) where {T}
|
188 | 189 | end
|
189 | 190 | l00 + l01 + l10 + l11
|
190 | 191 | end
|
| 192 | + |
| 193 | + |
| 194 | +function noturbosum(x, kern) |
| 195 | + ks = zero(eltype(x)) |
| 196 | + @inbounds @fastmath for i=2:size(x,1)-1 |
| 197 | + for j in axes(kern,1), m in axes(kern,2) |
| 198 | + ks += x[i+j, i+m] * kern[j,m] |
| 199 | + end |
| 200 | + end |
| 201 | + ks |
| 202 | +end |
| 203 | +function outersum(x, kern) |
| 204 | + ks = zero(eltype(x)) |
| 205 | + @turbo for i=2:size(x,1)-1 |
| 206 | + for j in axes(kern,1), m in axes(kern,2) |
| 207 | + ks += x[i+j, i+m] * kern[j,m] |
| 208 | + end |
| 209 | + end |
| 210 | + ks |
| 211 | +end |
| 212 | +function insum(x, kern) |
| 213 | + ks = zero(eltype(x)) |
| 214 | + @turbo for i=2:size(x,1)-1 |
| 215 | + s1 = zero(eltype(x)) |
| 216 | + for j in axes(kern,1), m in axes(kern,2) |
| 217 | + s1 += x[i+j, i+m] * kern[j,m] |
| 218 | + end |
| 219 | + ks += s1 |
| 220 | + end |
| 221 | + ks |
| 222 | +end |
| 223 | +function in2sum(x, kern) |
| 224 | + ks = zero(eltype(x)) |
| 225 | + @turbo for i=2:size(x,1)-1 |
| 226 | + for j in axes(kern,1) |
| 227 | + s0 = zero(eltype(x)) |
| 228 | + for m in axes(kern,2) |
| 229 | + s0 += x[i+j, i+m] * kern[j,m] |
| 230 | + end |
| 231 | + ks += s0 |
| 232 | + end |
| 233 | + end |
| 234 | + ks |
| 235 | +end |
| 236 | + |
| 237 | + |
191 | 238 | @testset "Outer Reductions" begin
|
192 | 239 | for T ∈ [Float32,Float64,Int32,Int64]
|
193 | 240 | test_awmean(T)
|
|
201 | 248 | omega = rand(87,87);
|
202 | 249 | @test reg_term(omega) ≈ reg_term_turbo(omega)
|
203 | 250 |
|
| 251 | + x = rand(100,100); |
| 252 | + kern = OffsetArray(rand(3,3),-2,-2); |
| 253 | + s = noturbosum(x, kern) |
| 254 | + @test s ≈ outersum(x, kern) |
| 255 | + @test s ≈ insum(x, kern) |
| 256 | + @test s ≈ in2sum(x, kern) |
204 | 257 | end
|
205 | 258 |
|
0 commit comments