【问题标题】:Aligning template vector struct for SSE对齐 SSE 的模板向量结构
【发布时间】:2012-03-16 16:17:16
【问题描述】:

我正在使用 MSVC++ Express 2010 for 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(),但是当这些结构是更高级别结构的成员时,我认为这没有任何对齐效果。

【问题讨论】:

    标签: c++ templates vector alignment sse


    【解决方案1】:

    declspec 放错地方了。它应该在struct 之后。

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

    【讨论】:

    • 根据 MSDN,也可以紧接在前面:msdn.microsoft.com/en-us/library/83ythb65.aspx
    • 好像没有效果。我的对齐错误继续存在。 @Necrolis:将它放在 struct 关键字之前会产生此错误:错误 C2988:无法识别的模板声明/定义。
    • @lamorna: 猜想这又是 MSDN 文档错误的另一个案例……
    • 经过进一步调查,我发现我的问题是一个微妙的预处理器错误,而不是对齐问题。 declspec 确实适用于模板。谢谢。
    猜你喜欢
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多