Я создаю высокопроизводительный механизм компоновки пользовательского интерфейса поверх Direct3D 11. Приложение разрабатывается с использованием Visual Studio 2013 с таргетингом на x64 и предназначено для Windows 7 (с обновлением платформы) и выше.Является ли XMMATRIX эффективным для 2D-преобразований, или я должен сделать собственный набор матриц 3x3?
Мне нужно сделать преобразования матрицы на 2D-элементах в визуальном дереве, и мне интересно, использует ли DirextXMath встроенный (оптимизированный по SIMD) XMMATRIX
и связанные с ним функции, эффективные для использования в 2D (поскольку для этого требуется только матрица 3x3 в то время как XMMATRIX
и др. - 4x4), или же я должен катить собственный матричный класс/функции (возможно, без какого-либо кода, специфичного для SIMD).
Мне кажется, что матрица размером 4 × 4 будет означать, что выполняется множество избыточных вычислений, но затем это может быть компенсировано инструкциями SIMD по сравнению с матричной работой без SIMD 3x3.
Edit: Комментарии о том, как «преждевременная оптимизация есть корень всех зол» (и их производные) являются лишними здесь (и иронически преждевременным, так как вы ничего не знаете о проекте - или меня). Вопрос подводит итог тому, что меня интересует в некоторых точках зрения о/знании больше.
Почему бы не начать работу с 4x4, посмотреть, создает ли это узкое место, а затем переписать его, если это окажется самой важной проблемой в анализе производительности? Правило №1 оптимизации: * не делайте этого *. Правило №2 оптимизации (только эксперты!) * Не делайте этого ... пока *. – HostileFork
Матричные умножения 4x4 не являются узким местом в играх AAA, обрабатывающих многие, многие, многие объекты, состоящие из многих, многих и многих треугольников. Я думаю, можно с уверенностью предположить, что все будет хорошо. На самом деле, я бы не удивился, если бы ваша ручная математическая матрица была менее эффективной, чем библиотека. – delnan
Эти игры выполняют 3D-преобразования, поэтому им нужна матрица 4x4. Поскольку я делаю 2D-преобразования, я получаю матрицу 3x3. Матричное умножение 3x3 включает в себя 27 внутренних умножений. Матрица 4x4 делает 64. Это более чем в два раза больше. В любом случае - меня интересуют понятия и принципы, которые регулируют ответ на этот вопрос так же, как «делать хорошо». Если один метод лучше, чем другой, нет ничего «преждевременного» в том, чтобы использовать один из них с самого начала. – d7samurai