Spec-Zone.ru › Eigen3

Флаги

Это возможные биты, которые можно объединить OR, чтобы составить флаги матрицы или выражения.

Важно отметить, что эти флаги — это чисто понятие времени компиляции. Они являются свойством типа выражения на этапе компиляции, реализованным в виде перечислений. Они не хранятся в памяти во время выполнения и не приводят к никакой задержке во время выполнения.

См. также
MatrixBase::Flags
const unsigned int Eigen::ActualPacketAccessBit
EIGEN_DEPRECATED const unsigned int Eigen::AlignedBit
const unsigned int Eigen::CompressedAccessBit
const unsigned int Eigen::DirectAccessBit
EIGEN_DEPRECATED const unsigned int Eigen::EvalBeforeAssigningBit
const unsigned int Eigen::EvalBeforeNestingBit
const unsigned int Eigen::LinearAccessBit
const unsigned int Eigen::LvalueBit
const unsigned int Eigen::NoPreferredStorageOrderBit
const unsigned int Eigen::PacketAccessBit
const unsigned int Eigen::RowMajorBit

ActualPacketAccessBit

const unsigned int Eigen::ActualPacketAccessBit

Если векторизация включена (EIGEN_VECTORIZE определено), эта константа устанавливается в значение PacketAccessBit.

Если векторизация не включена (EIGEN_VECTORIZE не определено), эта константа устанавливается в значение 0.

AlignedBit

EIGEN_DEPRECATED const unsigned int Eigen::AlignedBit
Устаревшее:

означает, что первый пакет коэффициентов гарантированно выровнен. Выражение не может иметь флаг AlignedBit без флага PacketAccessBit. Другими словами, это означает, что мы можем выполнить выровненное обращение к пакету первого элемента независимо от типа выражения:

expression.packet<Aligned>(0);

CompressedAccessBit

const unsigned int Eigen::CompressedAccessBit

Означает, что к базовым коэффициентам можно получить доступ через указатели к разреженной (не)сжатой структуре хранения, то есть выражение предоставляет:

inline const Scalar* valuePtr() const;
inline const Index* innerIndexPtr() const;
inline const Index* outerIndexPtr() const;
inline const Index* innerNonZeroPtr() const;

DirectAccessBit

const unsigned int Eigen::DirectAccessBit

Означает, что к базовому массиву коэффициентов можно получить прямой доступ как к обычному массиву со смещением. Структура памяти массива коэффициентов должна точно соответствовать естественной структуре, предполагаемой функциями rows(), cols(), outerStride(), innerStride() и RowMajorBit. Это исключает выражения, такие как Diagonal, коэффициенты которых, хотя и доступны, не имеют такой регулярной структуры памяти.

См. комментарий к LvalueBit для объяснения того, как LvalueBit и DirectAccessBit взаимно ортогональны.

EvalBeforeAssigningBit

EIGEN_DEPRECATED const unsigned int Eigen::EvalBeforeAssigningBit
Устаревшее:
означает, что выражение должно быть вычислено перед любым присваиванием

EvalBeforeNestingBit

const unsigned int Eigen::EvalBeforeNestingBit

означает, что выражение должно быть вычислено вызывающим выражением

LinearAccessBit

const unsigned int Eigen::LinearAccessBit

Краткое описание: означает, что выражение можно рассматривать как одномерный вектор.

Подробное описание: означает, что к коэффициентам этого выражения можно получить доступ с помощью coeff(int) и coeffRef(int) в случае выражения с lvalue. Эти методы доступа на основе индексов гарантируют, что не будет никаких вычислений во время выполнения пары (строка, столбец) из индекса, поэтому гарантируется, что доступ на основе индекса будет, по крайней мере, не медленнее доступа на основе (строка, столбец), когда он доступен. У выражений, для которых это невозможно, нет флага LinearAccessBit.

Если установлены оба флага PacketAccessBit и LinearAccessBit, то к пакетам этого выражения можно получить доступ с помощью packet(int) и writePacket(int) в случае выражения с lvalue.

Обычно все векторные выражения имеют флаг LinearAccessBit, но есть одно исключение: выражения Product не имеют его, потому что это было бы неудобно для векторизации, даже если Product является векторным выражением. Таким образом, векторные выражения Product позволяют доступ к коэффициентам на основе индексов, но не доступ к пакетам на основе индексов, поэтому у них нет флага LinearAccessBit.

LvalueBit

const unsigned int Eigen::LvalueBit

Означает, что выражение имеет метод coeffRef(), т.е. его можно изменить, так как его отдельные коэффициенты напрямую доступны. Это исключает только для чтения выражения.

Обратите внимание, что DirectAccessBit и LvalueBit взаимно ортогональны, так как существуют примеры выражений, имеющих одно, но не другое:

  • изменяемые выражения, которые не имеют очень простой структуры памяти как массива со смещением, имеют LvalueBit, но не DirectAccessBit
  • выражения Map-to-const, например Map<const Matrix>, имеют DirectAccessBit, но не LvalueBit

У выражений, имеющих LvalueBit, их метод coeff() возвращает ссылку const вместо возвращения нового значения.

NoPreferredStorageOrderBit

const unsigned int Eigen::NoPreferredStorageOrderBit

для выражения это означает, что порядок хранения может быть либо строчным, либо столбцовым. Точный выбор будет определен в момент вычисления или при комбинировании с другими выражениями.

См. также
RowMajorBit, Порядки хранения

PacketAccessBit

const unsigned int Eigen::PacketAccessBit

Краткое описание: означает, что выражение может быть векторизовано

Подробное описание: означает, что коэффициенты могут обрабатываться пакетами и начинаются в позиции памяти, выравнивание которой соответствует требованиям текущей архитектуры процессора для оптимизированного доступа к пакетам. В случае с фиксированным размером есть дополнительное условие, что все коэффициенты можно получить с помощью пакетов (это подразумевает требование, чтобы размер был кратным 16 байтам, и что любые нетривиальные смещения не нарушают выравнивание). В случае с динамическим размером нет такого условия относительно общего размера и смещений, поэтому получить доступ ко всем коэффициентам с помощью пакетов может быть невозможно.

Примечание
Этот бит может быть установлен независимо от того, включена ли векторизация. Чтобы проверить фактическую векторизуемость, см. ActualPacketAccessBit.

RowMajorBit

const unsigned int Eigen::RowMajorBit

для матрицы это означает, что порядок хранения — строчный. Если этот бит не установлен, порядок хранения — столбцовый. Для выражения это определяет порядок хранения матрицы, созданной путем вычисления этого выражения.

См. также
Порядки хранения

© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/group__flags.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API