-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Closed
Description
Hi, I've posted this to the Julia issues but figured I would link here as well
JuliaLang/julia#14857 (comment)
My machine has 56 cores, and the default for OPENBLAS_NUM_THREADS on my machine seems to be 8- I don't remember if I had any control in that, as I don't believe I built OpenBLAS from source
Running with half the julia threads works for me:
$ OPENBLAS_NUM_THREADS=8 JULIA_NUM_THREADS=28 julia13 --start=no
julia> versioninfo()
Julia Version 1.3.0-alpha.0
Commit 6c11e7c2c4 (2019-07-23 01:46 UTC)
Platform Info:
OS: Linux (x86_64-pc-linux-gnu)
CPU: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-6.0.1 (ORCJIT, broadwell)
Environment:
JULIA_NUM_THREADS = 28
julia> ccall((:openblas_get_num_threads64_, Base.libblas_name), Cint, ()), Threads.nthreads()
(8, 28)
julia> include("./blas_thread_test.jl")
190.196333 seconds (15.18 M allocations: 384.406 GiB, 9.51% gc time)
But other settings segfault with the same error `BLAS : Program is Terminated. Because you tried to allocate too many memory regions.
$ OPENBLAS_NUM_THREADS=8 JULIA_NUM_THREADS=56 julia13 --start=no
julia> ccall((:openblas_get_num_threads64_, Base.libblas_name), Cint, ()), Threads.nthreads()
(8, 56)
julia> include("./blas_thread_test.jl")
BLAS : Program is Terminated. Because you tried to allocate too many memory regions.
BLAS : Program is Terminated. Because you tried to allocate too many memory regions.
BLAS : Program is Terminated. Because you tried to allocate too many memory regions.
BLAS : Program is Terminated. Because you tried to allocate too many memory regions.
....
signal (11): Segmentation fault
in expression starting at /home/scott/repos/blas_thread_test.jl:23
....
(let me know if you want the full long stack trace)
$ OPENBLAS_NUM_THREADS=1 JULIA_NUM_THREADS=56 julia13 --start=no
julia> ccall((:openblas_get_num_threads64_, Base.libblas_name), Cint, ()), Threads.nthreads()
(1, 56)
julia> include("./blas_thread_test.jl")
BLAS : Program is Terminated. Because you tried to allocate too many memory regions.
BLAS : Program is Terminated. Because you tried to allocate too many memory regions.
BLAS : Program is Terminated. Because you tried to allocate too many memory regions.
signal (11): Segmentation fault
BLAS : Program is Terminated. Because you tried to allocate too many memory regions.
in expression starting at /home/sn expression starting at /home/scott/repos/blas_thread_test.jl:23
Here's the test program I'm running:
$ cat blas_thread_test.jl
using LinearAlgebra
function irls(A, b; iters=100)
M, N = size(A)
x = zeros(eltype(b), N)
ep = sqrt(eps(eltype(A)))
p = 1
W = diagm(0 => (abs.(b-A*x) .+ ep).^(p-2))
for ii in 1:iters
x .= (A' * W * A) \ (A' * W * b)
W .= diagm(0 => (abs.(b-A*x) .+ ep).^(p-2))
end
return x
end
M, N = 500, 30
A = randn(Float32, M, N);
bstack = rand(Float32, 60, 60, M);
xs = zeros(Float32, 60, 60, N);
@time Threads.@threads for j=1:size(bstack, 2)
for i = 1:size(bstack, 1)
xs[i, j, :] .= irls(A, bstack[i, j, :], iters=100)
end
end
chriscoey
Metadata
Metadata
Assignees
Labels
No labels