191
191
for (pgpu, pcpu) in zip (params (b), params (b_cpu))
192
192
@test gs_cpu[pcpu] ≈ Array (gs_gpu[pgpu])
193
193
end
194
- end
194
+ end
195
+
196
+ @testset " Parallel" begin
197
+ @testset " zero sum" begin
198
+ input = randn (10 , 10 , 10 , 10 ) |> gpu
199
+ layer_gpu = Parallel (+ , zero, identity) |> gpu
200
+ @test layer_gpu (input) == input
201
+ @test layer_gpu (input) isa Flux. CUDA. CuArray
202
+ end
203
+
204
+ @testset " vararg input" begin
205
+ inputs = (randn (10 ), randn (5 ), randn (4 )) .| > gpu
206
+ layer = Parallel (+ , Dense (10 , 2 ), Dense (5 , 2 ), Dense (4 , 2 )) |> gpu
207
+ @test size (layer (inputs)) == (2 ,)
208
+ end
209
+
210
+ @testset " gradient" begin
211
+ input_cpu = randn (10 , 10 , 10 , 10 )
212
+ input_gpu = input_cpu |> gpu
213
+ layer_cpu = Parallel (+ , x -> zero (x), identity)
214
+ layer_gpu = layer_cpu |> gpu
215
+ gs_cpu = gradient (() -> sum (abs2 .(layer_cpu (input_cpu))), params (layer_cpu))
216
+ gs_gpu = gradient (() -> sum (abs2 .(layer_gpu (input_gpu))), params (layer_gpu))
217
+ for (pgpu, pcpu) in zip (params (layer_cpu), params (layer_gpu))
218
+ @test gs_cpu[pcpu] ≈ gs_gpu[pgpu]
219
+ end
220
+ end
221
+ end
0 commit comments