# Parallell TensorKit

**URL:** <https://discourse.julialang.org/t/parallell-tensorkit/97410>\
**Category:** Numerics\
**Created:** [April 13, 2023, 12:58am UTC](https://discourse.julialang.org/t/parallell-tensorkit/97410 "2023-04-13T00:58:13Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Nellatur](https://avatars.discourse-cdn.com/v4/letter/n/76d3ee/32.png) [@Nellatur](https://discourse.julialang.org/u/Nellatur)\
**Post date:** [April 13, 2023, 12:58am UTC](https://discourse.julialang.org/t/parallell-tensorkit/97410/1 "2023-04-13T00:58:13Z")

</div>

Based on [Please read: make it easier to help you - #2](https://discourse.julialang.org/t/please-read-make-it-easier-to-help-you/14757/2)

> Avoid extending the original question that has already been answered with many new questions. It is better to start a new thread.

Let me start a new thread than from [TensorKit efficiency](https://discourse.julialang.org/t/tensorkit-efficiency/59559)

For the following code

```julia

using TensorKit
using BenchmarkTools 

na = nb = nc = nd = 12
A = rand(na, nb)
B = rand(nb, nc, nd)
C = zeros(na, nc, nd)

function tensorkit_contraction(A,B,C)
    @tensor C[a,c,d] := A[a,b] * B[b,c,d]
end 

@btime tensorkit_contraction(A,B,C)

```

name as `1.jl`. I tried to run `julia 1.jl -t 1` and `julia 1.jl -t 2` (`julia 1.8.5`)  
I got  
` 3.900 μs (1 allocation: 13.62 KiB)` and ` 3.837 μs (1 allocation: 13.62 KiB)`  
Looks similar. Is there any simple way to parallel `tensorkit`?

---

<div class="post-metadata">

**Author:** ![carstenbauer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/carstenbauer/32/4981_2.png) [@carstenbauer](https://discourse.julialang.org/u/carstenbauer)\
**Post date:** [April 13, 2023, 3:48am UTC](https://discourse.julialang.org/t/parallell-tensorkit/97410/2 "2023-04-13T03:48:04Z")

</div>

Don’t know about TensorKit.jl but Tullio.jl typically has good parallel performance. Maybe you want to try it out.

---

<div class="post-metadata">

**Author:** ![jmair](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jmair/32/35117_2.png) [@jmair](https://discourse.julialang.org/u/jmair)\
**Post date:** [April 13, 2023, 8:26am UTC](https://discourse.julialang.org/t/parallell-tensorkit/97410/3 "2023-04-13T08:26:23Z")

</div>

I think your arguments here should be swapped around. It should be `julia -t 1 1.jl` instead. You can check by printing out `Threads.nthreads()`.

Also, since these are linear algebra operations, it will likely use BLAS threads for a lot of the parallelism, which are separate from Julia threads. This can be set with

```julia
using LinearAlgebra;
BLAS.set_num_threads(1)

```

for example.

It’s hard to know which type of parallelism a library will use without looking at the docs/source. But you can experiment to find out by setting Julia threads and BLAS threads separately.

---

<div class="post-metadata">

**Author:** ![Nellatur](https://avatars.discourse-cdn.com/v4/letter/n/76d3ee/32.png) [@Nellatur](https://discourse.julialang.org/u/Nellatur)\
**Post date:** [April 20, 2023, 6:36am UTC](https://discourse.julialang.org/t/parallell-tensorkit/97410/4 "2023-04-20T06:36:27Z")

</div>

Thanks. I tried

```julia
using TensorKit
using Tullio
using BenchmarkTools

na = nb = nc = nd = 12
A = rand(na, nb)
B = rand(nb, nc, nd)
C = zeros(na, nc, nd)

function tensorkit_contraction(A,B,C)
    @tullio C[a,c,d] := A[a,b] * B[b,c,d]
end

@btime tensorkit_contraction(A,B,C)

```

but did not get speed up by `julia -t 1 1.jl ` or `julia -t 2 1.jl `

---

<div class="post-metadata">

**Author:** ![carstenbauer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/carstenbauer/32/4981_2.png) [@carstenbauer](https://discourse.julialang.org/u/carstenbauer)\
**Post date:** [April 20, 2023, 6:41am UTC](https://discourse.julialang.org/t/parallell-tensorkit/97410/5 "2023-04-20T06:41:12Z")

</div>

Your problem size seems too small to gain anything from multithreading. Try for larger `na, nb, nc, nd`.

---

<div class="post-metadata">

**Author:** ![Nellatur](https://avatars.discourse-cdn.com/v4/letter/n/76d3ee/32.png) [@Nellatur](https://discourse.julialang.org/u/Nellatur)\
**Post date:** [April 20, 2023, 6:48am UTC](https://discourse.julialang.org/t/parallell-tensorkit/97410/6 "2023-04-20T06:48:27Z")

</div>

Thanks! `na = nb = nc = nd = 120`  
`julia -t1 1.jl` 171 ms  
`julia -t 2 1.jl` 85 ms
