Skip to content

rtlib: Too many open files #698

Closed
Closed
@maleadt

Description

@maleadt

As encountered on Windows:

┌ Warning: Failed to load GPU runtime library at C:\Users\Tim\.julia\scratchspaces\61eb1bfa-7361-4325-ad38-22787b887f55\compiled\v1.11\v1.5\runtime_spirv-khronos.bc
│   exception =
│    SystemError: opening file "C:\\Users\\Tim\\.julia\\scratchspaces\\61eb1bfa-7361-4325-ad38-22787b887f55\\compiled\\v1.11\\v1.5\\runtime_spirv-khronos.bc": Too many open files
│    Stacktrace:
│      [1] systemerror(p::String, errno::Int32; extrainfo::Nothing)
│        @ Base .\error.jl:176
│      [2] systemerror
│        @ .\error.jl:175 [inlined]
│      [3] open(fname::String; lock::Bool, read::Nothing, write::Nothing, create::Nothing, truncate::Nothing, append::Nothing)   
│        @ Base .\iostream.jl:295
│      [4] open
│        @ .\iostream.jl:277 [inlined]
│      [5] open(f::GPUCompiler.var"#138#140", args::String; kwargs::@Kwargs{})
│        @ Base .\io.jl:408
│      [6] open
│        @ .\io.jl:407 [inlined]
│      [7] (::GPUCompiler.var"#137#139"{GPUCompiler.CompilerJob{GPUCompiler.SPIRVCompilerTarget, OpenCL.OpenCLCompilerParams}})()
│        @ GPUCompiler C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\rtlib.jl:140
│      [8] lock(f::GPUCompiler.var"#137#139"{GPUCompiler.CompilerJob{GPUCompiler.SPIRVCompilerTarget, OpenCL.OpenCLCompilerParams}}, l::ReentrantLock)
│        @ Base .\lock.jl:232
│      [9] macro expansion
│        @ C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\rtlib.jl:130 [inlined]
│     [10] load_runtime(job::GPUCompiler.CompilerJob)
│        @ GPUCompiler C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\utils.jl:116
│     [11] macro expansion
│        @ C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\driver.jl:265 [inlined]
│     [12] emit_llvm(job::GPUCompiler.CompilerJob; kwargs::@Kwargs{})
│        @ GPUCompiler C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\utils.jl:116
│     [13] emit_llvm(job::GPUCompiler.CompilerJob)
│        @ GPUCompiler C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\utils.jl:114
│     [14] compile_unhooked(output::Symbol, job::GPUCompiler.CompilerJob; kwargs::@Kwargs{})
│        @ GPUCompiler C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\driver.jl:95
│     [15] compile_unhooked
│        @ C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\driver.jl:80 [inlined]
│     [16] compile(target::Symbol, job::GPUCompiler.CompilerJob; kwargs::@Kwargs{})
│        @ GPUCompiler C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\driver.jl:67
│     [17] compile
│        @ C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\driver.jl:55 [inlined]
│     [18] #34
│        @ C:\Users\Tim\Julia\pkg\OpenCL\src\compiler\compilation.jl:59 [inlined]
│     [19] JuliaContext(f::OpenCL.var"#34#35"{GPUCompiler.CompilerJob{GPUCompiler.SPIRVCompilerTarget, OpenCL.OpenCLCompilerParams}}; kwargs::@Kwargs{})
│        @ GPUCompiler C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\driver.jl:34
│     [20] JuliaContext(f::Function)
│        @ GPUCompiler C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\driver.jl:25
│     [21] compile(job::GPUCompiler.CompilerJob)
│        @ OpenCL C:\Users\Tim\Julia\pkg\OpenCL\src\compiler\compilation.jl:58
│     [22] actual_compilation(cache::Dict{Any, Any}, src::Core.MethodInstance, world::UInt64, cfg::GPUCompiler.CompilerConfig{GPUCompiler.SPIRVCompilerTarget, OpenCL.OpenCLCompilerParams}, compiler::typeof(OpenCL.compile), linker::typeof(OpenCL.link))
│        @ GPUCompiler C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\execution.jl:245
│     [23] cached_compilation(cache::Dict{Any, Any}, src::Core.MethodInstance, cfg::GPUCompiler.CompilerConfig{GPUCompiler.SPIRVCompilerTarget, OpenCL.OpenCLCompilerParams}, compiler::Function, linker::Function)
│        @ GPUCompiler C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\execution.jl:159
│     [24] macro expansion
│        @ C:\Users\Tim\Julia\pkg\OpenCL\src\compiler\execution.jl:186 [inlined]
│     [25] macro expansion
│        @ .\lock.jl:273 [inlined]
│     [26] clfunction(f::typeof(OpenCL.partial_mapreduce_device), tt::Type{Tuple{typeof(identity), typeof(*), Float64, Val{1}, CartesianIndices{3, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}, Base.OneTo{Int64}}}, CartesianIndices{3, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}, Base.OneTo{Int64}}}, CLDeviceArray{Float64, 4, 1}, CLDeviceArray{Float64, 3, 1}}}; kwargs::@Kwargs{})
│        @ OpenCL C:\Users\Tim\Julia\pkg\OpenCL\src\compiler\execution.jl:181
│     [27] clfunction(f::typeof(OpenCL.partial_mapreduce_device), tt::Type{Tuple{typeof(identity), typeof(*), Float64, Val{1}, CartesianIndices{3, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}, Base.OneTo{Int64}}}, CartesianIndices{3, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}, Base.OneTo{Int64}}}, CLDeviceArray{Float64, 4, 1}, CLDeviceArray{Float64, 3, 1}}})
│        @ OpenCL C:\Users\Tim\Julia\pkg\OpenCL\src\compiler\execution.jl:177
│     [28] mapreducedim!(f::typeof(identity), op::typeof(*), R::CLArray{Float64, 3, OpenCL.cl.UnifiedDeviceMemory}, A::CLArray{Float64, 3, OpenCL.cl.UnifiedDeviceMemory}; init::Float64)
│        @ OpenCL C:\Users\Tim\Julia\pkg\OpenCL\src\mapreduce.jl:150
│     [29] mapreducedim!
│        @ C:\Users\Tim\Julia\pkg\OpenCL\src\mapreduce.jl:94 [inlined]
│     [30] _mapreduce(f::typeof(identity), op::typeof(*), As::CLArray{Float64, 3, OpenCL.cl.UnifiedDeviceMemory}; dims::Vector{Any}, init::Float64)
│        @ GPUArrays C:\Users\Tim\.julia\packages\GPUArrays\uiVyU\src\host\mapreduce.jl:76
│     [31] mapreduce(::Function, ::Function, ::CLArray{Float64, 3, OpenCL.cl.UnifiedDeviceMemory}; dims::Vector{Any}, init::Float64)
│        @ GPUArrays C:\Users\Tim\.julia\packages\GPUArrays\uiVyU\src\host\mapreduce.jl:28
│     [32] (::Main.var"##345".TestSuite.var"#188#193"{DataType, Vector{Any}})(A::CLArray{Float64, 3, OpenCL.cl.UnifiedDeviceMemory})
│        @ Main.var"##345".TestSuite C:\Users\Tim\.julia\packages\GPUArrays\uiVyU\test\testsuite\reductions.jl:54
│     [33] compare(f::Function, AT::Type{CLArray}, xs::Array{Float64, 3}; kwargs::@Kwargs{})
│        @ Main.var"##345".TestSuite C:\Users\Tim\.julia\packages\GPUArrays\uiVyU\test\testsuite.jl:42
│     [34] compare(f::Function, AT::Type{CLArray}, xs::Array{Float64, 3})
│        @ Main.var"##345".TestSuite C:\Users\Tim\.julia\packages\GPUArrays\uiVyU\test\testsuite.jl:36
│     [35] macro expansion
│        @ C:\Users\Tim\.julia\packages\GPUArrays\uiVyU\test\testsuite\reductions.jl:54 [inlined]
│     [36] macro expansion
│        @ C:\Users\Tim\.julia\juliaup\julia-1.11.5+0.x64.w64.mingw32\share\julia\stdlib\v1.11\Test\src\Test.jl:676 [inlined]    
│     [37] macro expansion
│        @ C:\Users\Tim\.julia\packages\GPUArrays\uiVyU\test\testsuite\reductions.jl:54 [inlined]
│     [38] macro expansion
│        @ C:\Users\Tim\.julia\juliaup\julia-1.11.5+0.x64.w64.mingw32\share\julia\stdlib\v1.11\Test\src\Test.jl:1793 [inlined]   
│     [39] (::Main.var"##345".TestSuite.var"#186#191")(AT::Type, eltypes::Vector{DataType})
│        @ Main.var"##345".TestSuite C:\Users\Tim\.julia\packages\GPUArrays\uiVyU\test\testsuite\reductions.jl:47
│     [40] test_reductions_mapreduce(AT::Type; eltypes::Vector{DataType})
│        @ Main.var"##345".TestSuite C:\Users\Tim\.julia\packages\GPUArrays\uiVyU\test\testsuite.jl:78
│     [41] (::Serialization.__deserialized_types__.var"#22#23"{String})()
│        @ Main C:\Users\Tim\Julia\pkg\OpenCL\test\runtests.jl:90
│     [42] macro expansion
│        @ C:\Users\Tim\Julia\pkg\OpenCL\test\setup.jl:107 [inlined]
│     [43] macro expansion
│        @ C:\Users\Tim\.julia\juliaup\julia-1.11.5+0.x64.w64.mingw32\share\julia\stdlib\v1.11\Test\src\Test.jl:1793 [inlined]   
│     [44] macro expansion
│        @ C:\Users\Tim\Julia\pkg\OpenCL\test\setup.jl:102 [inlined]
│     [45] macro expansion
│        @ C:\Users\Tim\.julia\juliaup\julia-1.11.5+0.x64.w64.mingw32\share\julia\stdlib\v1.11\Test\src\Test.jl:1704 [inlined]   
│     [46] macro expansion
│        @ C:\Users\Tim\Julia\pkg\OpenCL\test\setup.jl:102 [inlined]
│     [47] macro expansion
│        @ .\timing.jl:581 [inlined]
│     [48] top-level scope
│        @ C:\Users\Tim\Julia\pkg\OpenCL\test\setup.jl:101
│     [49] eval
│        @ .\boot.jl:430 [inlined]
│     [50] runtests(f::Function, name::String, platform_filter::SubString{String})
│        @ Main C:\Users\Tim\Julia\pkg\OpenCL\test\setup.jl:112
│     [51] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::@Kwargs{})
│        @ Base .\essentials.jl:1055
│     [52] invokelatest(::Any, ::Any, ::Vararg{Any})
│        @ Base .\essentials.jl:1052
│     [53] (::Distributed.var"#110#112"{Distributed.CallMsg{:call_fetch}})()
│        @ Distributed C:\Users\Tim\.julia\juliaup\julia-1.11.5+0.x64.w64.mingw32\share\julia\stdlib\v1.11\Distributed\src\process_messages.jl:287
│     [54] run_work_thunk(thunk::Distributed.var"#110#112"{Distributed.CallMsg{:call_fetch}}, print_error::Bool)
│        @ Distributed C:\Users\Tim\.julia\juliaup\julia-1.11.5+0.x64.w64.mingw32\share\julia\stdlib\v1.11\Distributed\src\process_messages.jl:70
└ @ GPUCompiler C:\Users\Tim\.julia\packages\GPUCompiler\sy6sk\src\rtlib.jl:145

We should probably cache the bytes read there.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions