# When can one expect assignment to an array to run in parallel?

**URL:** https://discourse.julialang.org/t/when-can-one-expect-assignment-to-an-array-to-run-in-parallel/95971
**Category:** General Usage
**Created:** [March 12, 2023, 6:35pm UTC](https://discourse.julialang.org/t/when-can-one-expect-assignment-to-an-array-to-run-in-parallel/95971 "2023-03-12T18:35:11Z")
**Posts on this page:** 7
**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: [March 12, 2023, 6:35pm UTC](https://discourse.julialang.org/t/when-can-one-expect-assignment-to-an-array-to-run-in-parallel/95971/1 "2023-03-12T18:35:12Z")

</div>

Consider

```julia
N = 8_000_000_000
a = zeros(Int64, N)
a .= 1

```

For some reason I expected the broadcast assignment to run in parallel on multiple threads. According to my experiments, that is not happening.

Does anyone have an insight?

---

<div class="post-metadata">

### Author: ![LaurentPlagne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/laurentplagne/32/10103_2.png) [@LaurentPlagne](https://discourse.julialang.org/u/LaurentPlagne)
#### Post date: [March 12, 2023, 6:44pm UTC](https://discourse.julialang.org/t/when-can-one-expect-assignment-to-an-array-to-run-in-parallel/95971/2 "2023-03-12T18:44:47Z")

</div>

Afaik, there is no implicit parallelism in Julia (except in blas). I think it’s a good thing because your assignment could be called inside a multi threaded program. Nested MT is a difficult task to setup in the general case.

---

<div class="post-metadata">

### Author: ![LaurentPlagne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/laurentplagne/32/10103_2.png) [@LaurentPlagne](https://discourse.julialang.org/u/LaurentPlagne)
#### Post date: [March 12, 2023, 6:45pm UTC](https://discourse.julialang.org/t/when-can-one-expect-assignment-to-an-array-to-run-in-parallel/95971/3 "2023-03-12T18:45:58Z")

</div>

In addition, you can only expect a moderate speed up on such a massively memory bound task.

---

<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: [March 12, 2023, 6:46pm UTC](https://discourse.julialang.org/t/when-can-one-expect-assignment-to-an-array-to-run-in-parallel/95971/4 "2023-03-12T18:46:22Z")

</div>

That is true. But that is precisely what is happening with BLAS: it runs multithreaded, no matter what.  
And I thought this operation would end up in the BLAS…

---

<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: [March 12, 2023, 6:48pm UTC](https://discourse.julialang.org/t/when-can-one-expect-assignment-to-an-array-to-run-in-parallel/95971/5 "2023-03-12T18:48:52Z")

</div>

True, but I did get a speed up over 2.3 on four threads. Not bad…

---

<div class="post-metadata">

### Author: ![LaurentPlagne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/laurentplagne/32/10103_2.png) [@LaurentPlagne](https://discourse.julialang.org/u/LaurentPlagne)
#### Post date: [March 12, 2023, 6:49pm UTC](https://discourse.julialang.org/t/when-can-one-expect-assignment-to-an-array-to-run-in-parallel/95971/6 "2023-03-12T18:49:03Z")

</div>

It make sense. I do not think that this assignment is turned into a blas1 copy (no perf improvement is expected for such trivial task). I guess that recent version of loopvectorization.jl can parallelize broadcasted expressions now.

---

<div class="post-metadata">

### Author: ![LaurentPlagne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/laurentplagne/32/10103_2.png) [@LaurentPlagne](https://discourse.julialang.org/u/LaurentPlagne)
#### Post date: [March 12, 2023, 6:50pm UTC](https://discourse.julialang.org/t/when-can-one-expect-assignment-to-an-array-to-run-in-parallel/95971/7 "2023-03-12T18:50:08Z")

</div>

Yes it should exactly match you max hardware bandwidth.
