# Max.(v1,v2) on the GPU

**URL:** https://discourse.julialang.org/t/max-v1-v2-on-the-gpu/68386
**Category:** GPU
**Tags:** question
**Created:** [September 18, 2021, 11:31pm UTC](https://discourse.julialang.org/t/max-v1-v2-on-the-gpu/68386 "2021-09-18T23:31:43Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![gianmariomanca](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gianmariomanca/32/25597_2.png) [@gianmariomanca](https://discourse.julialang.org/u/gianmariomanca)
#### Post date: [September 18, 2021, 11:31pm UTC](https://discourse.julialang.org/t/max-v1-v2-on-the-gpu/68386/1 "2021-09-18T23:31:43Z")

</div>

What’s the best way to implement the element wise maximum of for 2 vectors of the same length on the GPU using CUDA.jl or any other package?

```julia
julia> v1 = [1, 2, 3]
3-element Vector{Int64}:
 1
 2
 3

julia> v2 = [4, 3, 2]
3-element Vector{Int64}:
 4
 3
 2

julia> max.(v1,v2)
3-element Vector{Int64}:
 4
 3
 3

```

You can assume float32.

---

<div class="post-metadata">

### Author: ![stillyslalom](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stillyslalom/32/45687_2.png) [@stillyslalom](https://discourse.julialang.org/u/stillyslalom)
#### Post date: [September 19, 2021, 1:45am UTC](https://discourse.julialang.org/t/max-v1-v2-on-the-gpu/68386/2 "2021-09-19T01:45:34Z")

</div>

It’s just as you’ve written it, except with device arrays:

```julia
julia> using CUDA

julia> v1 = cu(Float32[1, 2, 3])
3-element CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}:
 1.0
 2.0
 3.0

julia> v2 = cu(Float32[4, 3, 2])
3-element CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}:
 4.0
 3.0
 2.0

julia> max.(v1, v2)
3-element CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}:
 4.0
 3.0
 3.0

```

---

<div class="post-metadata">

### Author: ![gianmariomanca](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gianmariomanca/32/25597_2.png) [@gianmariomanca](https://discourse.julialang.org/u/gianmariomanca)
#### Post date: [September 19, 2021, 2:36am UTC](https://discourse.julialang.org/t/max-v1-v2-on-the-gpu/68386/3 "2021-09-19T02:36:43Z")

</div>

Ahh… it was a Pluto “bug”:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/e/e/eeb9a4d4a8e146de4b2ffc9eda962da22f544daf.png)  
I assumed the issue was the max operation but I guess it was Pluto trying to do some scalar indexing for IO?  
Works fine in the REPL.

---

<div class="post-metadata">

### Author: ![ToucheSir](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/touchesir/32/14411_2.png) [@ToucheSir](https://discourse.julialang.org/u/ToucheSir)
#### Post date: [September 19, 2021, 4:32am UTC](https://discourse.julialang.org/t/max-v1-v2-on-the-gpu/68386/4 "2021-09-19T04:32:19Z")

</div>

Might be an instance of [https://github.com/JuliaGPU/CUDA.jl/issues/875](https://github.com/JuliaGPU/CUDA.jl/issues/875)

---

<div class="post-metadata">

### Author: ![maleadt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/maleadt/32/10097_2.png) [@maleadt](https://discourse.julialang.org/u/maleadt)
#### Post date: [September 20, 2021, 8:11am UTC](https://discourse.julialang.org/t/max-v1-v2-on-the-gpu/68386/5 "2021-09-20T08:11:29Z")

</div>

That’s probably Pluto.jl replacing the output stack, so GPUArrays.jl’s show methods (which first copy to the CPU as not to trigger scalar iteration) are not used.

---

<div class="post-metadata">

### Author: ![gianmariomanca](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gianmariomanca/32/25597_2.png) [@gianmariomanca](https://discourse.julialang.org/u/gianmariomanca)
#### Post date: [September 30, 2021, 3:19am UTC](https://discourse.julialang.org/t/max-v1-v2-on-the-gpu/68386/6 "2021-09-30T03:19:14Z")

</div>

@fonsp FYI
