计算化学公社

标题: 关于numpy的einsum的各种变种和fortran/c++的blas的效率比较 [打印本页]

作者
Author:
scf    时间: 2021-7-10 07:45
标题: 关于numpy的einsum的各种变种和fortran/c++的blas的效率比较
本帖最后由 scf 于 2021-7-10 11:35 编辑

numpy内置了一个叫einsum的张量缩并,也有人做过进一步优化 https://optimized-einsum.readthedocs.io/en/stable/ 或者调用mkl https://software.intel.com/conte ... with-intel-mkl.html

和c++/fortran自带的blas的效率对于量子化学里的张量缩并有没有比较系统的比较,包括gfortran和ifort的区别
https://stackoverflow.com/questi ... sing-blas-and-numpy
这里的结果争议略大
我比较过一点c++的boost, gfortran自带的lblas, openblas, ifort调用mkl,和einsum的各种变种,结果很复杂。



作者
Author:
hebrewsnabla    时间: 2021-7-10 12:30
本帖最后由 hebrewsnabla 于 2021-7-10 12:33 编辑

我的理解是,这些东西并不是同一类的库。MKL和各种blas是做矩阵运算的,至少主要是做这个。而einsum及其变体是做高阶张量缩并的,虽然他也能做矩阵乘矩阵,但是效率应该等于它调用的线性代数库。

这两类之间应该无法比较吧。
如果你要比较,应该是比较MKL和各种blas在矩阵运算上的区别,和比较einsum及其变体在高阶张量缩并上的差别。这两个问题差不多都有明确的答案。你要是拿MKL和einsum比,这我都不知道怎么比,他们不是干同一件事的啊

作者
Author:
scf    时间: 2021-7-10 13:06
高阶张量缩并也可以用blas做,比如 https://stackoverflow.com/questi ... -by-blas-in-fortran
作者
Author:
hebrewsnabla    时间: 2021-7-10 13:31
scf 发表于 2021-7-10 13:06
高阶张量缩并也可以用blas做,比如 https://stackoverflow.com/questions/66253618/how-to-speed-up-reshap ...

这个需要自己写程序,给比较增加了不确定性,而且每种缩并都得写一个,比较麻烦(
作者
Author:
hebrewsnabla    时间: 2021-7-10 13:40
本帖最后由 hebrewsnabla 于 2021-7-10 13:53 编辑

如果仅讨论“自动张量缩并”程序的话。
你可以看看这个 https://github.com/pyscf/pyscf/issues/835

有对numpy.einsum, pyscf.lib.einsum, 以及后者使用tblis加持的比较。

需要注意的是numpy.einsum默认的效率是很低的,需要optimize=True才行,可以达到和pyscf.lib.einsum, opt_einsum差不多的水平。不过pyscf里面常用的一些缩并还是pyscf.lib.einsum更快。






欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3