JuliaLinearAlgebra / Octavian.jl

Multi-threaded BLAS-like library that provides pure Julia matrix multiplication
https://julialinearalgebra.github.io/Octavian.jl/stable/
Other
226 stars 18 forks source link

Precompile failure in Julia1.8-rc4 #154

Closed Song921012 closed 2 years ago

Song921012 commented 2 years ago

A problem happened in Julia1.8-rc4. It works in Julia1.7.2

julia> using Octavian
[ Info: Precompiling Octavian [6fd5a793-0b7e-452c-907f-f8bfe9c57db4]
ERROR: LoadError: MethodError: no method matching Float64(::Static.StaticFloat64{18298.957820664313})
Closest candidates are:
  (::Type{T})(::Real, ::RoundingMode) where T<:AbstractFloat at rounding.jl:200
  (::Type{T})(::T) where T<:Number at boot.jl:772
  (::Type{T})(::AbstractChar) where T<:Union{AbstractChar, Number} at char.jl:50
  ...
Stacktrace:
  [1] _call_loopmul!
    @ F:\Code\Julia\Julia-1.6.2\jpkgs\.julia\packages\Octavian\tN2Zr\src\funcptrs.jl:18 [inlined]
  [2] call_loopmul!(C::LayoutPointers.StridedPointer{Float64, 2, 1, 0, (1, 2), Tuple{Static.StaticInt{8}, Int64}, Tuple{Static.StaticInt{0}, Static.StaticInt{0}}}, A::LayoutPointers.StridedPointer{Float64, 2, 2, 0, (2, 1), Tuple{Int64, Static.StaticInt{8}}, Tuple{Static.StaticInt{0}, Static.StaticInt{0}}}, B::LayoutPointers.StridedPointer{Float64, 2, 1, 0, (1, 2), Tuple{Static.StaticInt{8}, Int64}, Tuple{Static.StaticInt{0}, Static.StaticInt{0}}}, α::Static.StaticInt{1}, β::Static.StaticInt{0}, M::Int64, K::Int64, N::Int64, #unused#::Val{true})
    @ Octavian F:\Code\Julia\Julia-1.6.2\jpkgs\.julia\packages\Octavian\tN2Zr\src\funcptrs.jl:26
  [3] matmulsplitn!(C::LayoutPointers.StridedPointer{Float64, 2, 1, 0, (1, 2), Tuple{Static.StaticInt{8}, Int64}, Tuple{Static.StaticInt{0}, Static.StaticInt{0}}}, A::LayoutPointers.StridedPointer{Float64, 2, 2, 0, (2, 1), Tuple{Int64, Static.StaticInt{8}}, Tuple{Static.StaticInt{0}, Static.StaticInt{0}}}, B::LayoutPointers.StridedPointer{Float64, 2, 1, 0, (1, 2), Tuple{Static.StaticInt{8}, Int64}, Tuple{Static.StaticInt{0}, Static.StaticInt{0}}}, α::Static.StaticInt{1}, β::Static.StaticInt{0}, #unused#::Static.StaticInt{64}, M::Int64, K::Int64, N::Int64, threads::PolyesterWeave.UnsignedIteratorEarlyStop{UInt8}, #unused#::Val{true})
    @ Octavian F:\Code\Julia\Julia-1.6.2\jpkgs\.julia\packages\Octavian\tN2Zr\src\matmul.jl:343
  [4] __matmul!(C::LayoutPointers.StridedPointer{Float64, 2, 1, 0, (1, 2), Tuple{Static.StaticInt{8}, Int64}, Tuple{Static.StaticInt{0}, Static.StaticInt{0}}}, A::LayoutPointers.StridedPointer{Float64, 2, 2, 0, (2, 1), Tuple{Int64, Static.StaticInt{8}}, Tuple{Static.StaticInt{0}, Static.StaticInt{0}}}, B::LayoutPointers.StridedPointer{Float64, 2, 1, 0, (1, 2), Tuple{Static.StaticInt{8}, Int64}, Tuple{Static.StaticInt{0}, Static.StaticInt{0}}}, α::Static.StaticInt{1}, β::Static.StaticInt{0}, M::Int64, K::Int64, N::Int64, nthread::Nothing)
    @ Octavian F:\Code\Julia\Julia-1.6.2\jpkgs\.julia\packages\Octavian\tN2Zr\src\matmul.jl:401
  [5] _matmul!
    @ F:\Code\Julia\Julia-1.6.2\jpkgs\.julia\packages\Octavian\tN2Zr\src\matmul.jl:305 [inlined]
  [6] matmul!
    @ F:\Code\Julia\Julia-1.6.2\jpkgs\.julia\packages\Octavian\tN2Zr\src\matmul.jl:270 [inlined]
  [7] matmul
    @ F:\Code\Julia\Julia-1.6.2\jpkgs\.julia\packages\Octavian\tN2Zr\src\matmul.jl:237 [inlined]
  [8] matmul(A::LinearAlgebra.Adjoint{Float64, Matrix{Float64}}, B::Matrix{Float64})
    @ Octavian F:\Code\Julia\Julia-1.6.2\jpkgs\.julia\packages\Octavian\tN2Zr\src\matmul.jl:240
  [9] top-level scope
    @ F:\Code\Julia\Julia-1.6.2\jpkgs\.julia\packages\Octavian\tN2Zr\src\Octavian.jl:50
 [10] include
    @ .\Base.jl:419 [inlined]
 [11] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt64}}, source::Nothing)
    @ Base .\loading.jl:1554
 [12] top-level scope
    @ stdin:1
