Skip to content

Use Accelerate as default backend on Apple silicon #1319

@philipturner

Description

@philipturner

Since ~April 2024, I've been swapping out the OpenBLAS installed with xTB for Apple Accelerate. It's sped up my workflows ~3x, especially for small systems, with under 1000 basis functions or orbitals. I see no reason this should not be the default library.

cd ../
rm -rf xtb
git clone https://github.com/grimme-lab/xtb

# Build using CMake because meson 1.8.2 still has errors
cd xtb
cmake -B build \
 -DCMAKE_BUILD_TYPE=Release \
 -DCMAKE_C_COMPILER="gcc-15" \
 -DCMAKE_Fortran_COMPILER="gfortran-15" \
 -DWITH_TBLITE=OFF \
 -DWITH_CPCMX=OFF \
 -DBLA_VENDOR="Apple"
make -C build -j8
make -C build test

All tests pass:

With OpenBLAS
Running tests...
Test project /Users/philipturner/Documents/MolecularRenderer/xtb/build
      Start  1: mctc-lib/cutoff
 1/70 Test  #1: mctc-lib/cutoff ..................   Passed    0.32 sec
      Start  2: mctc-lib/data
 2/70 Test  #2: mctc-lib/data ....................   Passed    0.01 sec
      Start  3: mctc-lib/math
 3/70 Test  #3: mctc-lib/math ....................   Passed    0.01 sec
      Start  4: mctc-lib/ncoord
 4/70 Test  #4: mctc-lib/ncoord ..................   Passed    0.64 sec
      Start  5: mctc-lib/read
 5/70 Test  #5: mctc-lib/read ....................   Passed    0.01 sec
      Start  6: mctc-lib/read-aims
 6/70 Test  #6: mctc-lib/read-aims ...............   Passed    0.01 sec
      Start  7: mctc-lib/read-cjson
 7/70 Test  #7: mctc-lib/read-cjson ..............   Passed    0.01 sec
      Start  8: mctc-lib/read-ctfile
 8/70 Test  #8: mctc-lib/read-ctfile .............   Passed    0.01 sec
      Start  9: mctc-lib/read-gaussian
 9/70 Test  #9: mctc-lib/read-gaussian ...........   Passed    0.01 sec
      Start 10: mctc-lib/read-genformat
10/70 Test #10: mctc-lib/read-genformat ..........   Passed    0.01 sec
      Start 11: mctc-lib/read-pdb
11/70 Test #11: mctc-lib/read-pdb ................   Passed    0.01 sec
      Start 12: mctc-lib/read-qchem
12/70 Test #12: mctc-lib/read-qchem ..............   Passed    0.01 sec
      Start 13: mctc-lib/read-qcschema
13/70 Test #13: mctc-lib/read-qcschema ...........   Passed    0.01 sec
      Start 14: mctc-lib/read-turbomole
14/70 Test #14: mctc-lib/read-turbomole ..........   Passed    0.01 sec
      Start 15: mctc-lib/read-vasp
15/70 Test #15: mctc-lib/read-vasp ...............   Passed    0.01 sec
      Start 16: mctc-lib/read-xyz
16/70 Test #16: mctc-lib/read-xyz ................   Passed    0.01 sec
      Start 17: mctc-lib/symbols
17/70 Test #17: mctc-lib/symbols .................   Passed    0.01 sec
      Start 18: mctc-lib/write
18/70 Test #18: mctc-lib/write ...................   Passed    0.01 sec
      Start 19: mctc-lib/write-aims
19/70 Test #19: mctc-lib/write-aims ..............   Passed    0.01 sec
      Start 20: mctc-lib/write-cjson
20/70 Test #20: mctc-lib/write-cjson .............   Passed    0.01 sec
      Start 21: mctc-lib/write-ctfile
21/70 Test #21: mctc-lib/write-ctfile ............   Passed    0.01 sec
      Start 22: mctc-lib/write-gaussian
