Comments (5)
In reference to #691, changing allocated_lock
in src/memory/binned.jl
to a ReentrantLock
appears to alleviate this issue, and it's not too much slower:
julia> l1=Threads.SpinLock();
julia> l2=ReentrantLock();
julia> @btime Base.@lock $l1 begin end
20.569 ns (0 allocations: 0 bytes)
julia> @btime Base.@lock $l2 begin end
37.242 ns (0 allocations: 0 bytes)
Perhaps changing all/some of the locks in CuArrays to a ReentrantLock
could serve as a stopgap?
from cuarrays.jl.
Perhaps changing all/some of the locks in CuArrays to a
ReentrantLock
could serve as a stopgap?
No, the code does not support that. I'll have a look.
from cuarrays.jl.
Ah I thought they'd be interchangeable. Could you elaborate why the code wouldn't support a ReentrantLock
?
from cuarrays.jl.
A reentrant lock can be taken by the same task. But in this case, we're protecting against concurrent access of datastructures that are used in regular code as well as from finalizers. So while we're modifying the map and have the lock, a GC run could trigger our finalizer that, potentially on the same task, will be able to acquire the lock and start modifying the same datastructure too.
from cuarrays.jl.
I see. So there's no guarantee that finalizes are run in a separate task and swapping allocated_lock
to a ReentrantLock
only masked that underlying problem. Thanks for clarifying! I tried to grok the code in gc.c
/task.c
etc. but.. there's a lot there :)
from cuarrays.jl.
Related Issues (20)
- similar(PermutedDimsArray(::CuArray)) isa Array HOT 1
- In CuArrays v2.0, GPU operation takes hours to run for the first time HOT 5
- sum!(y::CuVector, x::CuMatrix) throws InvalidIRError error
- Where can I find
- Where can I find All the using instructions of CuArrays? HOT 3
- add implicit float conversion to math functions HOT 4
- Multiplication between mixed types doesn't drop leading dimensions HOT 2
- Very slow 4D broadcast in 2.0.1 HOT 1
- Failed to detect installed CUDA version. HOT 1
- Sum function is slow HOT 8
- CURAND_STATUS_PREEXISTING_FAILURE with v2.0.1 but not v1.7.3 HOT 8
- Indexing CuArrays with Empty Ranges Errors HOT 5
- Sum, any, etc. with function is no longer implemented HOT 7
- Training Halts when Using CuArrarys HOT 6
- CUBLAS initialization HOT 1
- Performance issue with v2.1.0 compared with v1.7.3 HOT 4
- .+ CartesianIndices: InvalidIRError: compiling kernel broadcast HOT 1
- Package fails to load HOT 4
- Project.toml becoming stale (many notable package downgrades) HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cuarrays.jl.