{{ title }}

{% if author and date %}

{{ author }} · {{ date }}

{% elif author %}

{{ author }}

{% elif date %}

{{ date }}

{% endif %}
{{ abstract }}
{{ intro }}

Environments

{{ comparison_intro }}
{% for environment in environments %}
{{ environment.label }}
{% for name, value in environment.facts %}
{{ name }}{{ value }}
{% endfor %} {% if environment.annotation %}
{{ environment.annotation }}
{% endif %}
{% endfor %}
{% for note in comparison_notes %}
{{ note }}
{% endfor %}
Compute

E to switch

Basis set

B to switch

Scaling plots

Points are converged calculations. Dashed lines are piecewise log–log. The fits are piecewise, with transitions selected by cross-validation. This allows us to capture regimes where different computational components dominate.

{{ xc_eval_label }}

Evaluation of the XC functional on the grid

For a traditional functional this is libxc's combined energy-and-derivative call on the grid, which cannot be split further. For Skala it is the network's forward pass alone: its backward differentiates all the way to the density matrix and so also performs the contraction that pyscf does outside the timed call for libxc.

X

{{ xc_eval_commentary }}

{{ numint_label }}

XC quadrature per iteration: grid and AO evaluation, density construction, functional evaluation, and potential assembly

XC quadrature evaluates the density and exchange-correlation model on the quadrature grid, then contracts the resulting potential back into the AO basis. In essence, it is the cost of the map from the density matrix to the XC energy and its derivative with respect to the density matrix.

X

{{ numint_commentary }}

{{ jk_label }}

Coulomb and exchange matrices, the other half of the Fock build

The effective potential is the J/K build plus the exchange-correlation quadrature, so subtracting numerical integration from it leaves J/K on its own. It is a difference of two measured quantities, and it is the part of an iteration that depends only on whether a functional is a hybrid or a non-hybrid.

{{ jk_commentary }}

{{ cycle_label }}

One whole SCF iteration. Median over ‘steady-state’ cycles, excluding the first few that are affected by startup overhead like JIT compilation.

The outermost of the three nested layers. Numerical integration sits inside it, and the neural forward pass inside that.

X

{{ cycle_commentary }}

End-to-end SCF time depends on the work performed in each iteration and on the number of cycles required to reach convergence.

{{ total_label }} · measured kernel wall time
{{ total_commentary }}
{{ iterations_label }} · converged iterations
{{ iterations_commentary }}

{{ setup_label }}

Work before the SCF loop: grid construction, one-electron integrals, the initial guess, the density-fitting integral build, and the Fock build on that guess. That last one is a full effective-potential evaluation, so setup also contains one exchange-correlation quadrature.

{{ setup_commentary }}

Where the time goes

One SCF iteration

The stacked bands partition a steady-state SCF iteration into four directly measured, nested layers: the exchange-correlation functional itself, the rest of the quadrature around it, the J/K build, and everything else in the iteration.

One complete SCF

The same calculation end to end.

Process start-up caveats

{{ startup_commentary }}
{% if closing %}

Closing notes

{{ closing }}
{% endif %}

Compare your own timings with these results

Follow the benchmark documentation to run the same benchmark sweep on your machine or cluster and combine your timings with these reference results.