22/70 Test #22: mctc-lib/write-gaussian ..........   Passed    0.01 sec
      Start 23: mctc-lib/write-genformat
23/70 Test #23: mctc-lib/write-genformat .........   Passed    0.01 sec
      Start 24: mctc-lib/write-pdb
24/70 Test #24: mctc-lib/write-pdb ...............   Passed    0.01 sec
      Start 25: mctc-lib/write-qchem
25/70 Test #25: mctc-lib/write-qchem .............   Passed    0.01 sec
      Start 26: mctc-lib/write-qcschema
26/70 Test #26: mctc-lib/write-qcschema ..........   Passed    0.01 sec
      Start 27: mctc-lib/write-turbomole
27/70 Test #27: mctc-lib/write-turbomole .........   Passed    0.01 sec
      Start 28: mctc-lib/write-vasp
28/70 Test #28: mctc-lib/write-vasp ..............   Passed    0.01 sec
      Start 29: mctc-lib/write-xyz
29/70 Test #29: mctc-lib/write-xyz ...............   Passed    0.01 sec
      Start 30: test-drive/all-tests
30/70 Test #30: test-drive/all-tests .............   Passed    0.16 sec
      Start 31: test-drive/check
31/70 Test #31: test-drive/check .................   Passed    0.01 sec
      Start 32: test-drive/select
32/70 Test #32: test-drive/select ................   Passed    0.01 sec
      Start 33: xtb/CAPI
33/70 Test #33: xtb/CAPI .........................   Passed    0.54 sec
      Start 34: xtb/atomlist
34/70 Test #34: xtb/atomlist .....................   Passed    0.22 sec
      Start 35: xtb/coordinationnumber
35/70 Test #35: xtb/coordinationnumber ...........   Passed    0.08 sec
      Start 36: xtb/coulomb
36/70 Test #36: xtb/coulomb ......................   Passed    0.38 sec
      Start 37: xtb/dftd3
37/70 Test #37: xtb/dftd3 ........................   Passed    0.46 sec
      Start 38: xtb/dftd4
38/70 Test #38: xtb/dftd4 ........................   Passed    0.46 sec
      Start 39: xtb/docking
39/70 Test #39: xtb/docking ......................   Passed    2.99 sec
      Start 40: xtb/eeq
40/70 Test #40: xtb/eeq ..........................   Passed    0.09 sec
      Start 41: xtb/gfn0
41/70 Test #41: xtb/gfn0 .........................   Passed    0.41 sec
      Start 42: xtb/gfn1
42/70 Test #42: xtb/gfn1 .........................   Passed    3.07 sec
      Start 43: xtb/gfn2
43/70 Test #43: xtb/gfn2 .........................   Passed    4.60 sec
      Start 44: xtb/gfnff
44/70 Test #44: xtb/gfnff ........................   Passed    5.21 sec
      Start 45: xtb/hessian
45/70 Test #45: xtb/hessian ......................   Passed    0.06 sec
      Start 46: xtb/iff
46/70 Test #46: xtb/iff ..........................   Passed    0.32 sec
      Start 47: xtb/latticepoint
47/70 Test #47: xtb/latticepoint .................   Passed    0.01 sec
      Start 48: xtb/molecule
48/70 Test #48: xtb/molecule .....................   Passed    0.01 sec
      Start 49: xtb/oniom
49/70 Test #49: xtb/oniom ........................   Passed    0.10 sec
      Start 50: xtb/dipro
50/70 Test #50: xtb/dipro ........................   Passed    0.01 sec
      Start 51: xtb/pbc-tools
51/70 Test #51: xtb/pbc-tools ....................   Passed    0.01 sec
      Start 52: xtb/peeq
52/70 Test #52: xtb/peeq .........................   Passed    0.10 sec
      Start 53: xtb/repulsion
53/70 Test #53: xtb/repulsion ....................   Passed    0.25 sec
      Start 54: xtb/symmetry
