Comments (10)
The bottlenecks seem to be the same for large-ish unit cells (20x1x1 silicon supercell). I guess that doesn't change until the orthogonalization/diagonalization costs start to dominate, which should not come up until we get to systems that require distributed-memory parallelism.
from dftk.jl.
We should compare anatomy parts performance with eg abinit, using the scripts in test/testcases_ABINIT. At this point it comes down to fine-tuning (preconditionner, eigensolver termination criteria), optimizations (real FFTs) and FFT threading/batching.
from dftk.jl.
I'm happy to do that, but I'd say the result will be disappointing at first ...
from dftk.jl.
Sure? I don't see anything apart from the above that could explain a difference, so it's clear where to go to catch up with other codes, and not that hard. Abinit has options to print timings, so we could eg get the total number of FFTs they do and compare.
from dftk.jl.
Ha, that's a good angle and a good thing to try.
from dftk.jl.
OK so I benchmarked DFTK against abinit for a very simple testcase. Ecut 50, LDA, temperature 0.01, Silicon with no kpoint, box with lattice constant a=20 (reduced position of atoms rescaled to be physical). We took 44s, abinit took 8s. I did not do any fine tuning either in abinit (just took source, made ./configure && make, and took the source of the example; I did add in FFTW, but that didn't change the timings much) or DFTK (I did specify a maximum of 4 iterations for LOBPCG, to match abinit's choice). That's not too bad! Pretty sure with a reasonable amount of work we can get to at least within a factor of 2, and possibly beat them.
I couldn't make abinit to use multithreaded, so I disabled all threading in DFTK. Turning it on (FFTW.set_num_threads(4); BLAS.set_num_thread(4)
) yielded 34s, which is not great (ie we can probably do better by explicitly threading)
from dftk.jl.
Hmm 44s to 34s indeed sounds pretty bad for me as well, but the ballpark of 44 (DFTK) versus 8 (ABINIT) sounds familiar from my experiments.
from dftk.jl.
Just to keep track of things todo: In #44 the zeros
function was discussed as an alternative to our current array = similar(data), array .= 0
pattern. This requires JuliaLang/julia#130.
from dftk.jl.
We have worked quite a bit on this stuff recently. Any objections against closing it for now? I think the low-hanging fruits discussed here are kind of done now.
from dftk.jl.
Sure. We can rebenchmark later on, but the results above might be obsolete now.
from dftk.jl.
Related Issues (20)
- Precompilation causes warning HOT 1
- Rounding issues cause bad wannier interface HOT 4
- unit and equation of calculated force HOT 2
- how to customize/define an xc functional HOT 2
- Multicomponent HOT 4
- Minus sign in Fourier transform of projectors HOT 6
- Unexpected error when using Crystallographic Information Framework (CIF) File Input HOT 5
- Use TestItemRunner.jl for managing tests
- Some characters in `https://docs.dftk.org/dev/developer/symmetries/#Crystal-symmetries` are not rendered HOT 11
- Elastic constants HOT 7
- ExtXYZ segfault HOT 1
- Stresses need an unreasonable amount of memory and runtime
- Space group numbers and symmetries
- Fix phase when possible HOT 2
- Make sure guess_density returns something with correct total charge
- Include `Manifest.toml` in the repo? HOT 2
- Use BenchmarkCI to automatically detect major runtime regressions HOT 3
- Gpu CI Failure HOT 2
- Maybe plot non-converged bands differently HOT 8
- Exact exchange status
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 dftk.jl.