occ
Loading...
Searching...
No Matches
gemm.h File Reference
#include <algorithm>
#include <array>
#include <occ/core/linear_algebra.h>
#include <occ/core/parallel.h>
#include <unsupported/Eigen/CXX11/Tensor>
Include dependency graph for gemm.h:

Namespaces

namespace  occ
 
namespace  occ::qm
 quantum mechanics/quantum chemistry functionality including Hartree-Fock and more
 
namespace  occ::qm::cc
 

Functions

void occ::qm::cc::pgemm (Eigen::Ref< occ::Mat > C, Eigen::Ref< const occ::Mat > A, Eigen::Ref< const occ::Mat > B, bool accumulate=false, bool transA=false)
 C(m x n) = A(m x k) * B(k x n).
 
Eigen::Map< const occ::Matocc::qm::cc::mat_view (const Eigen::Tensor< double, 4 > &t, Eigen::Index r, Eigen::Index c)
 View a contiguous (column-major) 4-tensor's data as an (r x c) matrix.
 
template<int N>
void occ::qm::cc::ppermute (double *out, const double *A, const Eigen::array< Eigen::Index, N > &Adims, const Eigen::array< int, N > &perm)
 Parallel tensor permute (transpose): writes contiguous out = A.shuffle(perm) – out has dims Odim[k] = Adims[perm[k]] and out(j...) = A(source).
 
Eigen::Tensor< double, 4 > occ::qm::cc::pcon2 (const Eigen::Tensor< double, 4 > &A, int a0, int a1, const Eigen::Tensor< double, 4 > &B, int b0, int b1)
 Parallel two-index contraction of two 4-tensors – a drop-in, multithreaded replacement for A.contract(B, {(a0,b0),(a1,b1)}).
 
template<int RA, int RB, int NC>
Eigen::Tensor< double, RA+RB - 2 *NC > occ::qm::cc::pcon (const Eigen::Tensor< double, RA > &A, const Eigen::Tensor< double, RB > &B, const std::array< Eigen::IndexPair< int >, NC > &pairs)
 General N-index parallel tensor contraction – a drop-in, multithreaded replacement for A.contract(B, pairs) that routes through pgemm (BLAS), so it parallelises where Eigen's tensor contract() (serial gebp_kernel) does not.