4 ms·
That's what I do in C++ with Eigen or boost::ublas or any other library. Operator overloading is not a feature limited to Fortran. Fortran gets its performance
by nwallin 7y ago
That's what I do in C++ with Eigen or boost::ublas or any other library. Operator overloading is not a feature limited to Fortran.
Fortran gets its performance from prohibition of aliasing, which is something that C++ admits as per the standard. One could enable the same performance boosts with a non standard compiler flag, but this breaks a lot of codebases, including the Linux kernel AFAIK.
Aliasing is a pox upon the world. There's a lot of work gone into stuff like UBSan for C++. I think aliasing should be added to stuff that it checks for. Dunno how much overhead that would be though.
- sampo 7y agoTaking rows and columns is still nice in Eigen. For example taking the second column of a matrix is m.col(1) (Eigen, 0-based indexing) and m(:,2) (Fortran, 1-based indexing unless specified something else). But more generic array slicing with strides seems to get nasty in Eigen. For example if v2 = v(1:2:20) is Map<RowVectorXf,0,InnerStride<2> > v2(v.data(), v.size()/2); in Eigen, I don't want to read the docs for how to do the same for 2- or 3-dimensional arrays. https://eigen.tuxfamily.org/dox/group__TutorialReshapeSlicing.html https://eigen.tuxfamily.org/dox/group__TutorialReshapeSlicin...