JuliaSIMD / JuliaSIMD/Polyester.jl

Poor performance using one(T) inside Polyester.@batch loop

Open
#116 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Julia
Stars
285
Forks
20
PR merge metrics
No merged PRs in 30d

Description

I am running Julia 1.9 with two threads. If I include `one(T)` inside a `Polyester.@batch` loop, where `T` is a type known to the function, I obtain slow performance with a lot of allocations. Consider the following example

```
using Polyester
using BenchmarkTools

function test_no_poly!(y::Vector{T}, x::Vector{T}) where{T}
for i in 1:length(x)
y[i] = exp(x[i] + one(T))
end
end

function test_poly_one!(y::Vector{T}, x::Vector{T}) where{T}
Polyester.@batch for i in 1:length(x)
y[i] = exp(x[i] + one(T))
end
end

function test_poly_1!(y::Vector{T}, x::Vector{T}) where{T}
Polyester.@batch for i in 1:length(x)
y[i] = exp(x[i] + 1.0)
end
end

x = rand(1_000_000)
y = similar(x)

@btime test_no_poly!($y, $x)
@btime test_poly_one!($y, $x)
@btime test_poly_1!($y, $x)
```

This gives me

```
4.411 ms (0 allocations: 0 bytes)
84.761 ms (2000001 allocations: 30.52 MiB)
2.413 ms (0 allocations: 0 bytes)
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.