gpt4 book ai didi

c++ - Eigen3 的自动向量化和函数间传递

转载 作者:搜寻专家 更新时间:2023-10-31 02:12:55 27 4
gpt4 key购买 nike

当类 A 传递 Eigen::Array 成员的列时,另一个类 B 获取该列,然后用 B 的 Eigen::Array 进行除法时,Eigen3 能否向量化除法?

例子:

#include <Eigen/Dense>
class A_interface {
public:
template <typename T>
void div_by(const T& rhs);
const auto col(const int col_id) const;
};
enum A_implementation { test };
template <A_implementation A_t> class A;

template <>
class A<test> : public A_interface{
public:
A(const int n_rows, const int n_cols)
: _n_rows(n_rows), _n_cols(n_cols),
_data(n_rows, n_cols) {}
const auto col(const int col_id) const {
return _data.col(col_id);
}
template <typename T>
void div_by(const T& rhs) {
for (int i = 0; i < _n_cols; ++i) {
_data.col(i) /= rhs.col(i);
}
}
private:
const int _n_rows;
const int _n_cols;
Eigen::ArrayXXf _data;
template <A_implementation A_t> friend class A;
};
int main() {
A<test> a(10,2);
A<test> b(10,2);
a.div_by(b);
}

我想这样做是因为并非 A 的所有实现都使用 Eigen::Array。

在这种情况下,div_by 方法中的双循环是由 Eigen3 还是编译器矢量化的?

最佳答案

Yes div_by 如果两个数组都按列存储(Eigen 中的默认值),则将被向量化。但是你为什么要在列上循环? _data/=rhs 怎么样?为什么要存储 _n_rows,n_cols?该信息已在 _data 中。

关于c++ - Eigen3 的自动向量化和函数间传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42046450/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com