Выравнивание структуры вектора шаблона для SSE - PullRequest
2 голосов
/ 27 февраля 2012

Я пишу программный растеризатор с использованием MSVC ++ Express 2010 для Windows.Я использую SSE и мне нужно выровнять структуры данных.У меня есть несколько отдельных векторных структур для различных основных типов данных (float, int и т. Д.), Которые я хочу свернуть в одну шаблонную структуру для удобства.Тег _declspec (align (16)), который хорошо послужил для выравнивания структур, не работает для шаблонов.Какие у меня варианты?Вот чего я хотел бы достичь:

/* _declspec(align(16)) */
template< typename T > struct baseVector 
{
    T   v[ 4 ];
};

typedef baseVector< float > vector, vertex, point;  // etc

Я пытался специализировать шаблон и использовать _declspec (align ()), но компилятор жалуется.Я также пытался использовать #pragma pack (), но я не думаю, что это имеет какой-либо эффект выравнивания, когда эти структуры являются членами структур более высокого уровня.

1 Ответ

5 голосов
/ 27 февраля 2012

declspec находится не в том месте.Должно быть после struct.

template<typename T> 
struct _declspec(align(16)) baseVector 
{
    T v[4];
};
...