Все, что я читал об использовании внутренних типов C / C ++ для возможностей SIMD, таких как MMX и SSE, указывает на то, что вы должны использовать их как непрозрачные типы и не ссылаться на внутренние компоненты напрямую.
Однако, когда я смотрю на многие примеры, они работают, беря (явно выровненные) указатели на необработанные данные и интерпретируя их как указатели на внутренние типы перед выполнением работы. Но, используя указатели на встроенные типы, и особенно при псевдонимах других данных в качестве этих типов, вы не нарушаете это правило?
Похоже, вы обнаружили, что большинство примеров — отстой.
На самом деле довольно безопасно ссылаться на «внутренние компоненты» типа SSE (пока он компилируется), и на практике вы Можно просто псевдоним их в памяти для «нормального» типа данных в памяти, и многие люди делают это, потому что это делает код немного более удобным для написания и использования.
Но это в значительной степени разрушает смысл использования SIMD. Это предотвращает много оптимизаций, и это означает, что компилятор должен постоянно хранить / загружать типы данных SIMD, а не просто хранить их в регистре SIMD.
Вы Можно сделай это, но ты должен не. И, как вы обнаружили, многие люди читают «должен» как «не стесняйтесь делать это».
Других решений пока нет …