54/70 Test #54: xtb/symmetry .....................   Passed    0.06 sec
      Start 55: xtb/tblite
55/70 Test #55: xtb/tblite .......................   Passed    0.01 sec
      Start 56: xtb/thermo
56/70 Test #56: xtb/thermo .......................   Passed    0.01 sec
      Start 57: xtb/vertical
57/70 Test #57: xtb/vertical .....................   Passed    0.09 sec
      Start 58: xtb/wsc
58/70 Test #58: xtb/wsc ..........................   Passed    0.01 sec
      Start 59: xtb/cpx
59/70 Test #59: xtb/cpx ..........................   Passed    0.01 sec
      Start 60: xtb/ptb
60/70 Test #60: xtb/ptb ..........................   Passed    0.01 sec
      Start 61: xtb/Argparser_print_version
61/70 Test #61: xtb/Argparser_print_version ......   Passed    0.22 sec
      Start 62: xtb/Argparser_print_help
62/70 Test #62: xtb/Argparser_print_help .........   Passed    0.01 sec
      Start 63: xtb/Argparser_print_license
63/70 Test #63: xtb/Argparser_print_license ......   Passed    0.01 sec
      Start 64: xtb/Info
64/70 Test #64: xtb/Info .........................   Passed    0.02 sec
      Start 65: xtb/Singlepoint
65/70 Test #65: xtb/Singlepoint ..................   Passed    0.09 sec
      Start 66: xtb/IP/EA
66/70 Test #66: xtb/IP/EA ........................   Passed    0.16 sec
      Start 67: xtb/GFN0-xTB
67/70 Test #67: xtb/GFN0-xTB .....................   Passed    0.04 sec
      Start 68: xtb/GFN1-xTB
68/70 Test #68: xtb/GFN1-xTB .....................   Passed    0.08 sec
      Start 69: xtb/GFN2-xTB/GBSA
69/70 Test #69: xtb/GFN2-xTB/GBSA ................   Passed    0.07 sec
      Start 70: xtb/GFN2-FF
70/70 Test #70: xtb/GFN2-FF ......................   Passed    0.03 sec

100% tests passed, 0 tests failed out of 70

Total Test time (real) =  21.74 sec
With Accelerate
Running tests...
Test project /Users/philipturner/Documents/MolecularRenderer/xtb/build
      Start  1: mctc-lib/cutoff
 1/70 Test  #1: mctc-lib/cutoff ..................   Passed    0.25 sec
      Start  2: mctc-lib/data
 2/70 Test  #2: mctc-lib/data ....................   Passed    0.01 sec
      Start  3: mctc-lib/math
 3/70 Test  #3: mctc-lib/math ....................   Passed    0.01 sec
      Start  4: mctc-lib/ncoord
 4/70 Test  #4: mctc-lib/ncoord ..................   Passed    0.65 sec
      Start  5: mctc-lib/read
 5/70 Test  #5: mctc-lib/read ....................   Passed    0.01 sec
      Start  6: mctc-lib/read-aims
 6/70 Test  #6: mctc-lib/read-aims ...............   Passed    0.01 sec
      Start  7: mctc-lib/read-cjson
 7/70 Test  #7: mctc-lib/read-cjson ..............   Passed    0.01 sec
      Start  8: mctc-lib/read-ctfile
 8/70 Test  #8: mctc-lib/read-ctfile .............   Passed    0.01 sec
      Start  9: mctc-lib/read-gaussian
 9/70 Test  #9: mctc-lib/read-gaussian ...........   Passed    0.01 sec
      Start 10: mctc-lib/read-genformat
10/70 Test #10: mctc-lib/read-genformat ..........   Passed    0.01 sec
      Start 11: mctc-lib/read-pdb
11/70 Test #11: mctc-lib/read-pdb ................   Passed    0.01 sec
      Start 12: mctc-lib/read-qchem