in expression starting at F:\Code\Julia\Julia-1.6.2\jpkgs\.julia\packages\Octavian\tN2Zr\src\Octavian.jl:1
in expression starting at stdin:1
ERROR: Failed to precompile Octavian [6fd5a793-0b7e-452c-907f-f8bfe9c57db4] to F:\Code\Julia\Julia-1.6.2\jpkgs\.julia\compiled\v1.8\Octavian\jl_A0D3.tmp.
Stacktrace:
 [1] error(s::String)
   @ Base .\error.jl:35
 [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
   @ Base .\loading.jl:1705
 [3] compilecache
   @ .\loading.jl:1649 [inlined]
 [4] _require(pkg::Base.PkgId)
   @ Base .\loading.jl:1337
 [5] _require_prelocked(uuidkey::Base.PkgId)
   @ Base .\loading.jl:1200
 [6] macro expansion
   @ .\loading.jl:1180 [inlined]
 [7] macro expansion
   @ .\lock.jl:223 [inlined]
 [8] require(into::Module, mod::Symbol)
   @ Base .\loading.jl:1144
julia> versioninfo()
Julia Version 1.8.0-rc4
Commit 7853436ccd (2022-08-08 07:55 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: 8 × Intel(R) Core(TM) i5-9300HF CPU @ 2.40GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-13.0.1 (ORCJIT, skylake)
  Threads: 6 on 8 virtual cores
Environment:
  JULIA_CONDAPKG_BACKEND = System
  JULIA_CONDAPKG_EXE = F:\Anaconda\Scripts\conda.exe
  JULIA_DEPOT_PATH = F:\Code\Julia\Julia-1.6.2\jpkgs\.julia;F:\Code\Julia\Julia-1.6.2\local\share\julia\;F:\Code\Julia\Julia-1.6.2\share\julia;
  JULIA_MPI_PATH = F:/Code/MPI
  JULIA_NUM_THREADS = 6
chriselrod commented 2 years ago

What do you have for ] st -m Static?

(octavian) pkg> st -m Static Octavian
Status `~/Documents/progwork/julia/env/octavian/Manifest.toml`
  [6fd5a793] Octavian v0.3.15 `~/.julia/dev/Octavian`
  [aedffcd0] Static v0.7.5 `~/.julia/dev/Static`

julia> versioninfo()
Julia Version 1.8.0
Commit 5544a0fab7 (2022-08-17 13:38 UTC)
Platform Info:
  OS: Linux (x86_64-redhat-linux)
  CPU: 28 × Intel(R) Core(TM) i9-9940X CPU @ 3.30GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-13.0.1 (ORCJIT, skylake-avx512)
  Threads: 28 on 28 virtual cores
Environment:
  JULIA_NUM_THREADS = 28

julia> @time using Octavian
 13.145770 seconds (12.80 M allocations: 1.008 GiB, 2.85% gc time, 68.75% compilation time: 62% of which was recompilation)
Song921012 commented 2 years ago

Thank you! After upgrading Static.jl to v0.7, it works now.