# Cross product with CUDA.jl

**URL:** <https://discourse.julialang.org/t/cross-product-with-cuda-jl/62734>\
**Category:** GPU\
**Created:** [June 11, 2021, 12:39pm UTC](https://discourse.julialang.org/t/cross-product-with-cuda-jl/62734 "2021-06-11T12:39:16Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![lodygaw](https://avatars.discourse-cdn.com/v4/letter/l/9dc877/32.png) [@lodygaw](https://discourse.julialang.org/u/lodygaw)\
**Post date:** [June 11, 2021, 12:39pm UTC](https://discourse.julialang.org/t/cross-product-with-cuda-jl/62734/1 "2021-06-11T12:39:16Z")

</div>

Hello,  
I am looking for the way to compute cross product on a GPU. Basically something similar to this:

function cross(w::CuArray{Float32,1}, u::CuArray{Float32,1}, v::CuArray{Float32,1})  
w[1] = u[2] \* v[3] - u[3] \* v[2]  
w[2] = u[3] \* v[1] - u[1] \* v[3]  
w[3] = u[1] \* v[2] - u[2] \* v[1]  
end

Is it possible to be done with CuArrays only? Or I would need to write a kernel?

---

<div class="post-metadata">

**Author:** ![mcabbott](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mcabbott/32/6603_2.png) [@mcabbott](https://discourse.julialang.org/u/mcabbott)\
**Post date:** [June 11, 2021, 1:37pm UTC](https://discourse.julialang.org/t/cross-product-with-cuda-jl/62734/2 "2021-06-11T13:37:13Z")

</div>

You could do something like this, although whether working with length 3 CuArrays is ever a good idea I’m not sure.

```julia
using Permutations, TensorCore, LinearAlgebra
const epsilon = Float64[allunique([i,j,k]) && -sign(Permutation([i,j,k])) for i in 1:3, j in 1:3, k in 1:3]
mycross(u,v) = u ⊡ epsilon ⊡ v

u, v = rand(3), rand(3)
cross(u,v) ≈ mycross(u,v)

```

---

<div class="post-metadata">

**Author:** ![maxfreu](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/maxfreu/32/17468_2.png) [@maxfreu](https://discourse.julialang.org/u/maxfreu)\
**Post date:** [June 11, 2021, 4:31pm UTC](https://discourse.julialang.org/t/cross-product-with-cuda-jl/62734/3 "2021-06-11T16:31:53Z")

</div>

If you need many cross products I‘d make two CuVectors containing many StaticArrays and then broadcast the cross product over them. Didn‘t think too much about it, but should work.
