# Controlling @threads (or similar) parallelism level

**URL:** <https://discourse.julialang.org/t/controlling-threads-or-similar-parallelism-level/126754>\
**Category:** General Usage\
**Tags:** threads\
**Created:** [March 10, 2025, 12:18pm UTC](https://discourse.julialang.org/t/controlling-threads-or-similar-parallelism-level/126754 "2025-03-10T12:18:54Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![evanfields](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/evanfields/32/1744_2.png) [@evanfields](https://discourse.julialang.org/u/evanfields)\
**Post date:** [March 10, 2025, 12:18pm UTC](https://discourse.julialang.org/t/controlling-threads-or-similar-parallelism-level/126754/1 "2025-03-10T12:18:54Z")

</div>

I have a function which is, abstracting,

```julia
Threads.@threads for i in 1:length(chunk)
    memory_intensive_computation(chunk[i])
end

```

I don’t know a priori _how_ memory intensive the computation will be, though I can assume it’s similar for items within the chunk. Right now, I have to allocate resources with a high enough memory to Julia threads ratio that this rarely runs out of memory, but this strategy is often wasteful. It’d be nice to something more like

```julia
memory_per_item = estimate_memory(chunk[1])
n_threads = floor(Int, system_memory / (memory_per_item * safe_inflation_factor))
Threads.@threads n_threads for i in 1:length(chunk)
    memory_intensive_computation(chunk[i])
end

```

i.e. dynamically choose the right parallelism level. What’s the best way to achieve this kind of pattern?

---

<div class="post-metadata">

**Author:** ![adienes](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/adienes/32/37459_2.png) [@adienes](https://discourse.julialang.org/u/adienes)\
**Post date:** [March 10, 2025, 12:26pm UTC](https://discourse.julialang.org/t/controlling-threads-or-similar-parallelism-level/126754/2 "2025-03-10T12:26:28Z")

</div>

(Disregard)

---

<div class="post-metadata">

**Author:** ![Satvik](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satvik/32/20486_2.png) [@Satvik](https://discourse.julialang.org/u/Satvik)\
**Post date:** [March 10, 2025, 12:36pm UTC](https://discourse.julialang.org/t/controlling-threads-or-similar-parallelism-level/126754/3 "2025-03-10T12:36:04Z")

</div>

Isn’t that just a problem when using `Threads.threadid()`? Which the code doesn’t use.

---

<div class="post-metadata">

**Author:** ![Mason](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mason/32/2423_2.png) [@Mason](https://discourse.julialang.org/u/Mason)\
**Post date:** [March 10, 2025, 12:43pm UTC](https://discourse.julialang.org/t/controlling-threads-or-similar-parallelism-level/126754/4 "2025-03-10T12:43:43Z")

</div>

> [@evanfields](#):
>
> It’d be nice to something more like
> 
> ```julia
> memory_per_item = estimate_memory(chunk[1])
> n_threads = floor(Int, system_memory / (memory_per_item * safe_inflation_factor))
> Threads.@threads n_threads for i in 1:length(chunk)
> memory_intensive_computation(chunk[i])
> end
> 
> ```
> 
> i.e. dynamically choose the right parallelism level. What’s the best way to achieve this kind of pattern?

You can do this with OhMyThreads.jl

You’d just write

```julia
using OhMyThreads
memory_per_item = estimate_memory(chunk[1])

@tasks for i in eachindex(chunk)
    @set ntasks = floor(Int, system_memory / (memory_per_item * safe_inflation_factor))
    memory_intensive_computation(chunk[i])
end

```

or

```julia
using OhMyThreads
memory_per_item = estimate_memory(chunk[1])

ntasks = floor(Int, system_memory / (memory_per_item * safe_inflation_factor))

tforeach(eachindex(chunk); ntasks) do i
    memory_intensive_computation(chunk[i])
end

```

---

<div class="post-metadata">

**Author:** ![adienes](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/adienes/32/37459_2.png) [@adienes](https://discourse.julialang.org/u/adienes)\
**Post date:** [March 10, 2025, 12:45pm UTC](https://discourse.julialang.org/t/controlling-threads-or-similar-parallelism-level/126754/5 "2025-03-10T12:45:12Z")

</div>

Indeed. My mistake for attempting a pre-coffee comment 😵
