Spec-Zone.ru › Eigen3

Объекты Eigen с фиксированным размером, пригодные для векторизации

Цель этой страницы — объяснить, что мы понимаем под «объектами с фиксированным размером, пригодными для векторизации».

Резюме

Объект Eigen называется «объектом с фиксированным размером, пригодным для векторизации», если его размер фиксирован и кратен 16 байтам.

Примеры включают:

  • Eigen::Vector2d
  • Eigen::Vector4d
  • Eigen::Vector4f
  • Eigen::Matrix2d
  • Eigen::Matrix2f
  • Eigen::Matrix4d
  • Eigen::Matrix4f
  • Eigen::Affine3d
  • Eigen::Affine3f
  • Eigen::Quaterniond
  • Eigen::Quaternionf

Объяснение

Прежде всего, «фиксированный размер» должен быть понятен: объект Eigen имеет фиксированный размер, если количество строк и столбцов фиксировано во время компиляции. Например, Matrix3f имеет фиксированный размер, а MatrixXf — нет (противоположность фиксированному размеру — динамический размер).

Массив коэффициентов объекта Eigen с фиксированным размером — это обычный «статический массив», он не выделяется динамически. Например, данные за Matrix4f — это просто «float array[16]».

Объекты с фиксированным размером обычно очень маленькие, поэтому мы хотим обрабатывать их без накладных расходов во время выполнения — как в плане использования памяти, так и скорости.

Теперь, векторизация работает с 128-битными пакетами (например, SSE, AltiVec, NEON), 256-битными пакетами (например, AVX) или 512-битными пакетами (например, AVX512). Кроме того, по соображениям производительности эти пакеты наиболее эффективно читаются и записываются, если они имеют такое же выравнивание, как и размер пакета, то есть 16 байт, 32 байта и 64 байта соответственно.

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

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

Spec-Zone.ru

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