# ParallelAccelerator.jl vs Devectorize.jl vs other

**URL:** <https://discourse.julialang.org/t/parallelaccelerator-jl-vs-devectorize-jl-vs-other/4864>\
**Category:** General Usage\
**Tags:** question\
**Created:** [July 14, 2017, 6:29pm UTC](https://discourse.julialang.org/t/parallelaccelerator-jl-vs-devectorize-jl-vs-other/4864 "2017-07-14T18:29:45Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Juan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juan/32/7657_2.png) [@Juan](https://discourse.julialang.org/u/Juan)\
**Post date:** [July 14, 2017, 6:29pm UTC](https://discourse.julialang.org/t/parallelaccelerator-jl-vs-devectorize-jl-vs-other/4864/1 "2017-07-14T18:29:45Z")

</div>

What’s the difference between ParallelAccelerator.jl and Devectorize.jl?

I’ve seen there are some sparse threads speaking about this two packages and about how to do Julia faster…

But how do they compare in terms of methodology?  
And what about speed performance, memory, easy of use…?  
Any other prefered alternative?

I’ve seen some discussion about other languages such as Chapel.  
What’s expected from Julia or it’s packages in the long term?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [July 14, 2017, 6:40pm UTC](https://discourse.julialang.org/t/parallelaccelerator-jl-vs-devectorize-jl-vs-other/4864/2 "2017-07-14T18:40:29Z")

</div>

Devectorize is just a macro that transform certain syntax to loops. Parallelaccelerator is a full fledged compiler doing much more advanced transformations.

---

<div class="post-metadata">

**Author:** ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)\
**Post date:** [July 14, 2017, 6:43pm UTC](https://discourse.julialang.org/t/parallelaccelerator-jl-vs-devectorize-jl-vs-other/4864/3 "2017-07-14T18:43:45Z")

</div>

> [@Juan](#):
>
> I’ve seen some discussion about other languages such as Chapel.  
> What’s expected from Julia or it’s packages in the long term?

See [More Dots: Syntactic Loop Fusion in Julia](https://julialang.org/blog/2017/01/moredots)

---

<div class="post-metadata">

**Author:** ![Juan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juan/32/7657_2.png) [@Juan](https://discourse.julialang.org/u/Juan)\
**Post date:** [July 14, 2017, 7:20pm UTC](https://discourse.julialang.org/t/parallelaccelerator-jl-vs-devectorize-jl-vs-other/4864/4 "2017-07-14T19:20:45Z")

</div>

The problem I see is that Parallelaccelerator doesn’t work on Windows, at least no out-of-the-box

---

<div class="post-metadata">

**Author:** ![rdeits](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rdeits/32/286_2.png) [@rdeits](https://discourse.julialang.org/u/rdeits)\
**Post date:** [July 14, 2017, 9:01pm UTC](https://discourse.julialang.org/t/parallelaccelerator-jl-vs-devectorize-jl-vs-other/4864/5 "2017-07-14T21:01:15Z")

</div>

Fortunately, as mentioned in the link that `@stevengj` posted, Julia has gained the ability to devectorize and fuse loops without any external packages at all. As of Julia v0.6, you can just write: `a .* b .+ c .* d .+ a` and get exactly one loop over the data, just as you would with Devectorize on earlier version of Julia.

---

<div class="post-metadata">

**Author:** ![Juan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juan/32/7657_2.png) [@Juan](https://discourse.julialang.org/u/Juan)\
**Post date:** [July 14, 2017, 10:14pm UTC](https://discourse.julialang.org/t/parallelaccelerator-jl-vs-devectorize-jl-vs-other/4864/6 "2017-07-14T22:14:30Z")

</div>

Do you think ParallelAccelerator will ever be available for Windows too?  
Or now with Julia 0.6 we won’t notice much its benefits?

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [July 14, 2017, 10:19pm UTC](https://discourse.julialang.org/t/parallelaccelerator-jl-vs-devectorize-jl-vs-other/4864/7 "2017-07-14T22:19:09Z")

</div>

> [@Juan](#):
>
> Or now with Julia 0.6 we won’t notice much its benefits?

`.`-fusion still doesn’t parallelize.

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [July 14, 2017, 10:25pm UTC](https://discourse.julialang.org/t/parallelaccelerator-jl-vs-devectorize-jl-vs-other/4864/8 "2017-07-14T22:25:48Z")

</div>

> [@ChrisRackauckas](#):
>
> `.`-fusion still doesn’t parallelize.

Relevant ticket on GitHub:

> <https://github.com/JuliaLang/julia/issues/19777>
>
> It would be nice to be able to put \`@threads\` in front of a dot call, e.g. \`@thr…eads X .= f.(Y)\`, and have it call a multi-threaded version of \`broadcast\` (which would assume \`f\` is thread-safe).
