# Avoid array duplication

**URL:** <https://discourse.julialang.org/t/avoid-array-duplication/113879>\
**Category:** General Usage\
**Created:** [May 6, 2024, 3:13am UTC](https://discourse.julialang.org/t/avoid-array-duplication/113879 "2024-05-06T03:13:53Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [May 6, 2024, 3:13am UTC](https://discourse.julialang.org/t/avoid-array-duplication/113879/1 "2024-05-06T03:13:53Z")

</div>

I have a data structure in Julia (CSR matrix, essentially).  
The same data structure is used in a C++ library that I use from Julia.

The question is “how do I avoid the penalty for copying data”?

Pass a Julia array to C, that seems the natural thing to do, but: Is that (i) portable, and (ii) robust (not too low-level)?

---

<div class="post-metadata">

**Author:** ![SteffenPL](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/steffenpl/32/206270_2.png) [@SteffenPL](https://discourse.julialang.org/u/SteffenPL)\
**Post date:** [May 6, 2024, 3:30am UTC](https://discourse.julialang.org/t/avoid-array-duplication/113879/2 "2024-05-06T03:30:20Z")

</div>

Have you searched in [GitHub - JuliaPackaging/Yggdrasil: Collection of builder repositories for BinaryBuilder.jl](https://github.com/JuliaPackaging/Yggdrasil) if there is maybe a library which is compatible on a C++ level and which is already wrapped for Julia with proper functions for converting? (What is the target C++ library who’s format you want to satisfy?)

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [May 6, 2024, 3:55am UTC](https://discourse.julialang.org/t/avoid-array-duplication/113879/3 "2024-05-06T03:55:04Z")

</div>

Actually, the library is nearly plain C. And it would be sufficient to pass a plain integer array. ([GitHub - PetrKryslUCSD/ECLGraphColor.jl](https://github.com/PetrKryslUCSD/ECLGraphColor.jl))

---

<div class="post-metadata">

**Author:** ![SteffenPL](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/steffenpl/32/206270_2.png) [@SteffenPL](https://discourse.julialang.org/u/SteffenPL)\
**Post date:** [May 6, 2024, 4:02am UTC](https://discourse.julialang.org/t/avoid-array-duplication/113879/4 "2024-05-06T04:02:58Z")

</div>

(Funny, I’m also implementing [just greedy] Graph coloring on GPUs today.)

To the question. First of all, you are more experienced than me. Anyway, I found this here: [SparseArrays.jl/src/solvers/wrappers.jl at 3b303335db89ecaad55fde31a88c4eb1dab84e4c · JuliaSparse/SparseArrays.jl · GitHub](https://github.com/JuliaSparse/SparseArrays.jl/blob/3b303335db89ecaad55fde31a88c4eb1dab84e4c/src/solvers/wrappers.jl#L409) where a core Julia package does the same. Defining a Julia struct and then passing that as a pointer. It seems to me there is no way around. If nobody did the low-level work you seem to have little alternatives.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [May 6, 2024, 4:16am UTC](https://discourse.julialang.org/t/avoid-array-duplication/113879/5 "2024-05-06T04:16:47Z")

</div>

That is a good point: Something like this might be done with SuiteSparse, for instance. Actually, I even found it in the manual now ([Calling C and Fortran Code · The Julia Language](https://docs.julialang.org/en/v1/manual/calling-c-and-fortran-code/#C)). Must have been blind before … 🙄

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [May 6, 2024, 4:17am UTC](https://discourse.julialang.org/t/avoid-array-duplication/113879/6 "2024-05-06T04:17:36Z")

</div>

> [@SteffenPL](#):
>
> (Funny, I’m also implementing [just greedy] Graph coloring on GPUs today.)

That is a curious coincidence! 🙂
