问题描述
我有一个矩阵类,它有一个指针类成员(指向类模板变量的数据指针),我想将它声明为指向对齐内存的指针,作为对英特尔编译器的提示,它可以使用对齐访问自动矢量化代码。代码的简短版本如下:
template <class V>
class matrix{
public:
typedef __declspec(align(64)) V VA;
VA * data;
int nrows,ncols;
}
当我检查优化报告时,我发现数据访问没有对齐,除非我在使用 matrix.data 的代码块中使用 __assume_aligned。
请让我知道是否有替代方法可以让 intel/gcc 编译器知道数据字段是一个对齐的指针,这样我就不必在可以访问指针的任何地方使用 __assume_aligned。
解决方法
此问题已在英特尔社区中得到解决。请参考以下链接
_mm_malloc 确保向编译器提供对齐内存访问的提示。对齐可确保不存在第二个示例中发生的剥落环。
仅使用 malloc 会降低循环对齐的机会。在这种情况下,环未对齐导致环剥落。