# Parallell multiplication matrix and inverse iteratively julia9

**URL:** <https://discourse.julialang.org/t/parallell-multiplication-matrix-and-inverse-iteratively-julia9/61834>\
**Category:** New to Julia\
**Created:** [May 26, 2021, 3:23am UTC](https://discourse.julialang.org/t/parallell-multiplication-matrix-and-inverse-iteratively-julia9/61834 "2021-05-26T03:23:07Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Beh123](https://avatars.discourse-cdn.com/v4/letter/b/13edae/32.png) [@Beh123](https://discourse.julialang.org/u/Beh123)\
**Post date:** [May 26, 2021, 3:23am UTC](https://discourse.julialang.org/t/parallell-multiplication-matrix-and-inverse-iteratively-julia9/61834/1 "2021-05-26T03:23:08Z")

</div>

I’m new julia programmer. I want to write a program that can calculate multiple and inverse iteratively. But I can’t return result. It’s my code.

```julia
addprocs(4);
@everywhere using Distributed , 
   DistributedArrays
C=dzeros(1000000);
@time @distributed for i in 1:100 
A=rand(10000,200); 
B=rand(10000,1);
P=localpart(C);
P[1+(i-1)%Int(100/nworkers())]= 
    Vec((A×A')\B);
end

```

When I wanna see `c` as result. `C` is `0.  
How do I fix my code?

---

<div class="post-metadata">

**Author:** ![ettersi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ettersi/32/6829_2.png) [@ettersi](https://discourse.julialang.org/u/ettersi)\
**Post date:** [May 26, 2021, 4:10am UTC](https://discourse.julialang.org/t/parallell-multiplication-matrix-and-inverse-iteratively-julia9/61834/2 "2021-05-26T04:10:23Z")

</div>

> [@Beh123](#):
>
> I want to write a program that can calculate multiple and inverse iteratively.

> [@Beh123](#):
>
> ```julia
> P[1+(i-1)%Int(100/nworkers())]= 
> Vec((A×A')\B);
> 
> ```

Can you describe these two statements in a bit more detail?

Maybe you could also provide a serial code which does what you want, and then we can help you parallelise it.

---

<div class="post-metadata">

**Author:** ![Beh123](https://avatars.discourse-cdn.com/v4/letter/b/13edae/32.png) [@Beh123](https://discourse.julialang.org/u/Beh123)\
**Post date:** [May 26, 2021, 4:37am UTC](https://discourse.julialang.org/t/parallell-multiplication-matrix-and-inverse-iteratively-julia9/61834/3 "2021-05-26T04:37:44Z")

</div>

I wanna calculate inv(A)×B that both of them matrices. This action must do several times on different data. I wanna use 4 process for doing it. When I use one process, everything is OK. I wanna speed up with multi processes. Result is zero. It is my problem.

---

<div class="post-metadata">

**Author:** ![Oscar\_Smith](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oscar_smith/32/25343_2.png) [@Oscar\_Smith](https://discourse.julialang.org/u/Oscar_Smith)\
**Post date:** [May 26, 2021, 4:39am UTC](https://discourse.julialang.org/t/parallell-multiplication-matrix-and-inverse-iteratively-julia9/61834/4 "2021-05-26T04:39:27Z")

</div>

First of all, you should be using `B\A` which will be faster and more accurate.

---

<div class="post-metadata">

**Author:** ![Oscar\_Smith](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oscar_smith/32/25343_2.png) [@Oscar\_Smith](https://discourse.julialang.org/u/Oscar_Smith)\
**Post date:** [May 26, 2021, 4:41am UTC](https://discourse.julialang.org/t/parallell-multiplication-matrix-and-inverse-iteratively-julia9/61834/5 "2021-05-26T04:41:21Z")

</div>

Also, BLAS is muti-threaded already, so you probably won’t get much of a speedup.

---

<div class="post-metadata">

**Author:** ![Beh123](https://avatars.discourse-cdn.com/v4/letter/b/13edae/32.png) [@Beh123](https://discourse.julialang.org/u/Beh123)\
**Post date:** [May 26, 2021, 4:42am UTC](https://discourse.julialang.org/t/parallell-multiplication-matrix-and-inverse-iteratively-julia9/61834/6 "2021-05-26T04:42:17Z")

</div>

everywhere using Distributed  
C=;  
@time @distributed for i in 1:100  
V= (A×A’)\B;  
append!(C,V);  
end

This code is doing correctly. It is done on one process. I wanna do this action for 4 process.

---

<div class="post-metadata">

**Author:** ![Beh123](https://avatars.discourse-cdn.com/v4/letter/b/13edae/32.png) [@Beh123](https://discourse.julialang.org/u/Beh123)\
**Post date:** [May 26, 2021, 4:43am UTC](https://discourse.julialang.org/t/parallell-multiplication-matrix-and-inverse-iteratively-julia9/61834/7 "2021-05-26T04:43:03Z")

</div>

Yes I use it.

---

<div class="post-metadata">

**Author:** ![ettersi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ettersi/32/6829_2.png) [@ettersi](https://discourse.julialang.org/u/ettersi)\
**Post date:** [May 26, 2021, 4:45am UTC](https://discourse.julialang.org/t/parallell-multiplication-matrix-and-inverse-iteratively-julia9/61834/8 "2021-05-26T04:45:48Z")

</div>

> [@Beh123](#):
>
> I wanna calculate inv(A)×B that both of them matrices.

Parallelising linear system solves is highly nontrivial. I strongly recommend you do this using a software package rather than writing your own code.

---

<div class="post-metadata">

**Author:** ![skleinbo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/skleinbo/32/36080_2.png) [@skleinbo](https://discourse.julialang.org/u/skleinbo)\
**Post date:** [May 26, 2021, 10:02am UTC](https://discourse.julialang.org/t/parallell-multiplication-matrix-and-inverse-iteratively-julia9/61834/10 "2021-05-26T10:02:31Z")

</div>

The expression will error. `@distributed` gives back a `Task` object, which will collect exceptions from the worker processes. Check this for the error.

One reason why your expression won’t work, is that you try to assign a vector `A*A'\B` to a float `P[1+(i-1)...]`. The latter is a single entry of the array `P`. Make sure to assign the former to a chunk of `P` of proper length.

Also, it’s `vec`, not `Vec`. But that shouldn’t be needed anyway.

By the way, which Julia version are you on? I tried the code on 1.5.3 and the `\times` symbol for multiplication is no longer valid. Same on 1.6.

---

<div class="post-metadata">

**Author:** ![Seif\_Shebl](https://avatars.discourse-cdn.com/v4/letter/s/eada6e/32.png) [@Seif\_Shebl](https://discourse.julialang.org/u/Seif_Shebl)\
**Post date:** [May 26, 2021, 12:58pm UTC](https://discourse.julialang.org/t/parallell-multiplication-matrix-and-inverse-iteratively-julia9/61834/11 "2021-05-26T12:58:43Z")

</div>

You can get 10X speedup using your GPU.

```julia
using CUDA, BenchmarkTools 

A = rand(10000,200)
B = rand(10000,1)

gpuA = cu(A)
gpuB = cu(B)

@btime ($A*$A')\$B 
  5.324 s (8 allocations: 1.49 GiB)                                                

@btime ($gpuA*$gpuA')\$gpuB 
  555.748 ms (76 allocations: 2.80 KiB) 

```

---

<div class="post-metadata">

**Author:** ![Beh123](https://avatars.discourse-cdn.com/v4/letter/b/13edae/32.png) [@Beh123](https://discourse.julialang.org/u/Beh123)\
**Post date:** [June 3, 2021, 6:33pm UTC](https://discourse.julialang.org/t/parallell-multiplication-matrix-and-inverse-iteratively-julia9/61834/12 "2021-06-03T18:33:50Z")

</div>

> [@Seif\_Shebl](#):
>
> `CUDA`

Thanks.
