我们正处于将代码库移植到Eigen 3.3 的过程中(相当于所有32字节对齐问题).然而,有一些地方的表现似乎受到严重影响,与预期相反(考虑到对FMA和AVX的额外支持,我期待一些加速......).这些包括特征值分解和矩阵*matrix.transpose()*矢量积.我写了两个最小的工作示例来演示.
所有测试都在最新的Arch Linux系统上运行,使用Intel Core i7-4930K CPU(3.40GHz),并使用g ++版本6.2.1进行编译.
对于Eigen 3.3.0,直接的自伴特征值分解需要两倍于3.2.10.
档案test_eigen_EVD.cpp:
#define EIGEN_DONT_PARALLELIZE
#include <Eigen/Dense>
#include <Eigen/Eigenvalues>
#define SIZE 200
using namespace Eigen;
int main (int argc, char* argv[])
{
MatrixXf mat = MatrixXf::Random(SIZE,SIZE);
SelfAdjointEigenSolver<MatrixXf> eig;
for (int n = 0; n < 1000; ++n)
eig.compute (mat);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
检测结果:
本征3.2.10:
g++ -march=native -O2 -DNDEBUG -isystem eigen-3.2.10 test_eigen_EVD.cpp -o test_eigen_EVD && time ./test_eigen_EVD
real 0m5.136s
user 0m5.133s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)本征3.3.0:
g++ -march=native -O2 …Run Code Online (Sandbox Code Playgroud)我正在使用 C++11 线程构建一个应用程序,但我似乎无法让它在 MacOSX 10.9 上与 clang++ 一起工作。这是我能找到的导致问题的最简单示例:
#include <thread>
#include <iostream>
class Functor {
public:
Functor() = default;
Functor (const Functor& ) = delete;
void execute () {
std::cerr << "running in thread\n";
}
};
int main (int argc, char* argv[])
{
Functor functor;
std::thread thread (&Functor::execute, std::ref(functor));
thread.join();
}
Run Code Online (Sandbox Code Playgroud)
这在 Arch Linux 上使用 g++(版本 4.9.2)和以下命令行编译并运行良好:
$ g++ -std=c++11 -Wall -pthread test_thread.cpp -o test_thread
Run Code Online (Sandbox Code Playgroud)
它还可以使用 clang++(版本 3.5.0,也在 Arch Linux 上)编译并运行良好:
$ clang++ -std=c++11 -Wall -pthread test_thread.cpp -o test_thread
Run Code Online (Sandbox Code Playgroud)
但在 …