Обработка собственных пакетов для пользовательских типов - PullRequest
0 голосов
/ 07 мая 2018

Я хочу использовать собственные типы для обработки изображений.В модуле Tensor по-прежнему отсутствует слишком много функций (плюс он внутри не поддерживается), поэтому я хочу использовать Eigen::Array<Eigen::Array<Type, 3, 1>, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>.

Eigen не векторизует операции с Eigen::Array<Type, 3, 1>.Например, example2 в приведенном ниже коде приводит к более эффективной сборке (однако, концептуально он такой же, как в example1).

Я предполагаю, что есть некоторые пакетные признаки, которые позволяют Eigen векторизовать различные коэффициенты для общих арифметических типов.Интересно, как трудно будет добавить свойства пакета для массива и как мне это сделать.

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...