首页 > 解决方案 > 用户定义类型的特征包处理

问题描述

我想使用特征类型进行图像处理。Tensor 模块仍然缺少太多功能(加上它在内部不受支持),所以我想使用Eigen::Array<Eigen::Array<Type, 3, 1>, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>.

Eigen 不使用Eigen::Array<Type, 3, 1>. 例如,下面代码中的 example2 会产生更高效的组装(但是,从概念上讲,它与 example1 相同)。

我猜有一些 packet_traits 允许 Eigen 对常见算术类型的不同系数进行矢量化。我想知道为 Array 添加数据包特征有多难,我应该怎么做。

void example1(const Eigen::Array<Eigen::Array3i, 4, 1>&u,
          Eigen::Array<Eigen::Array3i, 4, 1>&v) {
    EIGEN_ASM_COMMENT("example1 start");
    v = u + Eigen::Array3i(1, 1, 1);
    EIGEN_ASM_COMMENT("example1 end");
    //  Results in a lot of movl and addl
}

void example2(const Eigen::Array<int, 12, 1>&u,
          Eigen::Array<int, 12, 1>&v) {
    EIGEN_ASM_COMMENT("example2 start");
    v = u + 1;
    EIGEN_ASM_COMMENT("example2 end");
    //  Results in:
    //  vpbroadcastd    LCPI1_0(%rip), %xmm0
    //  vpaddd  (%rdi), %xmm0, %xmm1
    //  vmovdqa %xmm1, (%rsi)
    //  vpaddd  16(%rdi), %xmm0, %xmm1
    //  vmovdqa %xmm1, 16(%rsi)
    //  vpaddd  32(%rdi), %xmm0, %xmm0
    //  vmovdqa %xmm0, 32(%rsi)
}

标签: c++templateseigeneigen3

解决方案


推荐阅读