12/70 Test #12: mctc-lib/read-qchem ..............   Passed    0.01 sec
      Start 13: mctc-lib/read-qcschema
13/70 Test #13: mctc-lib/read-qcschema ...........   Passed    0.01 sec
      Start 14: mctc-lib/read-turbomole
14/70 Test #14: mctc-lib/read-turbomole ..........   Passed    0.01 sec
      Start 15: mctc-lib/read-vasp
15/70 Test #15: mctc-lib/read-vasp ...............   Passed    0.01 sec
      Start 16: mctc-lib/read-xyz
16/70 Test #16: mctc-lib/read-xyz ................   Passed    0.01 sec
      Start 17: mctc-lib/symbols
17/70 Test #17: mctc-lib/symbols .................   Passed    0.01 sec
      Start 18: mctc-lib/write
18/70 Test #18: mctc-lib/write ...................   Passed    0.01 sec
      Start 19: mctc-lib/write-aims
19/70 Test #19: mctc-lib/write-aims ..............   Passed    0.01 sec
      Start 20: mctc-lib/write-cjson
20/70 Test #20: mctc-lib/write-cjson .............   Passed    0.01 sec
      Start 21: mctc-lib/write-ctfile
21/70 Test #21: mctc-lib/write-ctfile ............   Passed    0.01 sec
      Start 22: mctc-lib/write-gaussian
22/70 Test #22: mctc-lib/write-gaussian ..........   Passed    0.01 sec
      Start 23: mctc-lib/write-genformat
23/70 Test #23: mctc-lib/write-genformat .........   Passed    0.01 sec
      Start 24: mctc-lib/write-pdb
24/70 Test #24: mctc-lib/write-pdb ...............   Passed    0.01 sec
      Start 25: mctc-lib/write-qchem
25/70 Test #25: mctc-lib/write-qchem .............   Passed    0.01 sec
      Start 26: mctc-lib/write-qcschema
26/70 Test #26: mctc-lib/write-qcschema ..........   Passed    0.01 sec
      Start 27: mctc-lib/write-turbomole
27/70 Test #27: mctc-lib/write-turbomole .........   Passed    0.01 sec
      Start 28: mctc-lib/write-vasp
28/70 Test #28: mctc-lib/write-vasp ..............   Passed    0.01 sec
      Start 29: mctc-lib/write-xyz
29/70 Test #29: mctc-lib/write-xyz ...............   Passed    0.01 sec
      Start 30: test-drive/all-tests
30/70 Test #30: test-drive/all-tests .............   Passed    0.15 sec
      Start 31: test-drive/check
31/70 Test #31: test-drive/check .................   Passed    0.01 sec
      Start 32: test-drive/select
32/70 Test #32: test-drive/select ................   Passed    0.01 sec
      Start 33: xtb/CAPI
33/70 Test #33: xtb/CAPI .........................   Passed    0.38 sec
      Start 34: xtb/atomlist
34/70 Test #34: xtb/atomlist .....................   Passed    0.18 sec
      Start 35: xtb/coordinationnumber
35/70 Test #35: xtb/coordinationnumber ...........   Passed    0.03 sec
      Start 36: xtb/coulomb
36/70 Test #36: xtb/coulomb ......................   Passed    0.17 sec
      Start 37: xtb/dftd3
37/70 Test #37: xtb/dftd3 ........................   Passed    0.33 sec
      Start 38: xtb/dftd4
38/70 Test #38: xtb/dftd4 ........................   Passed    0.29 sec
      Start 39: xtb/docking
39/70 Test #39: xtb/docking ......................   Passed    2.10 sec
      Start 40: xtb/eeq
40/70 Test #40: xtb/eeq ..........................   Passed    0.02 sec
      Start 41: xtb/gfn0
41/70 Test #41: xtb/gfn0 .........................   Passed    0.14 sec
      Start 42: xtb/gfn1
