Типы данных SSE и примитивы - PullRequest
       29

Типы данных SSE и примитивы

2 голосов
/ 10 августа 2011

В большинстве уроков или фрагментов кода в сети можно увидеть следующее:

float *arr= (float*) _aligned_malloc(length * sizeof(float), 16);
__m128 *m1 = (__m128*)arr;

Это нарушает строгие правила наложения имен или нет?Я думаю, что это так, но тогда, конечно, все эти учебные пособия не игнорируют его просто для удобства, и, поскольку __m128 - это объединение, содержащее float [4], может быть, я неправильно понимаю некоторые запутанные части об этом.

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Это еще не нарушено - пока. Однако запись через один указатель и чтение через другой будет нарушать строгое псевдоним.

Вместо этого вы должны использовать такие функции, как:

1 голос
/ 28 октября 2013

Это специальный ответ компилятора для GCC

Заголовок xmmintrin для GCC 4.4.3 определяет следующее:

typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));

Итак, да, вы нарушаете строгий псевдоним, но вам разрешено делать это с этим типом.Как ни странно, тип __v4sf не помечен как __may_alias__, поэтому его нельзя использовать таким образом.

...