# Summing a vector is faster than summing a multi-dimensional array of the same length using CUDA

**URL:** <https://discourse.julialang.org/t/summing-a-vector-is-faster-than-summing-a-multi-dimensional-array-of-the-same-length-using-cuda/116711>\
**Category:** General Usage\
**Tags:** cuda\
**Created:** [July 7, 2024, 7:41am UTC](https://discourse.julialang.org/t/summing-a-vector-is-faster-than-summing-a-multi-dimensional-array-of-the-same-length-using-cuda/116711 "2024-07-07T07:41:36Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![lance\_xwq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lance_xwq/32/36647_2.png) [@lance\_xwq](https://discourse.julialang.org/u/lance_xwq)\
**Post date:** [July 7, 2024, 7:41am UTC](https://discourse.julialang.org/t/summing-a-vector-is-faster-than-summing-a-multi-dimensional-array-of-the-same-length-using-cuda/116711/1 "2024-07-07T07:41:36Z")

</div>

A MWE:

```julia
using BenchmarkTools
using CUDA

CUDA.allowscalar(false)
function foo(dims)
    x = rand(Float32, dims)
    print("\nCPU sum: ")
    @btime sum($x)

    print("CPU vec + sum: ")
    @btime sum(vec($x))

    y = CuArray(x)
    print("CUDA sum: ")
    @btime CUDA.@sync sum($y)

    print("CUDA vec + sum: ")
    @btime CUDA.@sync sum(vec($y))
end

```

Running `foo((50,50,1000))` on my computer yields

```julia
CPU sum: 348.099 μs (0 allocations: 0 bytes)
CPU vec + sum: 350.919 μs (2 allocations: 80 bytes)
CUDA sum: 283.126 μs (129 allocations: 4.27 KiB)
CUDA vec + sum: 99.471 μs (131 allocations: 3.97 KiB)

```

and running `foo(50*50*1000)` produces

```julia
CPU sum: 346.042 μs (0 allocations: 0 bytes)
CPU vec + sum: 341.418 μs (0 allocations: 0 bytes)
CUDA sum: 98.861 μs (129 allocations: 3.89 KiB)
CUDA vec + sum: 99.741 μs (129 allocations: 3.89 KiB)

```

CUDA.versioninfo():

> **Summary**
>
> CUDA runtime 12.5, artifact installation  
> CUDA driver 12.2  
> NVIDIA driver 535.183.1
> 
> CUDA libraries:
> 
> - CUBLAS: 12.5.3
> - CURAND: 10.3.6
> - CUFFT: 11.2.3
> - CUSOLVER: 11.6.3
> - CUSPARSE: 12.5.1
> - CUPTI: 23.0.0
> - NVML: 12.0.0+535.183.1
> 
> Julia packages:
> 
> - CUDA: 5.4.2
> - CUDA\_Driver\_jll: 0.9.1+1
> - CUDA\_Runtime\_jll: 0.14.1+0
> 
> Toolchain:
> 
> - Julia: 1.10.4
> - LLVM: 15.0.7
> 
> 1 device:  
> 0: NVIDIA GeForce GTX 1060 6GB (sm\_61, 3.809 GiB / 6.000 GiB available)

I wonder if these results are expected. If so, does calling `sum` have an advantage over `sum(vec())`?

Thank you!

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [July 7, 2024, 9:24am UTC](https://discourse.julialang.org/t/summing-a-vector-is-faster-than-summing-a-multi-dimensional-array-of-the-same-length-using-cuda/116711/2 "2024-07-07T09:24:40Z")

</div>

Could we narrow the question to CUDA? The difference for CPU seems negible.

---

<div class="post-metadata">

**Author:** ![lance\_xwq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lance_xwq/32/36647_2.png) [@lance\_xwq](https://discourse.julialang.org/u/lance_xwq)\
**Post date:** [July 7, 2024, 9:32am UTC](https://discourse.julialang.org/t/summing-a-vector-is-faster-than-summing-a-multi-dimensional-array-of-the-same-length-using-cuda/116711/3 "2024-07-07T09:32:40Z")

</div>

My question is, indeed, for CUDA. I’m sorry for the confusion. I just changed the title of my post. 🙂