42/70 Test #42: xtb/gfn1 .........................   Passed    0.96 sec
      Start 43: xtb/gfn2
43/70 Test #43: xtb/gfn2 .........................   Passed    2.06 sec
      Start 44: xtb/gfnff
44/70 Test #44: xtb/gfnff ........................   Passed    3.88 sec
      Start 45: xtb/hessian
45/70 Test #45: xtb/hessian ......................   Passed    0.03 sec
      Start 46: xtb/iff
46/70 Test #46: xtb/iff ..........................   Passed    0.16 sec
      Start 47: xtb/latticepoint
47/70 Test #47: xtb/latticepoint .................   Passed    0.01 sec
      Start 48: xtb/molecule
48/70 Test #48: xtb/molecule .....................   Passed    0.01 sec
      Start 49: xtb/oniom
49/70 Test #49: xtb/oniom ........................   Passed    0.04 sec
      Start 50: xtb/dipro
50/70 Test #50: xtb/dipro ........................   Passed    0.01 sec
      Start 51: xtb/pbc-tools
51/70 Test #51: xtb/pbc-tools ....................   Passed    0.01 sec
      Start 52: xtb/peeq
52/70 Test #52: xtb/peeq .........................   Passed    0.04 sec
      Start 53: xtb/repulsion
53/70 Test #53: xtb/repulsion ....................   Passed    0.05 sec
      Start 54: xtb/symmetry
54/70 Test #54: xtb/symmetry .....................   Passed    0.03 sec
      Start 55: xtb/tblite
55/70 Test #55: xtb/tblite .......................   Passed    0.01 sec
      Start 56: xtb/thermo
56/70 Test #56: xtb/thermo .......................   Passed    0.01 sec
      Start 57: xtb/vertical
57/70 Test #57: xtb/vertical .....................   Passed    0.05 sec
      Start 58: xtb/wsc
58/70 Test #58: xtb/wsc ..........................   Passed    0.01 sec
      Start 59: xtb/cpx
59/70 Test #59: xtb/cpx ..........................   Passed    0.01 sec
      Start 60: xtb/ptb
60/70 Test #60: xtb/ptb ..........................   Passed    0.01 sec
      Start 61: xtb/Argparser_print_version
61/70 Test #61: xtb/Argparser_print_version ......   Passed    0.26 sec
      Start 62: xtb/Argparser_print_help
62/70 Test #62: xtb/Argparser_print_help .........   Passed    0.02 sec
      Start 63: xtb/Argparser_print_license
63/70 Test #63: xtb/Argparser_print_license ......   Passed    0.01 sec
      Start 64: xtb/Info
64/70 Test #64: xtb/Info .........................   Passed    0.01 sec
      Start 65: xtb/Singlepoint
65/70 Test #65: xtb/Singlepoint ..................   Passed    0.03 sec
      Start 66: xtb/IP/EA
66/70 Test #66: xtb/IP/EA ........................   Passed    0.07 sec
      Start 67: xtb/GFN0-xTB
67/70 Test #67: xtb/GFN0-xTB .....................   Passed    0.02 sec
      Start 68: xtb/GFN1-xTB
68/70 Test #68: xtb/GFN1-xTB .....................   Passed    0.02 sec
      Start 69: xtb/GFN2-xTB/GBSA
69/70 Test #69: xtb/GFN2-xTB/GBSA ................   Passed    0.03 sec
      Start 70: xtb/GFN2-FF
70/70 Test #70: xtb/GFN2-FF ......................   Passed    0.01 sec

100% tests passed, 0 tests failed out of 70

Total Test time (real) =  12.88 sec

Time taken to execute test suite:

Linear Algebra Library Time
OpenBLAS 21.74 sec
Accelerate 12.88 sec

Related: #1102

Metadata

Metadata

Assignees

No one assigned

    Labels

    PipelineGitHub ActionsbuildBuild system related issues (OS, compilers, meson)platform: MacOSRelated to using this project on MacOS

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions